mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
107 lines
3.7 KiB
TypeScript
107 lines
3.7 KiB
TypeScript
import { v4 as uuid } from 'uuid';
|
|
import { ExpiringAccessTokens } from '../src/access_tokens';
|
|
import dayjs from 'dayjs';
|
|
|
|
describe("ExpiringAccessTokens", () => {
|
|
let now = dayjs();
|
|
|
|
const accessTokens = new ExpiringAccessTokens({ now: () => now })
|
|
|
|
describe("tokens", () => {
|
|
it("they should be unique", () => {
|
|
const authToken = uuid();
|
|
expect(accessTokens.mint(authToken)).not.toEqual(accessTokens.mint(authToken));
|
|
});
|
|
});
|
|
|
|
describe("tokens that dont exist", () => {
|
|
it("should return undefined", () => {
|
|
expect(accessTokens.authTokenFor("doesnt exist")).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("tokens that have not expired", () => {
|
|
it("should be able to return them", () => {
|
|
const authToken = uuid();
|
|
|
|
const accessToken = accessTokens.mint(authToken);
|
|
|
|
expect(accessTokens.authTokenFor(accessToken)).toEqual(authToken);
|
|
});
|
|
|
|
it("should be able to have many per authToken", () => {
|
|
const authToken = uuid();
|
|
|
|
const accessToken1 = accessTokens.mint(authToken);
|
|
const accessToken2 = accessTokens.mint(authToken);
|
|
|
|
|
|
expect(accessTokens.authTokenFor(accessToken1)).toEqual(authToken);
|
|
expect(accessTokens.authTokenFor(accessToken2)).toEqual(authToken);
|
|
});
|
|
});
|
|
|
|
describe('tokens that have expired', () => {
|
|
describe("retrieving it", () => {
|
|
it("should return undefined", () => {
|
|
const authToken = uuid();
|
|
|
|
now = dayjs();
|
|
const accessToken = accessTokens.mint(authToken);
|
|
|
|
now = now.add(12, 'hours').add(1, 'second');
|
|
|
|
expect(accessTokens.authTokenFor(accessToken)).toBeUndefined()
|
|
});
|
|
});
|
|
|
|
describe("should be cleared out", () => {
|
|
const authToken1 = uuid();
|
|
const authToken2 = uuid();
|
|
|
|
now = dayjs();
|
|
|
|
const accessToken1_1 = accessTokens.mint(authToken1);
|
|
const accessToken2_1 = accessTokens.mint(authToken2);
|
|
|
|
expect(accessTokens.count()).toEqual(2);
|
|
expect(accessTokens.authTokenFor(accessToken1_1)).toEqual(authToken1);
|
|
expect(accessTokens.authTokenFor(accessToken2_1)).toEqual(authToken2);
|
|
|
|
now = now.add(12, 'hours').add(1, 'second');
|
|
|
|
const accessToken1_2 = accessTokens.mint(authToken1);
|
|
|
|
expect(accessTokens.count()).toEqual(1);
|
|
expect(accessTokens.authTokenFor(accessToken1_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken2_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken1_2)).toEqual(authToken1);
|
|
|
|
now = now.add(6, 'hours');
|
|
|
|
const accessToken2_2 = accessTokens.mint(authToken2);
|
|
|
|
expect(accessTokens.count()).toEqual(2);
|
|
expect(accessTokens.authTokenFor(accessToken1_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken2_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken1_2)).toEqual(authToken1);
|
|
expect(accessTokens.authTokenFor(accessToken2_2)).toEqual(authToken2);
|
|
|
|
now = now.add(6, 'hours').add(1, 'minute');
|
|
|
|
expect(accessTokens.authTokenFor(accessToken1_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken2_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken1_2)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken2_2)).toEqual(authToken2);
|
|
expect(accessTokens.count()).toEqual(1);
|
|
|
|
now = now.add(6, 'hours').add(1, 'minute');
|
|
|
|
expect(accessTokens.authTokenFor(accessToken1_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken2_1)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken1_2)).toBeUndefined();
|
|
expect(accessTokens.authTokenFor(accessToken2_2)).toBeUndefined();
|
|
expect(accessTokens.count()).toEqual(0);
|
|
});
|
|
})
|
|
}) |