Skip to content

Commit c2bbebd

Browse files
committed
fix: test broken
1 parent a25950c commit c2bbebd

File tree

4 files changed

+113
-60
lines changed

4 files changed

+113
-60
lines changed

packages/cli/src/environments.ee/source-control/__tests__/source-control-https.service.ee.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,16 @@ describe('SourceControlGitService - HTTPS functionality', () => {
2121
let sourceControlGitService: SourceControlGitService;
2222
let sourceControlPreferencesService: SourceControlPreferencesService;
2323

24-
const mockPreferences: Partial<SourceControlPreferences> = {
24+
const mockPreferences: SourceControlPreferences = {
2525
repositoryUrl: 'https://github.com/user/repo.git',
2626
branchName: 'main',
2727
connectionType: 'https',
28+
branchReadOnly: false,
29+
branchColor: '#5296D6',
30+
connected: false,
31+
publicKey: '',
32+
initRepo: false,
33+
keyGeneratorType: 'ed25519',
2834
};
2935

3036
beforeEach(() => {
@@ -163,7 +169,7 @@ describe('SourceControlGitService - HTTPS functionality', () => {
163169

164170
expect(httpsPrefs.connectionType).toBe('https');
165171
expect(sshPrefs.connectionType).toBe('ssh');
166-
expect(httpsPrefs.connectionType !== sshPrefs.connectionType).toBe(true);
172+
expect(httpsPrefs.connectionType).not.toBe(sshPrefs.connectionType);
167173
});
168174
});
169175
});

packages/cli/src/environments.ee/source-control/__tests__/source-control-integration.test.ts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,16 @@
11
import { mock } from 'jest-mock-extended';
22

3-
import { SourceControlService } from '../source-control.service.ee';
43
import type { SourceControlGitService } from '../source-control-git.service.ee';
54
import type { SourceControlPreferencesService } from '../source-control-preferences.service.ee';
65
import type { SourceControlPreferences } from '../types/source-control-preferences';
76

87
describe('SourceControl Integration Tests', () => {
9-
let sourceControlService: SourceControlService;
108
let mockGitService: SourceControlGitService;
119
let mockPreferencesService: SourceControlPreferencesService;
1210

1311
beforeEach(() => {
1412
mockGitService = mock<SourceControlGitService>();
1513
mockPreferencesService = mock<SourceControlPreferencesService>();
16-
17-
sourceControlService = new SourceControlService(
18-
mock(),
19-
mockGitService,
20-
mockPreferencesService,
21-
mock(),
22-
mock(),
23-
mock(),
24-
mock(),
25-
mock(),
26-
mock(),
27-
);
2814
});
2915

3016
describe('HTTPS vs SSH Integration', () => {
@@ -202,12 +188,27 @@ describe('SourceControl Integration Tests', () => {
202188
it('should handle connection errors gracefully', async () => {
203189
// Arrange
204190
const error = new Error('Connection failed');
205-
jest.spyOn(mockGitService, 'hasRemoteConfigured').mockRejectedValue(error);
191+
jest.spyOn(mockGitService, 'initService').mockRejectedValue(error);
206192

207193
// Act & Assert
208-
await expect(mockGitService.hasRemoteConfigured('test-url')).rejects.toThrow(
209-
'Connection failed',
210-
);
194+
const options = {
195+
sourceControlPreferences: {
196+
repositoryUrl: 'https://github.com/user/repo.git',
197+
branchName: 'main',
198+
connectionType: 'https' as const,
199+
initRepo: true,
200+
connected: false,
201+
branchReadOnly: false,
202+
branchColor: '#5296D6',
203+
publicKey: '',
204+
keyGeneratorType: 'ed25519' as const,
205+
},
206+
gitFolder: '/tmp/git',
207+
sshFolder: '/tmp/ssh',
208+
sshKeyName: 'id_ed25519',
209+
};
210+
211+
await expect(mockGitService.initService(options)).rejects.toThrow('Connection failed');
211212
});
212213

213214
it('should handle invalid preferences', () => {

packages/cli/src/environments.ee/source-control/__tests__/source-control-preferences-https.service.ee.test.ts

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
1313

1414
beforeEach(() => {
1515
mockInstanceSettings = mock<InstanceSettings>({ n8nFolder: '/test' });
16-
mockCipher = mock<Cipher>();
16+
mockCipher = {
17+
encrypt: jest.fn(),
18+
decrypt: jest.fn(),
19+
} as unknown as Cipher;
1720
mockSettingsRepository = mock<SettingsRepository>();
1821

1922
sourceControlPreferencesService = new SourceControlPreferencesService(
@@ -37,7 +40,7 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
3740
const encryptedUsername = 'encrypted_user';
3841
const encryptedPassword = 'encrypted_pass';
3942

40-
mockCipher.encrypt
43+
(mockCipher.encrypt as jest.Mock)
4144
.mockReturnValueOnce(encryptedUsername)
4245
.mockReturnValueOnce(encryptedPassword);
4346

@@ -62,7 +65,7 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
6265
const username = 'testuser';
6366
const password = 'testtoken';
6467

65-
mockCipher.encrypt.mockImplementation(() => {
68+
jest.spyOn(mockCipher, 'encrypt').mockImplementation(() => {
6669
throw new Error('Encryption failed');
6770
});
6871

@@ -83,12 +86,13 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
8386
const decryptedUsername = 'testuser';
8487
const decryptedPassword = 'testtoken';
8588

86-
mockSettingsRepository.findByKey.mockResolvedValue({
89+
jest.spyOn(mockSettingsRepository, 'findByKey').mockResolvedValue({
8790
key: 'features.sourceControl.httpsCredentials',
8891
value: JSON.stringify(encryptedCredentials),
8992
} as any);
9093

91-
mockCipher.decrypt
94+
jest
95+
.spyOn(mockCipher, 'decrypt')
9296
.mockReturnValueOnce(decryptedUsername)
9397
.mockReturnValueOnce(decryptedPassword);
9498

@@ -106,7 +110,7 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
106110

107111
it('should return null when no credentials are stored', async () => {
108112
// Arrange
109-
mockSettingsRepository.findByKey.mockResolvedValue(null);
113+
jest.spyOn(mockSettingsRepository, 'findByKey').mockResolvedValue(null);
110114

111115
// Act
112116
const result = await sourceControlPreferencesService.getDecryptedHttpsCredentials();
@@ -117,7 +121,7 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
117121

118122
it('should return null when stored value is invalid JSON', async () => {
119123
// Arrange
120-
mockSettingsRepository.findByKey.mockResolvedValue({
124+
jest.spyOn(mockSettingsRepository, 'findByKey').mockResolvedValue({
121125
key: 'features.sourceControl.httpsCredentials',
122126
value: 'invalid-json',
123127
} as any);
@@ -131,7 +135,7 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
131135

132136
it('should return null when stored value is null', async () => {
133137
// Arrange
134-
mockSettingsRepository.findByKey.mockResolvedValue({
138+
jest.spyOn(mockSettingsRepository, 'findByKey').mockResolvedValue({
135139
key: 'features.sourceControl.httpsCredentials',
136140
value: null,
137141
} as any);
@@ -157,7 +161,7 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
157161

158162
it('should handle deletion errors gracefully without throwing', async () => {
159163
// Arrange
160-
mockSettingsRepository.delete.mockRejectedValue(new Error('Delete failed'));
164+
jest.spyOn(mockSettingsRepository, 'delete').mockRejectedValue(new Error('Delete failed'));
161165

162166
// Act & Assert - Should not throw
163167
await expect(
@@ -179,9 +183,10 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
179183

180184
const saveSpy = jest
181185
.spyOn(sourceControlPreferencesService, 'saveHttpsCredentials')
182-
.mockResolvedValue();
186+
.mockResolvedValue(undefined);
183187

184-
mockCipher.encrypt
188+
jest
189+
.spyOn(mockCipher, 'encrypt')
185190
.mockReturnValueOnce('encrypted_user')
186191
.mockReturnValueOnce('encrypted_pass');
187192

@@ -207,11 +212,14 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
207212
.spyOn(sourceControlPreferencesService as any, 'getKeyPairFromDatabase')
208213
.mockResolvedValue(null);
209214

215+
const mockResult = { publicKey: 'mock-key' } as SourceControlPreferences;
210216
const generateSpy = jest
211217
.spyOn(sourceControlPreferencesService, 'generateAndSaveKeyPair')
212-
.mockResolvedValue();
218+
.mockResolvedValue(mockResult);
213219

214-
jest.spyOn(sourceControlPreferencesService, 'saveHttpsCredentials').mockResolvedValue();
220+
jest
221+
.spyOn(sourceControlPreferencesService, 'saveHttpsCredentials')
222+
.mockResolvedValue(undefined);
215223

216224
// Act
217225
await sourceControlPreferencesService.setPreferences(preferences);
@@ -230,9 +238,10 @@ describe('SourceControlPreferencesService - HTTPS functionality', () => {
230238
.spyOn(sourceControlPreferencesService as any, 'getKeyPairFromDatabase')
231239
.mockResolvedValue(null);
232240

241+
const mockResult = { publicKey: 'mock-key' } as SourceControlPreferences;
233242
const generateSpy = jest
234243
.spyOn(sourceControlPreferencesService, 'generateAndSaveKeyPair')
235-
.mockResolvedValue();
244+
.mockResolvedValue(mockResult);
236245

237246
// Act
238247
await sourceControlPreferencesService.setPreferences(preferences);

packages/cli/src/environments.ee/source-control/__tests__/source-control-service-disconnect.ee.test.ts

Lines changed: 63 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { SourceControlService } from '../source-control.service.ee';
44
import type { SourceControlGitService } from '../source-control-git.service.ee';
55
import type { SourceControlPreferencesService } from '../source-control-preferences.service.ee';
66
import type { SourceControlExportService } from '../source-control-export.service.ee';
7+
import type { SourceControlPreferences } from '../types/source-control-preferences';
78

89
describe('SourceControlService - disconnect functionality', () => {
910
let sourceControlService: SourceControlService;
@@ -38,16 +39,22 @@ describe('SourceControlService - disconnect functionality', () => {
3839
describe('disconnect', () => {
3940
it('should clean up HTTPS credentials when connection type is HTTPS', async () => {
4041
// Arrange
41-
const httpsPreferences = {
42+
const httpsPreferences: SourceControlPreferences = {
4243
connectionType: 'https' as const,
4344
repositoryUrl: 'https://github.com/user/repo.git',
4445
connected: true,
46+
branchName: 'main',
47+
branchReadOnly: false,
48+
branchColor: '#5296D6',
49+
publicKey: '',
50+
initRepo: false,
51+
keyGeneratorType: 'ed25519',
4552
};
4653

47-
mockPreferencesService.getPreferences.mockReturnValue(httpsPreferences);
48-
mockPreferencesService.setPreferences.mockResolvedValue({} as any);
54+
jest.spyOn(mockPreferencesService, 'getPreferences').mockReturnValue(httpsPreferences);
55+
jest.spyOn(mockPreferencesService, 'setPreferences').mockResolvedValue({} as any);
4956
mockPreferencesService.deleteHttpsCredentials = jest.fn().mockResolvedValue(undefined);
50-
mockExportService.deleteRepositoryFolder.mockResolvedValue();
57+
jest.spyOn(mockExportService, 'deleteRepositoryFolder').mockResolvedValue(undefined);
5158

5259
await sourceControlService.disconnect();
5360

@@ -62,16 +69,22 @@ describe('SourceControlService - disconnect functionality', () => {
6269
});
6370

6471
it('should clean up SSH key pair when connection type is SSH and keepKeyPair is false', async () => {
65-
const sshPreferences = {
72+
const sshPreferences: SourceControlPreferences = {
6673
connectionType: 'ssh' as const,
6774
repositoryUrl: 'git@github.com:user/repo.git',
6875
connected: true,
76+
branchName: 'main',
77+
branchReadOnly: false,
78+
branchColor: '#5296D6',
79+
publicKey: '',
80+
initRepo: false,
81+
keyGeneratorType: 'ed25519',
6982
};
7083

71-
mockPreferencesService.getPreferences.mockReturnValue(sshPreferences);
72-
mockPreferencesService.setPreferences.mockResolvedValue({} as any);
73-
mockPreferencesService.deleteKeyPair = jest.fn().mockResolvedValue();
74-
mockExportService.deleteRepositoryFolder.mockResolvedValue();
84+
jest.spyOn(mockPreferencesService, 'getPreferences').mockReturnValue(sshPreferences);
85+
jest.spyOn(mockPreferencesService, 'setPreferences').mockResolvedValue({} as any);
86+
mockPreferencesService.deleteKeyPair = jest.fn().mockResolvedValue(undefined);
87+
jest.spyOn(mockExportService, 'deleteRepositoryFolder').mockResolvedValue(undefined);
7588

7689
await sourceControlService.disconnect({ keepKeyPair: false });
7790

@@ -86,16 +99,22 @@ describe('SourceControlService - disconnect functionality', () => {
8699
});
87100

88101
it('should keep SSH key pair when connection type is SSH and keepKeyPair is true', async () => {
89-
const sshPreferences = {
102+
const sshPreferences: SourceControlPreferences = {
90103
connectionType: 'ssh' as const,
91104
repositoryUrl: 'git@github.com:user/repo.git',
92105
connected: true,
106+
branchName: 'main',
107+
branchReadOnly: false,
108+
branchColor: '#5296D6',
109+
publicKey: '',
110+
initRepo: false,
111+
keyGeneratorType: 'ed25519',
93112
};
94113

95-
mockPreferencesService.getPreferences.mockReturnValue(sshPreferences);
96-
mockPreferencesService.setPreferences.mockResolvedValue({} as any);
97-
mockPreferencesService.deleteKeyPair = jest.fn().mockResolvedValue();
98-
mockExportService.deleteRepositoryFolder.mockResolvedValue();
114+
jest.spyOn(mockPreferencesService, 'getPreferences').mockReturnValue(sshPreferences);
115+
jest.spyOn(mockPreferencesService, 'setPreferences').mockResolvedValue({} as any);
116+
mockPreferencesService.deleteKeyPair = jest.fn().mockResolvedValue(undefined);
117+
jest.spyOn(mockExportService, 'deleteRepositoryFolder').mockResolvedValue(undefined);
99118

100119
await sourceControlService.disconnect({ keepKeyPair: true });
101120

@@ -110,17 +129,23 @@ describe('SourceControlService - disconnect functionality', () => {
110129
});
111130

112131
it('should not delete SSH keys when connection type is HTTPS', async () => {
113-
const httpsPreferences = {
132+
const httpsPreferences: SourceControlPreferences = {
114133
connectionType: 'https' as const,
115134
repositoryUrl: 'https://github.com/user/repo.git',
116135
connected: true,
136+
branchName: 'main',
137+
branchReadOnly: false,
138+
branchColor: '#5296D6',
139+
publicKey: '',
140+
initRepo: false,
141+
keyGeneratorType: 'ed25519',
117142
};
118143

119-
mockPreferencesService.getPreferences.mockReturnValue(httpsPreferences);
120-
mockPreferencesService.setPreferences.mockResolvedValue({} as any);
144+
jest.spyOn(mockPreferencesService, 'getPreferences').mockReturnValue(httpsPreferences);
145+
jest.spyOn(mockPreferencesService, 'setPreferences').mockResolvedValue({} as any);
121146
mockPreferencesService.deleteHttpsCredentials = jest.fn().mockResolvedValue(undefined);
122-
mockPreferencesService.deleteKeyPair = jest.fn().mockResolvedValue();
123-
mockExportService.deleteRepositoryFolder.mockResolvedValue();
147+
mockPreferencesService.deleteKeyPair = jest.fn().mockResolvedValue(undefined);
148+
jest.spyOn(mockExportService, 'deleteRepositoryFolder').mockResolvedValue(undefined);
124149

125150
await sourceControlService.disconnect({ keepKeyPair: false });
126151

@@ -129,31 +154,43 @@ describe('SourceControlService - disconnect functionality', () => {
129154
});
130155

131156
it('should handle errors during disconnect gracefully', async () => {
132-
const httpsPreferences = {
157+
const httpsPreferences: SourceControlPreferences = {
133158
connectionType: 'https' as const,
134159
repositoryUrl: 'https://github.com/user/repo.git',
135160
connected: true,
161+
branchName: 'main',
162+
branchReadOnly: false,
163+
branchColor: '#5296D6',
164+
publicKey: '',
165+
initRepo: false,
166+
keyGeneratorType: 'ed25519',
136167
};
137168

138-
mockPreferencesService.getPreferences.mockReturnValue(httpsPreferences);
139-
mockPreferencesService.setPreferences.mockRejectedValue(new Error('DB error'));
169+
jest.spyOn(mockPreferencesService, 'getPreferences').mockReturnValue(httpsPreferences);
170+
jest.spyOn(mockPreferencesService, 'setPreferences').mockRejectedValue(new Error('DB error'));
140171

141172
await expect(sourceControlService.disconnect()).rejects.toThrow(
142173
'Failed to disconnect from source control',
143174
);
144175
});
145176

146177
it('should reset connection type to SSH by default', async () => {
147-
const httpsPreferences = {
178+
const httpsPreferences: SourceControlPreferences = {
148179
connectionType: 'https' as const,
149180
repositoryUrl: 'https://github.com/user/repo.git',
150181
connected: true,
182+
branchName: 'main',
183+
branchReadOnly: false,
184+
branchColor: '#5296D6',
185+
publicKey: '',
186+
initRepo: false,
187+
keyGeneratorType: 'ed25519',
151188
};
152189

153-
mockPreferencesService.getPreferences.mockReturnValue(httpsPreferences);
154-
mockPreferencesService.setPreferences.mockResolvedValue({} as any);
190+
jest.spyOn(mockPreferencesService, 'getPreferences').mockReturnValue(httpsPreferences);
191+
jest.spyOn(mockPreferencesService, 'setPreferences').mockResolvedValue({} as any);
155192
mockPreferencesService.deleteHttpsCredentials = jest.fn().mockResolvedValue(undefined);
156-
mockExportService.deleteRepositoryFolder.mockResolvedValue();
193+
jest.spyOn(mockExportService, 'deleteRepositoryFolder').mockResolvedValue(undefined);
157194

158195
await sourceControlService.disconnect();
159196

0 commit comments

Comments
 (0)