@lifeworld/adapter-test
Version:
Testing module for Lucia database adapters
77 lines (76 loc) • 3.33 kB
JavaScript
import { generateId } from "lucia";
import assert from "node:assert/strict";
export const databaseUser = {
id: generateId(15),
attributes: {
username: generateId(15)
}
};
export async function testAdapter(adapter) {
console.log(`\n\x1B[38;5;63;1m[start] \x1B[0mRunning adapter tests\x1B[0m\n`);
const databaseSession = {
userId: databaseUser.id,
id: generateId(40),
// get random date with 0ms
expiresAt: new Date(Math.floor(Date.now() / 1000) * 1000 + 10_000),
attributes: {
country: "us"
}
};
await test("getSessionAndUser() returns [null, null] on invalid session id", async () => {
const result = await adapter.getSessionAndUser(databaseSession.id);
assert.deepStrictEqual(result, [null, null]);
});
await test("getUserSessions() returns empty array on invalid user id", async () => {
const result = await adapter.getUserSessions(databaseUser.id);
assert.deepStrictEqual(result, []);
});
await test("setSession() creates session and getSessionAndUser() returns created session and associated user", async () => {
await adapter.setSession(databaseSession);
const result = await adapter.getSessionAndUser(databaseSession.id);
assert.deepStrictEqual(result, [databaseSession, databaseUser]);
});
await test("deleteSession() deletes session", async () => {
await adapter.deleteSession(databaseSession.id);
const result = await adapter.getUserSessions(databaseSession.userId);
assert.deepStrictEqual(result, []);
});
await test("updateSessionExpiration() updates session", async () => {
await adapter.setSession(databaseSession);
databaseSession.expiresAt = new Date(databaseSession.expiresAt.getTime() + 10_000);
await adapter.updateSessionExpiration(databaseSession.id, databaseSession.expiresAt);
const result = await adapter.getSessionAndUser(databaseSession.id);
assert.deepStrictEqual(result, [databaseSession, databaseUser]);
});
await test("deleteExpiredSessions() deletes all expired sessions", async () => {
const expiredSession = {
userId: databaseUser.id,
id: generateId(40),
expiresAt: new Date(Math.floor(Date.now() / 1000) * 1000 - 10_000),
attributes: {
country: "us"
}
};
await adapter.setSession(expiredSession);
await adapter.deleteExpiredSessions();
const result = await adapter.getUserSessions(databaseSession.userId);
assert.deepStrictEqual(result, [databaseSession]);
});
await test("deleteUserSessions() deletes all user sessions", async () => {
await adapter.deleteUserSessions(databaseSession.userId);
const result = await adapter.getUserSessions(databaseSession.userId);
assert.deepStrictEqual(result, []);
});
console.log(`\n\x1B[32;1m[success] \x1B[0mAdapter passed all tests\n`);
}
async function test(name, runTest) {
console.log(`\x1B[38;5;63;1m► \x1B[0m${name}\x1B[0m`);
try {
await runTest();
console.log(" \x1B[32m✓ Passed\x1B[0m\n");
}
catch (error) {
console.log(" \x1B[31m✓ Failed\x1B[0m\n");
throw error;
}
}