Compare commits

..

8 Commits

Author SHA1 Message Date
Flea Flicker 784418937d fix(test): de-flake authProvider.test.ts OOBE test-connection (GRO-2745) [uat → main]
CI / Lint & Typecheck (push) Successful in 19s
CI / Test (push) Successful in 21s
CI / Build & Push Docker Images (push) Successful in 27s
2026-08-23 08:23:47 +00:00
Flea Flicker 40899d135a fix(test): de-flake authProvider.test.ts OOBE test-connection (GRO-2745)
CI / Lint & Typecheck (push) Successful in 20s
CI / Test (push) Successful in 21s
CI / Build & Push Docker Images (push) Successful in 23s
CI / Lint & Typecheck (pull_request) Successful in 18s
CI / Test (pull_request) Successful in 25s
CI / Build & Push Docker Images (pull_request) Successful in 25s
Merge dev→uat after QA approval (GRO-2746)
2026-08-22 09:25:37 +00:00
Flea Flicker 62c80ca8d0 fix(test): de-flake authProvider.test.ts OOBE test-connection (GRO-2745)
CI / Lint & Typecheck (push) Successful in 19s
CI / Test (push) Successful in 21s
CI / Lint & Typecheck (pull_request) Successful in 19s
CI / Test (pull_request) Successful in 26s
CI / Build & Push Docker Images (push) Successful in 23s
CI / Build & Push Docker Images (pull_request) Successful in 26s
2026-08-22 08:49:43 +00:00
Flea Flicker bb55c658a5 fix(test): de-flake authProvider.test.ts OOBE test-connection timeout (GRO-2745)
CI / Lint & Typecheck (pull_request) Successful in 19s
CI / Test (pull_request) Successful in 20s
CI / Build & Push Docker Images (pull_request) Successful in 46s
Mock global.fetch in the test-connection test so it no longer hits the
real network. The route has a 10s fetch timeout, but the test used the
default 5s vitest timeout, causing intermittent failures when DNS/network
was slow. Add afterEach(vi.restoreAllMocks) to clean up between tests,
and reconcile the misleading "returns 400" test title to match the 200
assertion the route actually produces.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-22 08:39:25 +00:00
Scrubs McBarkley 365d4a5023 fix(db): GRO-2722 schema-safe reset (TRUNCATE, no DROP) [uat→main]
CI / Lint & Typecheck (push) Successful in 19s
CI / Test (push) Successful in 20s
CI / Build & Push Docker Images (push) Successful in 29s
Merges GRO-2722 root-cause fix for GRO-2678 prod outage. DROP-based reset replaced with TRUNCATE RESTART IDENTITY CASCADE. All SDLC gates passed: UAT  (GRO-2725), Security  (GRO-2726), QA  (GRO-2724), CTO review .
2026-08-22 08:36:55 +00:00
Flea Flicker e0a8cd30ab feat(api): promote uat → main — /api/readyz DB health check (GRO-2687)
CI / Lint & Typecheck (push) Successful in 21s
CI / Test (push) Successful in 21s
CI / Build & Push Docker Images (push) Successful in 35s
All SDLC gates satisfied: QA approved (Lint Roller, review #5055), UAT passed (Shedward, GRO-2692), Security passed (Barkley, GRO-2698), CTO approved (review #5067 on head 9e948d6). cc @cpfarhood
2026-08-09 11:04:15 +00:00
Flea Flicker 3aaa440561 fix(db): GRO-2672 swap drizzle-orm migrate() for drizzle-kit migrate in reset.ts (uat→main)
CI / Lint & Typecheck (push) Successful in 18s
CI / Test (push) Successful in 20s
CI / Build & Push Docker Images (push) Successful in 29s
CTO-approved (gb_dogfather, review #5050). All pipeline phases passed: CI , QA  (PR #229), UAT  (GRO-2673), Security  (GRO-2674).
2026-08-06 09:53:11 +00:00
Flea Flicker 552a4d9f28 Merge pull request 'feat: GRO-2652 boot ECONNRESET resilience + CORS enforcement + OOBE endpoint (uat→main)' (#226) from uat into main
CI / Lint & Typecheck (push) Successful in 19s
CI / Test (push) Successful in 21s
CI / Build & Push Docker Images (push) Successful in 33s
CTO Approved (review 5044). UAT (Shedward) PASS. Security (Barkley) PASS.
2026-08-05 11:57:24 +00:00
2 changed files with 18 additions and 6 deletions
+9 -3
View File
@@ -1,4 +1,4 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { Hono } from "hono";
import { authProviderRouter } from "../routes/authProvider.js";
@@ -227,6 +227,7 @@ describe("PUT /admin/auth-provider", () => {
describe("POST /admin/auth-provider/test", () => {
beforeEach(resetMock);
afterEach(() => vi.restoreAllMocks());
it("returns ok=false for unreachable issuer", async () => {
const app = makeApp(mockSuperUser);
@@ -242,7 +243,12 @@ describe("POST /admin/auth-provider/test", () => {
expect(body.error).toBeTruthy();
}, 15000); // timeout must exceed the 10s fetch timeout in the route handler
it("returns 400 for missing clientSecret (not required for test)", async () => {
it("returns 200 when clientSecret is omitted (not required by test-connection schema)", async () => {
// Mock fetch so the route does not make a real network request.
vi.spyOn(global, "fetch").mockResolvedValueOnce({
ok: true,
json: async () => ({ issuer: "https://auth.example.com" }),
} as Response);
const app = makeApp(mockSuperUser);
const { status } = await post(app, "/admin/auth-provider/test", {
providerId: "authentik",
@@ -250,7 +256,7 @@ describe("POST /admin/auth-provider/test", () => {
issuerUrl: "https://auth.example.com",
clientId: "client",
}, mockSuperUser);
expect(status).toBe(200); // clientSecret omitted intentionally for test
expect(status).toBe(200);
});
});
+9 -3
View File
@@ -1,4 +1,4 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { Hono } from "hono";
import { authProviderRouter } from "../routes/authProvider.js";
@@ -227,6 +227,7 @@ describe("PUT /admin/auth-provider", () => {
describe("POST /admin/auth-provider/test", () => {
beforeEach(resetMock);
afterEach(() => vi.restoreAllMocks());
it("returns ok=false for unreachable issuer", async () => {
const app = makeApp(mockSuperUser);
@@ -242,7 +243,12 @@ describe("POST /admin/auth-provider/test", () => {
expect(body.error).toBeTruthy();
}, 15000); // timeout must exceed the 10s fetch timeout in the route handler
it("returns 400 for missing clientSecret (not required for test)", async () => {
it("returns 200 when clientSecret is omitted (not required by test-connection schema)", async () => {
// Mock fetch so the route does not make a real network request.
vi.spyOn(global, "fetch").mockResolvedValueOnce({
ok: true,
json: async () => ({ issuer: "https://auth.example.com" }),
} as Response);
const app = makeApp(mockSuperUser);
const { status } = await post(app, "/admin/auth-provider/test", {
providerId: "authentik",
@@ -250,7 +256,7 @@ describe("POST /admin/auth-provider/test", () => {
issuerUrl: "https://auth.example.com",
clientId: "client",
}, mockSuperUser);
expect(status).toBe(200); // clientSecret omitted intentionally for test
expect(status).toBe(200);
});
});