36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
import { mkdtemp, rm } from 'node:fs/promises';
|
|
import { tmpdir } from 'node:os';
|
|
import { join } from 'node:path';
|
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
import { TeaLoginStore } from './tea-login-store.js';
|
|
|
|
let root: string | undefined;
|
|
afterEach(async (): Promise<void> => {
|
|
if (root !== undefined) await rm(root, { recursive: true, force: true });
|
|
root = undefined;
|
|
});
|
|
|
|
describe('host-bound Tea login store', (): void => {
|
|
it('serializes concurrent updates and preserves the same identity on two hosts', async (): Promise<void> => {
|
|
root = await mkdtemp(join(tmpdir(), 'mosaic-tea-store-'));
|
|
const store = new TeaLoginStore(join(root, 'tea', 'config.yml'));
|
|
await Promise.all([
|
|
store.put('seat', 'git.one.invalid', new TextEncoder().encode('token-one')),
|
|
store.put('seat', 'git.two.invalid', new TextEncoder().encode('token-two')),
|
|
]);
|
|
|
|
expect(
|
|
store.matchesSecret('seat', 'git.one.invalid', new TextEncoder().encode('token-one')),
|
|
).toBe(true);
|
|
expect(
|
|
store.matchesSecret('seat', 'git.two.invalid', new TextEncoder().encode('token-two')),
|
|
).toBe(true);
|
|
await store.remove('seat', 'git.one.invalid');
|
|
expect(store.readBack('seat', 'git.one.invalid')).toBeUndefined();
|
|
expect(store.readBack('seat', 'git.two.invalid')).toEqual({
|
|
name: 'seat',
|
|
host: 'git.two.invalid',
|
|
});
|
|
});
|
|
});
|