80 lines
2.6 KiB
TypeScript
80 lines
2.6 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
listSyncTokens,
|
|
getSyncTokenById,
|
|
getSyncTokenByHash,
|
|
createSyncTokenRecord,
|
|
revokeSyncToken,
|
|
touchSyncTokenLastUsed,
|
|
} from "../../src/lib/db/syncTokens.ts";
|
|
|
|
describe("syncTokens", () => {
|
|
const hash = `test-hash-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
|
|
it("createSyncTokenRecord creates a token", async () => {
|
|
const record = await createSyncTokenRecord({
|
|
name: "test-token",
|
|
tokenHash: hash,
|
|
});
|
|
assert.ok(record.id, "should have id");
|
|
assert.equal(record.name, "test-token");
|
|
assert.equal(record.tokenHash, hash);
|
|
assert.equal(record.revokedAt, null);
|
|
});
|
|
|
|
it("getSyncTokenById retrieves created token", async () => {
|
|
const created = await createSyncTokenRecord({
|
|
name: "by-id",
|
|
tokenHash: `byid-${Date.now()}`,
|
|
});
|
|
const found = await getSyncTokenById(created.id);
|
|
assert.ok(found, "should find token");
|
|
assert.equal(found!.name, "by-id");
|
|
});
|
|
|
|
it("getSyncTokenByHash retrieves by hash", async () => {
|
|
const found = await getSyncTokenByHash(hash);
|
|
assert.ok(found, "should find by hash");
|
|
assert.equal(found!.tokenHash, hash);
|
|
});
|
|
|
|
it("listSyncTokens returns tokens", async () => {
|
|
const list = await listSyncTokens();
|
|
assert.ok(Array.isArray(list), "should return array");
|
|
assert.ok(list.length >= 1, "should have at least 1 token");
|
|
});
|
|
|
|
it("revokeSyncToken sets revokedAt", async () => {
|
|
const created = await createSyncTokenRecord({
|
|
name: "to-revoke",
|
|
tokenHash: `revoke-${Date.now()}`,
|
|
});
|
|
const revoked = await revokeSyncToken(created.id);
|
|
assert.ok(revoked, "should return revoked token");
|
|
assert.ok(revoked!.revokedAt, "should have revokedAt set");
|
|
});
|
|
|
|
it("revokeSyncToken returns null for unknown id", async () => {
|
|
const result = await revokeSyncToken("nonexistent-id");
|
|
assert.equal(result, null);
|
|
});
|
|
|
|
it("touchSyncTokenLastUsed updates lastUsedAt", async () => {
|
|
const created = await createSyncTokenRecord({
|
|
name: "to-touch",
|
|
tokenHash: `touch-${Date.now()}`,
|
|
});
|
|
const touched = await touchSyncTokenLastUsed(created.id);
|
|
assert.equal(touched, true, "should return true on success");
|
|
const found = await getSyncTokenById(created.id);
|
|
assert.ok(found!.lastUsedAt, "should have lastUsedAt set");
|
|
});
|
|
|
|
it("touchSyncTokenLastUsed returns false for unknown id", async () => {
|
|
const result = await touchSyncTokenLastUsed("nonexistent");
|
|
assert.equal(result, false);
|
|
});
|
|
});
|