39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { READY_STATE } from "@tensamin/ttp-core";
|
|
import { TAuthClient, generateKeyPair, getFriendlyReadyState } from "../src/index";
|
|
|
|
describe("index helpers", () => {
|
|
test("generateKeyPair returns base64 keys with expected length", () => {
|
|
const pair = generateKeyPair();
|
|
const priv = Buffer.from(pair.private, "base64");
|
|
const pub = Buffer.from(pair.public, "base64");
|
|
|
|
expect(priv.length).toBe(56);
|
|
expect(pub.length).toBe(56);
|
|
});
|
|
|
|
test("getFriendlyReadyState maps numeric state to key", () => {
|
|
for (const [name, value] of Object.entries(READY_STATE)) {
|
|
expect(getFriendlyReadyState(value)).toBe(name);
|
|
}
|
|
});
|
|
|
|
test("generateLink builds auth URL with and without challenge", () => {
|
|
const client = Object.create(TAuthClient.prototype) as TAuthClient;
|
|
client.frontendUrl = "https://tauth.example.com/login";
|
|
client.identifier = "my-app";
|
|
client.redirectUrl = new URL("https://app.example.com/callback");
|
|
|
|
const withoutChallenge = client.generateLink();
|
|
const withChallenge = client.generateLink("abcdef");
|
|
|
|
const parsedWithout = new URL(withoutChallenge);
|
|
const parsedWith = new URL(withChallenge);
|
|
|
|
expect(parsedWithout.searchParams.get("identifier")).toBe("my-app");
|
|
expect(parsedWithout.searchParams.get("redirect")).toBe(
|
|
"https://app.example.com/callback",
|
|
);
|
|
expect(parsedWith.searchParams.get("challenge")).toBe("abcdef");
|
|
});
|
|
});
|