85 lines
2.8 KiB
JavaScript
85 lines
2.8 KiB
JavaScript
import { describe, it, expect, vi } from 'vitest';
|
|
import AccessToken from './access-token.js';
|
|
import User from './user.js';
|
|
import Base from './base.js';
|
|
import SamlAuthProvider from './saml-auth-provider.ee.js';
|
|
import { createAccessToken } from '../../test/factories/access-token.js';
|
|
import { createUser } from '../../test/factories/user.js';
|
|
import { createIdentity } from '../../test/factories/identity.js';
|
|
|
|
describe('AccessToken model', () => {
|
|
it('tableName should return correct name', () => {
|
|
expect(AccessToken.tableName).toBe('access_tokens');
|
|
});
|
|
|
|
it('jsonSchema should have correct validations', () => {
|
|
expect(AccessToken.jsonSchema).toMatchSnapshot();
|
|
});
|
|
|
|
it('relationMappings should return correct associations', () => {
|
|
const relationMappings = AccessToken.relationMappings();
|
|
|
|
const expectedRelations = {
|
|
user: {
|
|
relation: Base.BelongsToOneRelation,
|
|
modelClass: User,
|
|
join: {
|
|
from: 'access_tokens.user_id',
|
|
to: 'users.id',
|
|
},
|
|
},
|
|
};
|
|
|
|
expect(relationMappings).toStrictEqual(expectedRelations);
|
|
});
|
|
|
|
it('revoke should set revokedAt and terminate remote SAML session', async () => {
|
|
const accessToken = await createAccessToken();
|
|
|
|
const terminateRemoteSamlSessionSpy = vi
|
|
.spyOn(accessToken, 'terminateRemoteSamlSession')
|
|
.mockImplementation(() => {});
|
|
|
|
await accessToken.revoke();
|
|
|
|
expect(terminateRemoteSamlSessionSpy).toHaveBeenCalledOnce();
|
|
expect(accessToken.revokedAt).not.toBeUndefined();
|
|
});
|
|
|
|
describe('terminateRemoteSamlSession', () => {
|
|
it('should terminate remote SAML session when exists', async () => {
|
|
const user = await createUser();
|
|
const accessToken = await createAccessToken({
|
|
userId: user.id,
|
|
samlSessionId: 'random-remote-session-id',
|
|
});
|
|
await createIdentity({ userId: user.id });
|
|
|
|
const terminateRemoteSamlSessionSpy = vi
|
|
.spyOn(SamlAuthProvider.prototype, 'terminateRemoteSession')
|
|
.mockImplementation(() => {});
|
|
|
|
await accessToken.terminateRemoteSamlSession();
|
|
|
|
expect(terminateRemoteSamlSessionSpy).toHaveBeenCalledWith(
|
|
accessToken.samlSessionId
|
|
);
|
|
});
|
|
|
|
it(`should return undefined when remote SALM session doesn't exist`, async () => {
|
|
const user = await createUser();
|
|
const accessToken = await createAccessToken({ userId: user.id });
|
|
await createIdentity({ userId: user.id });
|
|
|
|
const terminateRemoteSamlSessionSpy = vi
|
|
.spyOn(SamlAuthProvider.prototype, 'terminateRemoteSession')
|
|
.mockImplementation(() => {});
|
|
|
|
const expected = await accessToken.terminateRemoteSamlSession();
|
|
|
|
expect(terminateRemoteSamlSessionSpy).not.toHaveBeenCalledOnce();
|
|
expect(expected).toBeUndefined();
|
|
});
|
|
});
|
|
});
|