Skip to content

Commit 3840380

Browse files
Merge pull request #3199 from RedisInsight/feature/dynamic-dependencies
Feature/dynamic dependencies
2 parents 8c3d681 + a970c37 commit 3840380

File tree

196 files changed

+3712
-1890
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

196 files changed

+3712
-1890
lines changed

redisinsight/api/config/default.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ export default {
112112
redis_scan: {
113113
countDefault: parseInt(process.env.RI_SCAN_COUNT_DEFAULT, 10) || 200,
114114
countThreshold: parseInt(process.env.RI_SCAN_COUNT_THRESHOLD, 10) || 10000,
115+
countThresholdMax: parseInt(process.env.RI_SCAN_COUNT_THRESHOLD_MAX, 10) || Number.MAX_VALUE,
115116
},
116117
modules: {
117118
json: {
@@ -218,7 +219,8 @@ export default {
218219
timeout: parseInt(process.env.RI_CONNECTIONS_TIMEOUT_DEFAULT, 10) || 30 * 1_000, // 30 sec
219220
},
220221
redisStack: {
221-
id: process.env.RI_BUILD_TYPE === 'REDIS_STACK' ? process.env.RI_REDIS_STACK_DATABASE_ID || 'redis-stack' : undefined,
222+
id: process.env.RI_BUILD_TYPE === 'REDIS_STACK'
223+
? process.env.RI_REDIS_STACK_DATABASE_ID || 'redis-stack' : undefined,
222224
name: process.env.RI_REDIS_STACK_DATABASE_NAME,
223225
host: process.env.RI_REDIS_STACK_DATABASE_HOST,
224226
port: process.env.RI_REDIS_STACK_DATABASE_PORT,

redisinsight/api/src/__mocks__/browser-history.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const mockBrowserHistoryService = () => ({
1616
bulkDelete: jest.fn(),
1717
});
1818

19-
export const mockBrowserHistoryProvider = jest.fn(() => ({
19+
export const mockBrowserHistoryRepository = jest.fn(() => ({
2020
create: jest.fn(),
2121
get: jest.fn(),
2222
list: jest.fn(),

redisinsight/api/src/__mocks__/common.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { ClientContext, ClientMetadata, SessionMetadata } from 'src/common/models';
22
import { mockDatabase } from 'src/__mocks__/databases';
33
import { v4 as uuidv4 } from 'uuid';
4+
import { mockUserId } from 'src/__mocks__/user';
45

56
export type MockType<T> = {
67
[P in keyof T]: jest.Mock<any>;
78
};
89

910
export const mockQueryBuilderWhere = jest.fn().mockReturnThis();
11+
export const mockQueryBuilderSelect = jest.fn().mockReturnThis();
1012
export const mockQueryBuilderGetOne = jest.fn();
1113
export const mockQueryBuilderGetMany = jest.fn();
1214
export const mockQueryBuilderGetManyRaw = jest.fn();
@@ -17,7 +19,7 @@ export const mockCreateQueryBuilder = jest.fn(() => ({
1719
where: mockQueryBuilderWhere,
1820
orWhere: mockQueryBuilderWhere,
1921
update: jest.fn().mockReturnThis(),
20-
select: jest.fn().mockReturnThis(),
22+
select: mockQueryBuilderSelect,
2123
set: jest.fn().mockReturnThis(),
2224
orderBy: jest.fn().mockReturnThis(),
2325
groupBy: jest.fn().mockReturnThis(),
@@ -52,10 +54,16 @@ export const mockRepository = jest.fn(() => ({
5254
}));
5355

5456
export const mockSessionMetadata: SessionMetadata = {
55-
userId: uuidv4(),
57+
userId: mockUserId,
5658
sessionId: uuidv4(),
5759
};
5860

61+
export const mockClientMetadata: ClientMetadata = {
62+
sessionMetadata: mockSessionMetadata,
63+
databaseId: mockDatabase.id,
64+
context: ClientContext.Common,
65+
};
66+
5967
export const mockCliClientMetadata: ClientMetadata = {
6068
sessionMetadata: mockSessionMetadata,
6169
databaseId: mockDatabase.id,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { mockSessionMetadata } from 'src/__mocks__/common';
2+
3+
export const mockConstantsProvider = jest.fn(() => ({
4+
getSystemSessionMetadata: jest.fn().mockReturnValue(mockSessionMetadata),
5+
}));

redisinsight/api/src/__mocks__/database-recommendation.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const mockRecommendationName = 'string';
1010

1111
export const mockDatabaseRecommendationParamsEncrypted = 'recommendation.params_ENCRYPTED';
1212

13-
export const mockDatabaseRecommendationParamsPlain = [];
13+
export const mockDatabaseRecommendationParamsPlain = {};
1414

1515
export const mockDatabaseRecommendation = Object.assign(new DatabaseRecommendation(), {
1616
id: mockDatabaseRecommendationId,
@@ -40,3 +40,23 @@ export const mockDatabaseRecommendationService = () => ({
4040
export const mockDatabaseRecommendationProvider = jest.fn(() => ({
4141
getStrategy: jest.fn(),
4242
}));
43+
44+
export const mockDatabaseRecommendationRepository = jest.fn(() => ({
45+
create: jest.fn(),
46+
list: jest.fn(),
47+
read: jest.fn(),
48+
update: jest.fn(),
49+
isExist: jest.fn(),
50+
get: jest.fn(),
51+
sync: jest.fn(),
52+
delete: jest.fn(),
53+
getTotalUnread: jest.fn(),
54+
}));
55+
56+
export const mockRecommendationScanner = jest.fn(() => ({
57+
determineRecommendation: jest.fn(),
58+
}));
59+
60+
export const mockDatabaseRecommendationAnalytics = jest.fn(() => ({
61+
sendCreatedRecommendationEvent: jest.fn(),
62+
}));

redisinsight/api/src/__mocks__/databases.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { mockSentinelMasterDto } from 'src/__mocks__/redis-sentinel';
88
import { pick } from 'lodash';
99
import { RedisDatabaseInfoResponse } from 'src/modules/database/dto/redis-info.dto';
1010
import { DatabaseOverview } from 'src/modules/database/models/database-overview';
11-
import { ClientContext, ClientMetadata } from 'src/common/models';
1211
import {
1312
mockSshOptionsBasic,
1413
mockSshOptionsBasicEntity,
@@ -207,12 +206,6 @@ export const mockNewDatabase = Object.assign(new Database(), {
207206
new: true,
208207
});
209208

210-
export const mockClientMetadata: ClientMetadata = {
211-
sessionMetadata: undefined,
212-
databaseId: mockDatabase.id,
213-
context: ClientContext.Common,
214-
};
215-
216209
export const mockDatabaseOverview: DatabaseOverview = {
217210
version: '6.2.4',
218211
usedMemory: 1,

redisinsight/api/src/__mocks__/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export * from './ai';
22
export * from './certificates';
33
export * from './commands';
44
export * from './common';
5+
export * from './constants';
56
export * from './encryption';
67
export * from './errors';
78
// export * from './redis-databases';
@@ -27,6 +28,7 @@ export * from './ssh';
2728
export * from './browser-history';
2829
export * from './database-recommendation';
2930
export * from './feature';
31+
export * from './notification';
3032
export * from './cloud-autodiscovery';
3133
export * from './cloud-capi-key';
3234
export * from './cloud-database';
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { NotificationEntity } from 'src/modules/notification/entities/notification.entity';
2+
import { NotificationType } from 'src/modules/notification/constants';
3+
import { Notification } from 'src/modules/notification/models/notification';
4+
import { NotificationsDto } from 'src/modules/notification/dto';
5+
6+
export const mockGlobalNotificationsJson = {
7+
notifications: [
8+
{
9+
title: 'RedisGraph End of Life',
10+
body: 'Redis Inc. has announced the end-of-life of <b>RedisGraph</b>. '
11+
+ 'We will carry out the process gradually, and in accordance with our commitment to our customers. '
12+
+ '<p> If you are using RedisGraph - please read the '
13+
+ '<a href="https://redis.com/blog/redisgraph-eol" target="_blank">following</a> carefully.',
14+
category: 'important',
15+
categoryColor: '#800D0D',
16+
timestamp: 1688549037,
17+
},
18+
{
19+
title: 'Missing a feature or found a bug?',
20+
body: 'Would you like to see specific features added or have a bug to report? '
21+
+ '<p>'
22+
+ ' <a href="https://github.com/RedisInsight/RedisInsight/issues" target="_blank">Share</a> '
23+
+ 'it with us! <p> '
24+
+ 'And <b>star</b> the repository if you like RedisInsight!',
25+
category: 'feedback',
26+
categoryColor: '#330D80',
27+
timestamp: 1662381434,
28+
},
29+
],
30+
};
31+
32+
export const mockNotification1 = Object.assign(new Notification(), {
33+
...mockGlobalNotificationsJson.notifications[0],
34+
type: NotificationType.Global,
35+
read: true,
36+
});
37+
38+
export const mockNotification1Entity = Object.assign(new NotificationEntity(), mockNotification1);
39+
40+
export const mockNotification1UPD = Object.assign(new Notification(), {
41+
...mockNotification1,
42+
title: 'UPD RedisGraph End of Life',
43+
});
44+
45+
export const mockNotification1UPDEntity = Object.assign(new NotificationEntity(), mockNotification1UPD);
46+
47+
export const mockNotification2 = Object.assign(new Notification(), {
48+
...mockGlobalNotificationsJson.notifications[1],
49+
type: NotificationType.Global,
50+
read: false,
51+
});
52+
export const mockNotification2Entity = Object.assign(new NotificationEntity(), mockNotification2);
53+
54+
export const mockNotificationsDto = Object.assign(new NotificationsDto(), {
55+
notifications: [mockNotification1, mockNotification2],
56+
totalUnread: 1,
57+
});
58+
59+
export const mockNotificationRepository = jest.fn(() => ({
60+
getNotifications: jest.fn().mockResolvedValue([mockNotification1Entity, mockNotification2Entity]),
61+
getTotalUnread: jest.fn().mockResolvedValue(mockNotificationsDto.totalUnread),
62+
readNotifications: jest.fn().mockResolvedValue([]),
63+
insertNotifications: jest.fn(),
64+
getGlobalNotifications: jest.fn(),
65+
deleteGlobalNotifications: jest.fn(),
66+
}));

redisinsight/api/src/__mocks__/redis-client.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { ClientMetadata } from 'src/common/models';
22
import { RedisClient, RedisClientConnectionType } from 'src/modules/redis/client';
33
import { RedisClientLib } from 'src/modules/redis/redis.client.factory';
44
import { mockCommonClientMetadata } from 'src/__mocks__/common';
5+
import { BadRequestException } from '@nestjs/common';
6+
import ERROR_MESSAGES from 'src/constants/error-messages';
57

68
export interface IRedisClientInstance {
79
id: string,
@@ -10,6 +12,9 @@ export interface IRedisClientInstance {
1012
lastTimeUsed: number;
1113
}
1214

15+
export const mockInvalidClientMetadataError = new BadRequestException(ERROR_MESSAGES.INVALID_CLIENT_METADATA);
16+
export const mockInvalidSessionMetadataError = new BadRequestException(ERROR_MESSAGES.INVALID_SESSION_METADATA);
17+
1318
// todo: NEW. remove everything above
1419
export class MockRedisClient extends RedisClient {
1520
constructor(clientMetadata: ClientMetadata, client: any = jest.fn(), options = {}) {

redisinsight/api/src/app.module.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { ExcludeRouteMiddleware } from './middleware/exclude-route.middleware';
3636
import SubpathProxyMiddleware from './middleware/subpath-proxy.middleware';
3737
import XFrameOptionsMiddleware from './middleware/x-frame-options.middleware';
3838
import { routes } from './app.routes';
39+
import { RedisConnectionMiddleware, redisConnectionControllers } from './middleware/redis-connection';
3940

4041
const SERVER_CONFIG = config.get('server') as Config['server'];
4142
const PATH_CONFIG = config.get('dir_path') as Config['dir_path'];
@@ -53,15 +54,15 @@ const setXFrameOptionsHeader = (res: Response) => {
5354
RedisEnterpriseModule,
5455
CloudModule.register(),
5556
RedisSentinelModule,
56-
BrowserModule,
57+
BrowserModule.register(),
5758
CliModule,
5859
WorkbenchModule.register(),
5960
PluginModule,
6061
CommandsModule,
6162
ProfilerModule,
6263
PubSubModule,
6364
SlowLogModule,
64-
NotificationModule,
65+
NotificationModule.register(),
6566
BulkActionsModule,
6667
ClusterMonitorModule,
6768
CustomTutorialModule.register(),
@@ -102,7 +103,7 @@ const setXFrameOptionsHeader = (res: Response) => {
102103
setHeaders: setXFrameOptionsHeader,
103104
},
104105
}),
105-
StaticsManagementModule,
106+
StaticsManagementModule.register(),
106107
],
107108
controllers: [],
108109
providers: [],
@@ -137,5 +138,9 @@ export class AppModule implements OnModuleInit, NestModule {
137138
.forRoutes(
138139
...SERVER_CONFIG.excludeRoutes,
139140
);
141+
142+
consumer
143+
.apply(RedisConnectionMiddleware)
144+
.forRoutes(...redisConnectionControllers);
140145
}
141146
}

0 commit comments

Comments
 (0)