1
0
Files
cloudflare-worker-jwt/tests/index.spec.ts
2024-02-24 16:46:17 +01:00

39 lines
1.6 KiB
TypeScript

import { describe, expect, test } from "vitest"
import jwt from "../src/index"
describe("Verify", async () => {
const secret = "super-secret"
const now = Math.floor(Date.now() / 1000)
const offset = 30 // 30 seconds
const validToken = await jwt.sign({ sub: "me", nbf: now - offset }, secret)
const notYetExpired = await jwt.sign({ sub: "me", exp: now + offset }, secret)
const notYetValidToken = await jwt.sign({ sub: "me", nbf: now + offset }, secret)
const expiredToken = await jwt.sign({ sub: "me", exp: now - offset }, secret)
test("Valid", () => {
expect(jwt.verify(validToken, secret, { throwError: true })).resolves.toBe(true)
})
test("Not yet expired", () => {
expect(jwt.verify(notYetExpired, secret, { throwError: true })).resolves.toBe(true)
})
test("Not yet valid", () => {
expect(jwt.verify(notYetValidToken, secret, { throwError: true })).rejects.toThrowError("NOT_YET_VALID")
})
test("Expired", () => {
expect(jwt.verify(expiredToken, secret, { throwError: true })).rejects.toThrowError("EXPIRED")
})
test("Clock offset", () => {
expect(jwt.verify(notYetValidToken, secret, { clockTolerance: offset, throwError: true })).resolves.toBe(true)
expect(jwt.verify(expiredToken, secret, { clockTolerance: offset, throwError: true })).resolves.toBe(true)
expect(jwt.verify(notYetValidToken, secret, { clockTolerance: offset - 1, throwError: true })).rejects.toThrowError("NOT_YET_VALID")
expect(jwt.verify(expiredToken, secret, { clockTolerance: offset - 1, throwError: true })).rejects.toThrowError("EXPIRED")
})
})