Skip to content

Commit b15bd83

Browse files
committed
Mock db methods to test the service's delete method
1 parent 9b1f814 commit b15bd83

File tree

3 files changed

+75
-29
lines changed

3 files changed

+75
-29
lines changed

redisinsight/api/src/__mocks__/databases.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,12 @@ export const mockDatabaseRepository = jest.fn(() => ({
251251
pick(mockDatabase, 'id', 'name'),
252252
pick(mockDatabase, 'id', 'name'),
253253
]),
254+
createQueryBuilder: jest.fn().mockReturnThis(),
255+
leftJoinAndSelect: jest.fn().mockReturnThis(),
256+
where: jest.fn().mockReturnThis(),
257+
select: jest.fn().mockReturnThis(),
258+
getMany: jest.fn().mockResolvedValue([]),
259+
findOneBy: jest.fn().mockResolvedValue(mockDatabase),
254260
}));
255261

256262
export const mockDatabaseService = jest.fn(() => ({

redisinsight/api/src/modules/certificate/repositories/local.ca-certificate.repository.spec.ts

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -107,24 +107,45 @@ describe('LocalCaCertificateRepository', () => {
107107
});
108108

109109
describe('delete', () => {
110-
it('should delete ca certificate', async () => {
111-
const result = await service.delete(mockCaCertificate.id);
112-
113-
expect(result).toEqual(undefined);
110+
it('should delete ca certificate and return affected databases', async () => {
111+
const mockId = 'mock-ca-cert-id';
112+
const mockAffectedDatabases = ['db1', 'db2'];
113+
114+
// Mock findOneBy to return a certificate
115+
repository.findOneBy.mockResolvedValue(mockCaCertificate);
116+
117+
// Mock getMany to return affected databases
118+
const mockQueryBuilder = {
119+
leftJoinAndSelect: jest.fn().mockReturnThis(),
120+
where: jest.fn().mockReturnThis(),
121+
select: jest.fn().mockReturnThis(),
122+
getMany: jest.fn().mockResolvedValue(mockAffectedDatabases.map((id) => ({ id }))),
123+
};
124+
jest.spyOn(service['databaseRepository'], 'createQueryBuilder').mockReturnValue(mockQueryBuilder as any);
125+
126+
// Mock delete operation
127+
repository.delete.mockResolvedValue(undefined);
128+
129+
const result = await service.delete(mockId);
130+
131+
expect(result).toEqual({ affectedDatabases: mockAffectedDatabases });
132+
expect(repository.findOneBy).toHaveBeenCalledWith({ id: mockId });
133+
expect(service['databaseRepository'].createQueryBuilder).toHaveBeenCalledWith('d');
134+
expect(mockQueryBuilder.leftJoinAndSelect).toHaveBeenCalledWith('d.caCert', 'c');
135+
expect(mockQueryBuilder.where).toHaveBeenCalledWith({ caCert: mockId });
136+
expect(mockQueryBuilder.select).toHaveBeenCalledWith(['d.id']);
137+
expect(repository.delete).toHaveBeenCalledWith(mockId);
114138
});
115139

116-
it('should throw an error when trying to delete non-existing ca certificate', async () => {
117-
repository.findOneBy.mockResolvedValueOnce(null);
140+
it('should throw NotFoundException when trying to delete non-existing ca certificate', async () => {
141+
const mockId = 'non-existent-id';
118142

119-
try {
120-
await service.delete(mockCaCertificate.id);
121-
fail();
122-
} catch (e) {
123-
expect(e).toBeInstanceOf(NotFoundException);
124-
// todo: why such message?
125-
expect(e.message).toEqual('Not Found');
126-
expect(repository.delete).not.toHaveBeenCalled();
127-
}
143+
// Mock findOneBy to return null (certificate not found)
144+
repository.findOneBy.mockResolvedValue(null);
145+
146+
await expect(service.delete(mockId)).rejects.toThrow(NotFoundException);
147+
expect(repository.findOneBy).toHaveBeenCalledWith({ id: mockId });
148+
expect(repository.delete).not.toHaveBeenCalled();
128149
});
129150
});
130151
});

redisinsight/api/src/modules/certificate/repositories/local.client-certificate.repository.spec.ts

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,24 +123,43 @@ describe('LocalClientCertificateRepository', () => {
123123
});
124124

125125
describe('delete', () => {
126-
it('should delete client certificate', async () => {
127-
const result = await service.delete(mockClientCertificate.id);
126+
const mockId = 'mock-client-cert-id';
127+
const mockAffectedDatabases = ['db1', 'db2'];
128128

129-
expect(result).toEqual(undefined);
129+
beforeEach(() => {
130+
jest.clearAllMocks();
130131
});
131132

132-
it('should throw an error when trying to delete non-existing client certificate', async () => {
133-
repository.findOneBy.mockResolvedValueOnce(null);
133+
it('should delete client certificate and return affected databases', async () => {
134+
jest.spyOn(repository, 'findOneBy').mockResolvedValue(mockClientCertificate);
134135

135-
try {
136-
await service.delete(mockClientCertificate.id);
137-
fail();
138-
} catch (e) {
139-
expect(e).toBeInstanceOf(NotFoundException);
140-
// todo: why such message?
141-
expect(e.message).toEqual('Not Found');
142-
expect(repository.delete).not.toHaveBeenCalled();
143-
}
136+
const mockQueryBuilder = {
137+
leftJoinAndSelect: jest.fn().mockReturnThis(),
138+
where: jest.fn().mockReturnThis(),
139+
select: jest.fn().mockReturnThis(),
140+
getMany: jest.fn().mockResolvedValue(mockAffectedDatabases.map((id) => ({ id })))
141+
};
142+
jest.spyOn(service['databaseRepository'], 'createQueryBuilder').mockReturnValue(mockQueryBuilder as any);
143+
144+
jest.spyOn(repository, 'delete').mockResolvedValue(undefined);
145+
146+
const result = await service.delete(mockId);
147+
148+
expect(result).toEqual({ affectedDatabases: mockAffectedDatabases });
149+
expect(repository.findOneBy).toHaveBeenCalledWith({ id: mockId });
150+
expect(service['databaseRepository'].createQueryBuilder).toHaveBeenCalledWith('d');
151+
expect(mockQueryBuilder.leftJoinAndSelect).toHaveBeenCalledWith('d.clientCert', 'c');
152+
expect(mockQueryBuilder.where).toHaveBeenCalledWith({ clientCert: mockId });
153+
expect(mockQueryBuilder.select).toHaveBeenCalledWith(['d.id']);
154+
expect(repository.delete).toHaveBeenCalledWith(mockId);
155+
});
156+
157+
it('should throw NotFoundException when trying to delete non-existing client certificate', async () => {
158+
jest.spyOn(repository, 'findOneBy').mockResolvedValue(null);
159+
160+
await expect(service.delete(mockId)).rejects.toThrow(NotFoundException);
161+
expect(repository.findOneBy).toHaveBeenCalledWith({ id: mockId });
162+
expect(repository.delete).not.toHaveBeenCalled();
144163
});
145164
});
146165
});

0 commit comments

Comments
 (0)