42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { addSeconds, subMilliseconds } from "date-fns";
|
|
import { AppEnv } from "../models/genModels/genEnums";
|
|
import { createChatInstallState, verifyChatInstallState } from "./chatState";
|
|
|
|
describe("chat OAuth state", () => {
|
|
test("round-trips a signed install state", () => {
|
|
const state = createChatInstallState({
|
|
secret: "secret",
|
|
provider: "slack",
|
|
orgId: "org_123",
|
|
userId: "user_123",
|
|
env: AppEnv.Live,
|
|
expiresAt: addSeconds(Date.now(), 1).getTime(),
|
|
nonce: "nonce",
|
|
});
|
|
|
|
expect(verifyChatInstallState(state, "secret")).toMatchObject({
|
|
provider: "slack",
|
|
orgId: "org_123",
|
|
userId: "user_123",
|
|
env: AppEnv.Live,
|
|
});
|
|
});
|
|
|
|
test("rejects invalid or expired state", () => {
|
|
const expired = createChatInstallState({
|
|
secret: "secret",
|
|
provider: "discord",
|
|
orgId: "org_123",
|
|
userId: "user_123",
|
|
env: AppEnv.Sandbox,
|
|
expiresAt: subMilliseconds(Date.now(), 1).getTime(),
|
|
nonce: "nonce",
|
|
});
|
|
|
|
expect(verifyChatInstallState(expired, "secret")).toBeNull();
|
|
expect(verifyChatInstallState("not-valid", "secret")).toBeNull();
|
|
expect(verifyChatInstallState(expired, "wrong-secret")).toBeNull();
|
|
});
|
|
});
|