import { describe, expect, it } from 'vitest'; import { InMemoryGatewaySessionService } from '../src/auth/inMemorySessionService.js'; import { createInMemoryUserRepository } from '../src/auth/inMemoryUserRepository.js'; import { createGatewayApiContext } from '../src/context.js'; import { appRouter } from '../src/router.js'; const buildCaller = () => { const users = createInMemoryUserRepository(); const sessions = new InMemoryGatewaySessionService({ sessionTtlSeconds: 3600, gameSessionTtlSeconds: 600, }); const flushPublisher = { publishUserFlush: async () => {}, }; return appRouter.createCaller( createGatewayApiContext({ users, sessions, flushPublisher, gameTokenSecret: 'test-secret', gameSessionTtlSeconds: 600, }) ); }; describe('gateway auth flow', () => { it('registers and issues a game session', async () => { const caller = buildCaller(); const register = await caller.auth.register({ username: 'tester', password: 'secretpass', displayName: 'Tester', }); expect(register.user.username).toBe('tester'); expect(register.sessionToken).toBeTruthy(); const issued = await caller.auth.issueGameSession({ sessionToken: register.sessionToken, profile: 'che:default', }); expect(issued.profile).toBe('che:default'); expect(issued.gameToken).toBeTruthy(); const validated = await caller.auth.validateGameSession({ profile: 'che:default', gameToken: issued.gameToken, }); expect(validated?.user.username).toBe('tester'); }); });