Files
automatisch/packages/backend/src/models/access-token.test.js
2024-10-01 10:37:43 +00:00

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();
});
});
});