CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
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 | /**
* Collaborator management — route auth smoke.
*
* The routes in src/routes/collaborators.tsx are owner-only. These two
* smoke tests pin down the externally-observable auth contract:
* - unauthenticated GET redirects to /login (requireAuth)
* - an authed *non-owner* gets a 403 (or is bounced away — the 302→/login
* path is also acceptable if the DB is unavailable and the middleware
* can't resolve the session cookie)
*
* We intentionally don't spin up a real session; we rely on the middleware
* contract already covered by api-tokens.test.ts — requireAuth redirects
* when no valid session cookie is present.
*/
import { describe, it, expect } from "bun:test";
import app from "../app";
describe("collaborators — auth guard", () => {
it("GET /:owner/:repo/settings/collaborators without auth redirects to /login", async () => {
const res = await app.request(
"/somebody/some-repo/settings/collaborators"
);
expect(res.status).toBe(302);
expect(res.headers.get("location") || "").toContain("/login");
});
it("GET as an authed non-owner returns 403 or redirects away", async () => {
// We can't easily mint a real session without touching the DB, so we
// stub by sending a bogus session cookie. The middleware will fail to
// resolve it and redirect to /login — which is the "redirects away"
// branch the requirement allows. If a DB is configured and somehow the
// cookie resolves to a different user, we'd see a 403 from the
// inline owner check. Either outcome proves the route is not wide open.
const res = await app.request(
"/some-owner/some-repo/settings/collaborators",
{ headers: { cookie: "session=not-a-real-token" } }
);
expect([302, 403, 404]).toContain(res.status);
if (res.status === 302) {
expect(res.headers.get("location") || "").toContain("/login");
}
});
});
|