Skip to content

Commit cd0611c

Browse files
committed
CR-263: Update tests
1 parent 944de76 commit cd0611c

File tree

5 files changed

+86
-44
lines changed

5 files changed

+86
-44
lines changed

redisinsight/api/src/modules/browser/keys/keys.service.spec.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -153,19 +153,13 @@ describe('KeysService', () => {
153153
getKeyInfoResponse.name,
154154
);
155155

156-
expect(recommendationService.check).toBeCalledWith(
157-
mockBrowserClientMetadata,
158-
RECOMMENDATION_NAMES.BIG_SETS,
159-
result,
160-
);
161-
expect(recommendationService.check).toBeCalledWith(
156+
expect(recommendationService.checkMulti).toBeCalledWith(
162157
mockBrowserClientMetadata,
163-
RECOMMENDATION_NAMES.BIG_STRINGS,
164-
result,
165-
);
166-
expect(recommendationService.check).toBeCalledWith(
167-
mockBrowserClientMetadata,
168-
RECOMMENDATION_NAMES.COMPRESSION_FOR_LIST,
158+
[
159+
RECOMMENDATION_NAMES.BIG_SETS,
160+
RECOMMENDATION_NAMES.BIG_STRINGS,
161+
RECOMMENDATION_NAMES.COMPRESSION_FOR_LIST,
162+
],
169163
result,
170164
);
171165
});

redisinsight/api/src/modules/database-recommendation/database-recommendation.service.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,21 @@ export class DatabaseRecommendationService {
5757
exists: boolean,
5858
clientMetadata: ClientMetadata, data: any,
5959
): Promise<DatabaseRecommendation> {
60-
if (exists) {
61-
return null;
62-
}
63-
64-
const recommendation = await this.scanner.determineRecommendation(
65-
clientMetadata.sessionMetadata,
66-
recommendationName,
67-
data,
68-
);
69-
70-
if (recommendation) {
71-
const entity = plainToClass(
72-
DatabaseRecommendation,
73-
{ databaseId: clientMetadata?.databaseId, ...recommendation },
60+
if (!exists) {
61+
const recommendation = await this.scanner.determineRecommendation(
62+
clientMetadata.sessionMetadata,
63+
recommendationName,
64+
data,
7465
);
7566

76-
return await this.create(clientMetadata, entity);
67+
if (recommendation) {
68+
const entity = plainToClass(
69+
DatabaseRecommendation,
70+
{ databaseId: clientMetadata?.databaseId, ...recommendation },
71+
);
72+
73+
return await this.create(clientMetadata, entity);
74+
}
7775
}
7876

7977
return null;
@@ -91,14 +89,19 @@ export class DatabaseRecommendationService {
9189
?? (await this.databaseService.get(clientMetadata.sessionMetadata, clientMetadata.databaseId))?.db
9290
?? 0,
9391
};
94-
const isRecommendationExist = await this.databaseRecommendationRepository.isExist(
92+
const isRecommendationExist = await this.databaseRecommendationRepository.isExistMulti(
9593
newClientMetadata,
9694
recommendationNames,
9795
);
9896

9997
const results = await Promise.all(
10098
recommendationNames.map(
101-
(name) => this.checkRecommendation(name, isRecommendationExist[name], newClientMetadata, data),
99+
(name) => this.checkRecommendation(
100+
name,
101+
isRecommendationExist[name],
102+
newClientMetadata,
103+
data,
104+
),
102105
),
103106
);
104107

redisinsight/api/src/modules/database-recommendation/repositories/database-recommendation.repository.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,19 @@ export abstract class DatabaseRecommendationRepository {
4242
): Promise<DatabaseRecommendation>;
4343

4444
/**
45-
* Check is recommendation already exist in repository
45+
* Check if recommendation already exist in repository
46+
* @param clientMetadata
47+
* @param name
48+
* @return Boolean
49+
*/
50+
abstract isExist(clientMetadata: ClientMetadata, name: string): Promise<boolean>;
51+
52+
/**
53+
* Check if one or more recommendations exist in repository
4654
* @param clientMetadata
4755
* @param names
48-
* @return Map<string, boolean>
4956
*/
50-
abstract isExist(clientMetadata: ClientMetadata, names: string[]): Promise<Map<string, boolean>>;
57+
abstract isExistMulti(clientMetadata: ClientMetadata, names: string[]): Promise<Map<string, boolean>>;
5158

5259
/**
5360
* Get database recommendation by id

redisinsight/api/src/modules/database-recommendation/repositories/local.database.recommendation.repository.spec.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,33 @@ describe('LocalDatabaseRecommendationRepository', () => {
6464

6565
describe('isExist', () => {
6666
it('should return true when receive database entity', async () => {
67-
expect(await service.isExist(mockClientMetadata, [mockRecommendationName])).toEqual({ [mockRecommendationName]: true });
67+
expect(await service.isExist(mockClientMetadata, mockRecommendationName)).toEqual(true);
6868
});
6969

7070
it('should return false when no database received', async () => {
7171
repository.findOneBy.mockResolvedValueOnce(null);
72-
expect(await service.isExist(mockClientMetadata, [mockRecommendationName])).toEqual({ [mockRecommendationName]: false });
72+
expect(await service.isExist(mockClientMetadata, mockRecommendationName)).toEqual(false);
7373
});
7474

75-
it('should return empty object when received error', async () => {
75+
it('should return false when received error', async () => {
7676
repository.findOneBy.mockRejectedValueOnce(new Error());
77-
expect(await service.isExist(mockClientMetadata, [mockRecommendationName])).toEqual({});
77+
expect(await service.isExist(mockClientMetadata, mockRecommendationName)).toEqual(false);
78+
});
79+
});
80+
81+
describe('isExistMulti', () => {
82+
it('should return results for multiple recommendation names', async () => {
83+
repository.findOneBy.mockResolvedValueOnce(null);
84+
repository.findOneBy.mockResolvedValueOnce({});
85+
expect(await service.isExistMulti(mockClientMetadata, ['test1', 'test2'])).toEqual({
86+
test1: false,
87+
test2: true,
88+
});
89+
});
90+
91+
it('should return empty Map when received error', async () => {
92+
repository.findOneBy.mockRejectedValueOnce(new Error());
93+
expect(await service.isExistMulti(mockClientMetadata, ['test1', 'test2'])).toEqual({});
7894
});
7995
});
8096

redisinsight/api/src/modules/database-recommendation/repositories/local.database.recommendation.repository.ts

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export class LocalDatabaseRecommendationRepository extends DatabaseRecommendatio
4141

4242
/**
4343
* Save entire entity
44-
* @param _
44+
* @param sessionMetadata
4545
* @param entity
4646
*/
4747
async create(sessionMetadata: SessionMetadata, entity: DatabaseRecommendation): Promise<DatabaseRecommendation> {
@@ -102,7 +102,7 @@ export class LocalDatabaseRecommendationRepository extends DatabaseRecommendatio
102102
}
103103

104104
/**
105-
* Read all recommendations recommendations
105+
* Read all recommendations
106106
* @param clientMetadata
107107
*/
108108
async read(clientMetadata: ClientMetadata): Promise<void> {
@@ -147,24 +147,46 @@ export class LocalDatabaseRecommendationRepository extends DatabaseRecommendatio
147147
/**
148148
* Check is recommendation exist in database
149149
* @param clientMetadata
150-
* @param names
150+
* @param name
151151
*/
152152
async isExist(
153153
clientMetadata: ClientMetadata,
154-
names: string[],
155-
): Promise<Map<string, boolean>> {
154+
name: string,
155+
): Promise<boolean> {
156156
const { databaseId } = clientMetadata;
157157
try {
158-
this.logger.debug('Checking if recommendations exist', clientMetadata, names);
158+
this.logger.debug(`Checking is recommendation ${name} exist`, clientMetadata);
159+
const recommendation = await this.repository.findOneBy({ databaseId, name });
160+
161+
this.logger.debug(`Succeed to check is recommendation ${name} exist'`, clientMetadata);
162+
return !!recommendation;
163+
} catch (err) {
164+
this.logger.error(`Failed to check is recommendation ${name} exist'`, err, clientMetadata);
165+
return false;
166+
}
167+
}
159168

160-
const results = await Promise.all(names.map((name) => this.repository.findOneBy({ databaseId, name })));
169+
/**
170+
* Check if one or more recommendations exist in database
171+
* @param clientMetadata
172+
* @param names
173+
*/
174+
async isExistMulti(clientMetadata: ClientMetadata, names: string[]): Promise<Map<string, boolean>> {
175+
const { databaseId } = clientMetadata;
176+
177+
try {
178+
this.logger.debug('Checking if recommendations exist', names, clientMetadata);
179+
180+
const results = await Promise.all(
181+
names.map((name) => this.repository.findOneBy({ databaseId, name })),
182+
);
161183

162184
return results.reduce((acc, result, idx) => ({
163185
...acc,
164186
[names[idx]]: !!result,
165187
}), {} as Map<string, boolean>);
166188
} catch (err) {
167-
this.logger.error('Failed to check existence of recommendations', err, clientMetadata, names);
189+
this.logger.error('Failed to check existence of recommendations', err, names, clientMetadata);
168190
return {} as Map<string, boolean>;
169191
}
170192
}

0 commit comments

Comments
 (0)