Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions github/server/lib/repo-grant.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import {
} from "./repo-grant-store.ts";
import type { Env } from "../types/env.ts";

const TEST_NOW = Date.parse("2026-06-10T00:00:00.000Z");

function fakeKV() {
const store = new Map<string, string>();
return {
Expand Down Expand Up @@ -289,6 +291,7 @@ describe("refreshRepoGrant — request validation", () => {
test("missing grant_type or refresh_token → 400 invalid_request", async () => {
const store = getRepoGrantStore(fakeKV());
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: null,
refreshToken: null,
Expand All @@ -305,6 +308,7 @@ describe("refreshRepoGrant — request validation", () => {
test("unsupported grant_type → 400 unsupported_grant_type", async () => {
const store = getRepoGrantStore(fakeKV());
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "authorization_code",
refreshToken: "ghr_x.y",
Expand All @@ -321,6 +325,7 @@ describe("refreshRepoGrant — request validation", () => {
test("mismatched client_id → 400 invalid_client", async () => {
const store = getRepoGrantStore(fakeKV());
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: "ghr_x.y",
Expand All @@ -339,6 +344,7 @@ describe("refreshRepoGrant — grant validity (permanent failures)", () => {
test("unparseable refresh_token → 400 invalid_grant", async () => {
const store = getRepoGrantStore(fakeKV());
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: "not-a-token",
Expand All @@ -352,6 +358,7 @@ describe("refreshRepoGrant — grant validity (permanent failures)", () => {
const store = getRepoGrantStore(fakeKV());
const creds = generateGrantCredentials();
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand All @@ -365,6 +372,7 @@ describe("refreshRepoGrant — grant validity (permanent failures)", () => {
const store = getRepoGrantStore(fakeKV());
const { meta } = await seedGrant(store);
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: `ghr_${meta.grantId}.WRONGSECRET`,
Expand All @@ -380,6 +388,7 @@ describe("refreshRepoGrant — grant validity (permanent failures)", () => {
revokedAt: "2026-06-11T00:00:00.000Z",
});
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand Down Expand Up @@ -491,6 +500,7 @@ describe("refreshRepoGrant — minting", () => {
});

const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand Down Expand Up @@ -550,6 +560,7 @@ describe("refreshRepoGrant — minting", () => {
});

const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand Down Expand Up @@ -591,6 +602,7 @@ describe("refreshRepoGrant — minting", () => {
});

const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand Down Expand Up @@ -624,6 +636,7 @@ describe("refreshRepoGrant — minting", () => {
});

const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand All @@ -650,6 +663,7 @@ describe("refreshRepoGrant — minting", () => {
),
);
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand All @@ -670,6 +684,7 @@ describe("refreshRepoGrant — minting", () => {
),
);
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand All @@ -688,6 +703,7 @@ describe("refreshRepoGrant — minting", () => {
const { creds, meta } = await seedGrant(store);
setFetch(async () => json({ message: "repo gone" }, 422));
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand All @@ -705,6 +721,7 @@ describe("refreshRepoGrant — minting", () => {
const { creds, meta } = await seedGrant(store);
setFetch(async () => json({ message: "not found" }, 404));
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand All @@ -722,6 +739,7 @@ describe("refreshRepoGrant — minting", () => {
const { creds, meta } = await seedGrant(store);
setFetch(async () => json({ message: "down" }, 503));
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand All @@ -743,6 +761,7 @@ describe("refreshRepoGrant — minting", () => {
const { creds, meta } = await seedGrant(store);
setFetch(async () => json({ message: "bad jwt" }, 401));
const r = await refreshRepoGrant({
now: TEST_NOW,
store,
grantType: "refresh_token",
refreshToken: creds.refreshToken,
Expand Down
Loading