mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 05:26:47 +00:00
be016f180e
The specs written alongside the session, transaction and lifecycle work still seeded and read with raw statements. They go through the ORM factories now; the few that test SQL below the ORM carry a test-sql-allow reason. The raw SQL baseline holds 177 statements in 6 files.
36 lines
1.6 KiB
TypeScript
36 lines
1.6 KiB
TypeScript
import type Database from 'better-sqlite3';
|
|
import { sharedTestOrm } from './test-uow';
|
|
import { findRows } from './factories/rows';
|
|
import { UserSessions } from '../../src/db/entities/UserSessions.entity';
|
|
import type { UserSessionsRepository } from '../../src/db/repositories/UserSessions.repository';
|
|
import { SessionsService } from '../../src/nest/sessions/sessions.service';
|
|
|
|
/**
|
|
* The `user_sessions` table behind `SessionsService`, bound to a suite's own
|
|
* better-sqlite3 handle through the memoised `sharedTestOrm`, so a session row
|
|
* written inside a hand-built service's `UnitOfWork` transaction lands on the
|
|
* same connection the suite reads back.
|
|
*/
|
|
export function createTestUserSessionsRepo(db: Database.Database): Promise<UserSessionsRepository> {
|
|
return sharedTestOrm(db).then((t) => t.repo(UserSessions));
|
|
}
|
|
|
|
/** A real `SessionsService` over that repository, for the hand-constructed `AuthService`/`AdminService`. */
|
|
export async function createTestSessionsService(db: Database.Database): Promise<SessionsService> {
|
|
return new SessionsService(await createTestUserSessionsRepo(db));
|
|
}
|
|
|
|
/** The session rows of a user, oldest first, read through the ORM on the suite's own handle. */
|
|
export async function sessionRows(
|
|
db: Database.Database,
|
|
userId: number,
|
|
): Promise<{ id: string; revoked_at: string | null; expires_at: string; user_agent: string | null }[]> {
|
|
const rows = await findRows(await sharedTestOrm(db), UserSessions, { user: userId }, { created_at: 'asc', id: 'asc' });
|
|
return rows.map(({ id, revoked_at, expires_at, user_agent }) => ({
|
|
id,
|
|
revoked_at: revoked_at ?? null,
|
|
expires_at,
|
|
user_agent: user_agent ?? null,
|
|
}));
|
|
}
|