Files
2026-07-13 13:39:12 +08:00

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);
});
});