1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
import { describe, it, expect } from "bun:test";
import app from "../app";
describe("POST /:owner/:repo/pulls/:number/ai-rereview — auth guard", () => {
it("redirects to /login when unauthenticated", async () => {
const res = await app.request(
"/alice/demo/pulls/1/ai-rereview",
{
method: "POST",
headers: { "content-type": "application/x-www-form-urlencoded" },
body: "",
redirect: "manual",
}
);
expect([301, 302, 303, 307, 401, 403, 404, 503]).toContain(res.status);
if (res.status === 302 || res.status === 303 || res.status === 307) {
const loc = res.headers.get("location") || "";
expect(loc).toContain("/login");
}
});
it("rejects bogus bearer tokens", async () => {
const res = await app.request(
"/alice/demo/pulls/1/ai-rereview",
{
method: "POST",
headers: {
"content-type": "application/x-www-form-urlencoded",
authorization: "Bearer glct_definitely-not-valid",
},
body: "",
}
);
expect([401, 403, 404, 503]).toContain(res.status);
});
});
describe("triggerAiReview — force option (idempotency bypass)", () => {
it("accepts and propagates the force flag without throwing", async () => {
const { triggerAiReview } = await import("../lib/ai-review");
let threw = false;
try {
await triggerAiReview(
"alice",
"demo",
"00000000-0000-0000-0000-000000000000",
"Title",
"Body",
"main",
"feature",
{ force: true }
);
} catch {
threw = true;
}
expect(threw).toBe(false);
});
it("default options (no force) still works", async () => {
const { triggerAiReview } = await import("../lib/ai-review");
let threw = false;
try {
await triggerAiReview(
"alice",
"demo",
"00000000-0000-0000-0000-000000000000",
"Title",
"Body",
"main",
"feature"
);
} catch {
threw = true;
}
expect(threw).toBe(false);
});
});
|