Skip to content

Commit ea6fdca

Browse files
committed
RI-6154 added tests
1 parent 3443f32 commit ea6fdca

18 files changed

+174
-21
lines changed

redisinsight/api/migration/1729024196797-cloud-session.ts renamed to redisinsight/api/migration/1729085495444-cloud-session.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { MigrationInterface, QueryRunner } from "typeorm";
22

3-
export class CloudSession1729024196797 implements MigrationInterface {
4-
name = 'CloudSession1729024196797'
3+
export class CloudSession1729085495444 implements MigrationInterface {
4+
name = 'CloudSession1729085495444'
55

66
public async up(queryRunner: QueryRunner): Promise<void> {
7-
await queryRunner.query(`CREATE TABLE "cloud_session" ("id" integer PRIMARY KEY NOT NULL, "data" varchar, "encryption" varchar)`);
7+
await queryRunner.query(`CREATE TABLE "cloud_session" ("id" varchar PRIMARY KEY NOT NULL, "data" varchar, "encryption" varchar)`);
88
}
99

1010
public async down(queryRunner: QueryRunner): Promise<void> {

redisinsight/api/migration/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import { AiHistory1713515657364 } from './1713515657364-ai-history';
4242
import { AiHistorySteps1714501203616 } from './1714501203616-ai-history-steps';
4343
import { Rdi1716370509836 } from './1716370509836-rdi';
4444
import { AiHistory1718260230164 } from './1718260230164-ai-history';
45-
import { CloudSession1729024196797 } from './1729024196797-cloud-session';
45+
import { CloudSession1729085495444 } from './1729085495444-cloud-session';
4646

4747
export default [
4848
initialMigration1614164490968,
@@ -89,5 +89,5 @@ export default [
8989
AiHistorySteps1714501203616,
9090
Rdi1716370509836,
9191
AiHistory1718260230164,
92-
CloudSession1729024196797,
92+
CloudSession1729085495444,
9393
];

redisinsight/api/src/__mocks__/cloud-session.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { ICloudApiCredentials } from 'src/modules/cloud/common/models';
22
import { CloudAuthIdpType } from 'src/modules/cloud/auth/models';
33
import { ICloudApiCsrfToken } from 'src/modules/cloud/user/models';
4+
import { CloudSessionData } from 'src/modules/cloud/session/models/cloud-session';
5+
import { CloudSessionEntity } from 'src/modules/cloud/session/entities/cloud.session.entity';
6+
import { EncryptionStrategy } from 'src/modules/encryption/models';
47

58
export const mockCloudApiCsrfToken: ICloudApiCsrfToken = {
69
csrf_token: 'csrf_p6vA6A5tF36Jf6twH2cBOqtt7n',
@@ -14,6 +17,17 @@ export const mockCloudApiAuthDto: ICloudApiCredentials = {
1417
apiSessionId: 'asid_p6v-A6A5tF36J-f6twH2cB!@#$_^&*()Oqtt7n',
1518
};
1619

20+
export const mockCloudSessionData = Object.assign(new CloudSessionData(), {
21+
id: '1',
22+
data: { idpType: CloudAuthIdpType.Google },
23+
});
24+
25+
export const mockCloudSessionEntity = Object.assign(new CloudSessionEntity(), {
26+
...mockCloudSessionData,
27+
data: 'encryptedCloudSessionData',
28+
encryption: EncryptionStrategy.KEYTAR,
29+
});
30+
1731
export const mockCloudSession = {
1832
...mockCloudApiAuthDto,
1933
user: {
@@ -32,6 +46,11 @@ export const mockCloudSession = {
3246
},
3347
};
3448

49+
export const mockCloudSessionRepository = jest.fn(() => ({
50+
get: jest.fn().mockResolvedValue(null),
51+
save: jest.fn(),
52+
}));
53+
3554
export const mockCloudSessionService = jest.fn(() => ({
3655
getSession: jest.fn().mockResolvedValue(mockCloudSession),
3756
updateSessionData: jest.fn().mockResolvedValue(mockCloudSession),

redisinsight/api/src/modules/cloud/auth/auth-strategy/sso-idp.cloud.auth-strategy.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { OktaAuth } from '@okta/okta-auth-js';
77
import { SsoIdpCloudAuthStrategy } from 'src/modules/cloud/auth/auth-strategy/sso-idp.cloud.auth-strategy';
88
import { CloudAuthIdpType } from 'src/modules/cloud/auth/models';
99
import {
10-
CloudOauthSsoUnsupportedEmailException
10+
CloudOauthSsoUnsupportedEmailException,
1111
} from 'src/modules/cloud/auth/exceptions/cloud-oauth.sso-unsupported-email.exception';
1212

1313
jest.mock('@okta/okta-auth-js');

redisinsight/api/src/modules/cloud/auth/cloud-auth.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { CloudAuthController } from 'src/modules/cloud/auth/cloud-auth.controlle
88
import { CloudAuthAnalytics } from 'src/modules/cloud/auth/cloud-auth.analytics';
99

1010
@Module({
11-
imports: [CloudSessionModule.register()],
11+
imports: [CloudSessionModule],
1212
providers: [
1313
GoogleIdpCloudAuthStrategy,
1414
GithubIdpCloudAuthStrategy,

redisinsight/api/src/modules/cloud/auth/cloud-auth.service.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ describe('CloudAuthService', () => {
345345
{
346346
accessToken: mockCloudAccessTokenNew,
347347
refreshToken: mockCloudRefreshTokenNew,
348+
idpType: mockCloudApiAuthDto.idpType,
348349
csrf: null,
349350
apiSessionId: null,
350351
},

redisinsight/api/src/modules/cloud/capi-key/cloud-capi-key.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { CloudCapiKeyAnalytics } from 'src/modules/cloud/capi-key/cloud-capi-key
1111
@Module({
1212
imports: [
1313
CloudUserModule,
14-
CloudSessionModule.register(),
14+
CloudSessionModule,
1515
],
1616
controllers: [CloudCapiKeyController],
1717
providers: [

redisinsight/api/src/modules/cloud/cloud.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import { CloudUserModule } from 'src/modules/cloud/user/cloud-user.module';
55
import { CloudTaskModule } from 'src/modules/cloud/task/cloud-task.module';
66
import { CloudJobModule } from 'src/modules/cloud/job/cloud-job.module';
77
import { CloudCapiKeyModule } from 'src/modules/cloud/capi-key/cloud-capi-key.module';
8+
import { CloudSessionModule } from './session/cloud-session.module';
89

910
@Module({})
1011
export class CloudModule {
1112
static register() {
1213
return {
1314
module: CloudModule,
1415
imports: [
16+
CloudSessionModule.register(),
1517
CloudAuthModule,
1618
CloudUserModule,
1719
CloudAutodiscoveryModule,

redisinsight/api/src/modules/cloud/session/cloud-session.module.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Module, Type } from '@nestjs/common';
1+
import { Global, Type } from '@nestjs/common';
22
import { CloudSessionService } from 'src/modules/cloud/session/cloud-session.service';
33
import { CloudSessionRepository } from './repositories/cloud.session.repository';
44
import { LocalCloudSessionRepository } from './repositories/local.cloud.session.repository';
55

6-
@Module({})
6+
@Global()
77
export class CloudSessionModule {
88
static register(
99
cloudSessionRepository: Type<CloudSessionRepository> = LocalCloudSessionRepository,

redisinsight/api/src/modules/cloud/session/cloud-session.service.spec.ts

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import {
44
} from 'src/__mocks__';
55
import { SessionService } from 'src/modules/session/session.service';
66
import { CloudSessionService } from 'src/modules/cloud/session/cloud-session.service';
7-
import { mockCloudSession } from 'src/__mocks__/cloud-session';
7+
import { mockCloudSession, mockCloudSessionRepository } from 'src/__mocks__/cloud-session';
8+
import { CloudSessionRepository } from './repositories/cloud.session.repository';
89

910
describe('CloudSessionService', () => {
1011
let service: CloudSessionService;
1112
let sessionService: MockType<SessionService>;
13+
let cloudSessionRepository: MockType<CloudSessionRepository>;
1214

1315
beforeEach(async () => {
1416
const module: TestingModule = await Test.createTestingModule({
@@ -18,11 +20,16 @@ describe('CloudSessionService', () => {
1820
provide: SessionService,
1921
useFactory: mockSessionService,
2022
},
23+
{
24+
provide: CloudSessionRepository,
25+
useFactory: mockCloudSessionRepository,
26+
},
2127
],
2228
}).compile();
2329

2430
service = module.get(CloudSessionService);
2531
sessionService = module.get(SessionService);
32+
cloudSessionRepository = module.get(CloudSessionRepository);
2633
});
2734

2835
describe('getSession', () => {
@@ -32,6 +39,18 @@ describe('CloudSessionService', () => {
3239
expect(result).toEqual(null);
3340
});
3441

42+
it('should take some additional data in repository if it is not in session', async () => {
43+
cloudSessionRepository.get.mockResolvedValueOnce({ id: 1, data: { idpType: 'test' } });
44+
const result = await service.getSession(mockInitSession.id);
45+
expect(result.idpType).toBe('test');
46+
});
47+
48+
it('should not fail if data in repository is null', async () => {
49+
cloudSessionRepository.get.mockResolvedValueOnce({ id: 1, data: null });
50+
const result = await service.getSession(mockInitSession.id);
51+
expect(result).toEqual(null);
52+
});
53+
3554
it('Should return cloud data only', async () => {
3655
sessionService.getSession.mockResolvedValueOnce({
3756
data: {
@@ -60,6 +79,14 @@ describe('CloudSessionService', () => {
6079
cloud: mockCloudSession,
6180
});
6281
});
82+
83+
it('Should update data in cloud sesssion repository when necessary fields included', async () => {
84+
sessionService.updateSessionData.mockResolvedValue({ data: { cloud: mockCloudSession } });
85+
await service.updateSessionData(mockInitSession.id, mockCloudSession);
86+
87+
expect(cloudSessionRepository.save).toHaveBeenCalled();
88+
});
89+
6390
it('Should merge and update cloud data', async () => {
6491
sessionService.getSession.mockResolvedValueOnce({
6592
data: {
@@ -93,9 +120,10 @@ describe('CloudSessionService', () => {
93120
});
94121

95122
describe('deleteSession', () => {
96-
it('should delete cloud session data by id', async () => {
123+
it('should delete cloud session data by id and clear cloud session repository data', async () => {
97124
await service.deleteSessionData(mockInitSession.id);
98125
expect(sessionService.updateSessionData).toHaveBeenCalledWith(mockInitSession.id, { cloud: null });
126+
expect(cloudSessionRepository.save).toHaveBeenCalledWith({ data: null });
99127
});
100128
});
101129

0 commit comments

Comments
 (0)