Skip to content

Commit

Permalink
Unit Tests: covered handlers
Browse files Browse the repository at this point in the history
  • Loading branch information
vzakharchenko committed Jul 6, 2021
1 parent 79e2d90 commit fb1eb3e
Show file tree
Hide file tree
Showing 6 changed files with 803 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/handlers/PageHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export type BehaviorContext = {
/**
* current session token
*/
sessionToken: SessionToken|null,
sessionToken?: SessionToken|null,

/**
* Options
Expand Down
4 changes: 4 additions & 0 deletions src/handlers/SingleTenantUrlPageHandler.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@ describe('SingleTenantUrlPageHandler tests', () => {
test('test SingleTenantUrlPageHandler order', async () => {
const singleTenantUrlPageHandler = new SingleTenantUrlPageHandler("/test", 5);
expect(singleTenantUrlPageHandler.order()).toEqual(5);
});

test('test SingleTenantUrlPageHandler order 2', async () => {
const singleTenantUrlPageHandler = new SingleTenantUrlPageHandler("/test");
expect(singleTenantUrlPageHandler.order()).toEqual(110);
});

test('test SingleTenantUrlPageHandler url', async () => {
Expand Down
2 changes: 1 addition & 1 deletion src/handlers/SingleTenantUrlPageHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export class SingleTenantUrlPageHandler implements PageHandler {
readonly url: string;
readonly orderValue: number | undefined;

constructor(url: string, orderValue: number | undefined) {
constructor(url: string, orderValue?: number | undefined) {
this.url = url;
this.orderValue = orderValue;
}
Expand Down
217 changes: 217 additions & 0 deletions src/handlers/TenantExternalPage.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
/* eslint-disable no-empty-function, @typescript-eslint/no-empty-function, @typescript-eslint/ban-ts-comment
*/

import 'jest';

import {RequestObject, ResponseObject} from "../index";
import {initOptions} from "../utils/DefaultPageHandlers";
import {APIGateWayOptions} from "../apigateway/ApiGateway";

import {BehaviorContext, CustomPageHandlerContext} from "./PageHandler";
import {TenantExternalPage, TenantExternalPageContext} from "./TenantExternalPage";
import {getActiveToken} from "./TokenPageHandler";

jest.mock('./TokenPageHandler');


const request: RequestObject = {
baseUrl: '/',
originalUrl: '/',
cookies: {},
query: {},
headers: {},
secure: false,
};
const response: ResponseObject = {
cookie: (name: string, value: string, options?: any) => {

},
json: (object: any) => {

},
redirect: (code: number, url: string) => {

},
};

const defOptions: APIGateWayOptions = {
storageType: 'test',
multiTenantAdapterOptions: {},
multiTenantJson: () => "test",
keys: {
privateKey: {
key: 'pk',
},
publicKey: {
key: 'pub',
},
},
};
let handlerOptions = initOptions(defOptions);

let tenantExternalPageContext:TenantExternalPageContext = {
redirectedUrl: '/',
};

const behaviorContext: BehaviorContext = {
sessionToken: {
jti: 'jti',
email: 'email',
exp: 1,
multiFlag: false,
// eslint-disable-next-line babel/camelcase
session_state: 'session_state',
sessionState: 'sessionState',
tenant: 'tenant',
token: 'token',

},
options: handlerOptions,
};


const customPageHandlerContext: CustomPageHandlerContext = {
options: handlerOptions,
};

describe('TenantExternalPage tests', () => {
beforeEach(async () => {
// @ts-ignore
handlerOptions = initOptions(defOptions);
customPageHandlerContext.options = handlerOptions;
tenantExternalPageContext = {
redirectedUrl: '/',
};
// @ts-ignore
getActiveToken.mockImplementation(() => 'token');
});

test('test TenantExternalPage order', async () => {
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext, 5);
expect(tenantExternalPage.order()).toEqual(5);
});

test('test TenantExternalPage order default', async () => {
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
expect(tenantExternalPage.order()).toEqual(0);
});

test('test TenantExternalPage url', async () => {
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
expect(tenantExternalPage.getUrl()).toEqual("/test");

});

test('test TenantExternalPage behavior multi-tenant', async () => {
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
expect(await tenantExternalPage.behavior(request, behaviorContext)).toEqual('multi-tenant');
});

test('test TenantExternalPage behavior multi-tenant override', async () => {

// @ts-ignore
delete behaviorContext.sessionToken;
tenantExternalPageContext.sessionAccessLevel = 'multi-tenant';
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
expect(await tenantExternalPage.behavior(request, behaviorContext)).toEqual('multi-tenant');
});

test('test TenantExternalPage behavior public', async () => {
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
// @ts-ignore
delete behaviorContext.sessionToken;
expect(await tenantExternalPage.behavior(request, behaviorContext)).toEqual('public');
});

test('test TenantExternalPage behavior public override', async () => {
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
// @ts-ignore
delete behaviorContext.sessionToken;

tenantExternalPageContext.defaultAccessLevel = 'public';
expect(await tenantExternalPage.behavior(request, behaviorContext)).toEqual('public');
});

test('test TenantExternalPage execute redirect ', async () => {
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
let next = false;
await tenantExternalPage.execute(request, {
cookie: (name: string, value: string, options?: any) => {

},
json: (object: any) => {

},
redirect: (code: number, url: string) => {
expect(url).toEqual('/?redirectUri=http://undefined');
},
}, () => {
next = true;
}, customPageHandlerContext);

if (next) {
throw new Error('Next invoked');
}

});

test('test TenantExternalPage execute always redirect ', async () => {
// @ts-ignore
customPageHandlerContext.sessionToken = {};
tenantExternalPageContext.alwaysRedirect = true;
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
let next = false;
await tenantExternalPage.execute(request, {
cookie: (name: string, value: string, options?: any) => {

},
json: (object: any) => {

},
redirect: (code: number, url: string) => {
expect(url).toEqual('/?redirectUri=http://undefined');
},
}, () => {
next = true;
}, customPageHandlerContext);

if (next) {
throw new Error('Next invoked');
}

});
test('test TenantExternalPage execute skip ', async () => {
// @ts-ignore
customPageHandlerContext.sessionToken = {};
// @ts-ignore
getActiveToken.mockImplementation(() => null);
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
let next = false;
await tenantExternalPage.execute(request, response, () => {
next = true;
}, customPageHandlerContext);

if (next) {
throw new Error('Next invoked');
}

});


test('test TenantExternalPage execute token success ', async () => {
// @ts-ignore
customPageHandlerContext.sessionToken = {};
const tenantExternalPage = new TenantExternalPage("/test", tenantExternalPageContext);
let next = false;
await tenantExternalPage.execute(request, response, () => {
next = true;
}, customPageHandlerContext);

if (!next) {
throw new Error('Next does not invoked');
}

});


});
Loading

0 comments on commit fb1eb3e

Please sign in to comment.