ci: trigga på master + formatfix inför Gitea Actions
CI / Typecheck, test & build (push) Failing after 2s

This commit is contained in:
Sven (AAMOS AI)
2026-08-13 17:25:14 +07:00
parent 61d60931ad
commit c32a7e33c7
141 changed files with 40555 additions and 45210 deletions
+18 -7
View File
@@ -1,6 +1,12 @@
import { describe, expect, it, beforeAll, afterAll } from "vitest";
import { eq, inArray } from "drizzle-orm";
import { createDatabase, closeDatabase, markMilestone, getActivationState, schema } from "@app/database";
import {
createDatabase,
closeDatabase,
markMilestone,
getActivationState,
schema,
} from "@app/database";
describe("activation", () => {
const { db } = createDatabase();
@@ -8,12 +14,17 @@ describe("activation", () => {
const inviteCodes = ["ACT123", "ACT223"];
async function cleanup() {
await db.delete(schema.householdMembers).where(
inArray(
schema.householdMembers.householdId,
db.select({ id: schema.households.id }).from(schema.households).where(inArray(schema.households.inviteCode, inviteCodes)),
),
);
await db
.delete(schema.householdMembers)
.where(
inArray(
schema.householdMembers.householdId,
db
.select({ id: schema.households.id })
.from(schema.households)
.where(inArray(schema.households.inviteCode, inviteCodes)),
),
);
await db.delete(schema.households).where(inArray(schema.households.inviteCode, inviteCodes));
await db.delete(schema.users).where(inArray(schema.users.email, emails));
}
+15 -3
View File
@@ -4,7 +4,13 @@
*/
import { describe, expect, it, beforeAll, afterAll } from "vitest";
import { eq } from "drizzle-orm";
import { createDatabase, closeDatabase, schema, isAnalyticsOptedIn, deleteUserAnalyticsEvents } from "@app/database";
import {
createDatabase,
closeDatabase,
schema,
isAnalyticsOptedIn,
deleteUserAnalyticsEvents,
} from "@app/database";
const TEST_USER_EMAIL = "analytics-gdpr-test@example.invalid";
@@ -76,7 +82,11 @@ describe("analytics GDPR helpers", () => {
// Insert a dummy event for the test user and another user.
const [otherUser] = await db
.insert(schema.users)
.values({ email: "other-analytics-test@example.invalid", displayName: "Other", locale: "sv-SE" })
.values({
email: "other-analytics-test@example.invalid",
displayName: "Other",
locale: "sv-SE",
})
.returning({ id: schema.users.id });
await db.insert(schema.productAnalyticsEvents).values({
@@ -99,7 +109,9 @@ describe("analytics GDPR helpers", () => {
.where(eq(schema.productAnalyticsEvents.userId, otherUser!.id));
expect(remaining).toHaveLength(1);
await db.delete(schema.productAnalyticsEvents).where(eq(schema.productAnalyticsEvents.userId, otherUser!.id));
await db
.delete(schema.productAnalyticsEvents)
.where(eq(schema.productAnalyticsEvents.userId, otherUser!.id));
await db.delete(schema.users).where(eq(schema.users.id, otherUser!.id));
});
});
+12 -6
View File
@@ -120,15 +120,17 @@ describe("buildWall", () => {
expect(ok.value).toBe("OK");
expect(ok.tone).toBe("ok");
const nere = buildWall(baseSummary({ jobb: { ...baseSummary().jobb, workers_ok: false } })).boards[0]!.tiles.find(
(t) => t.label === "Workers",
)!;
const nere = buildWall(
baseSummary({ jobb: { ...baseSummary().jobb, workers_ok: false } }),
).boards[0]!.tiles.find((t) => t.label === "Workers")!;
expect(nere.value).toBe("NERE");
expect(nere.tone).toBe("warn");
});
it("allergen-brott 0 är ok; >0 varnar", () => {
const zero = buildWall(baseSummary()).boards[0]!.tiles.find((t) => t.label === "Allergen-brott")!;
const zero = buildWall(baseSummary()).boards[0]!.tiles.find(
(t) => t.label === "Allergen-brott",
)!;
expect(zero.value).toBe("0");
expect(zero.tone).toBe("ok");
@@ -153,8 +155,12 @@ describe("buildWall", () => {
});
it("ändrat summary-värde ändrar tile (inga hårdkodade tal)", () => {
const first = buildWall(baseSummary({ anvandare: { ...baseSummary().anvandare, aktiva_nu: 1 } }));
const second = buildWall(baseSummary({ anvandare: { ...baseSummary().anvandare, aktiva_nu: 2 } }));
const first = buildWall(
baseSummary({ anvandare: { ...baseSummary().anvandare, aktiva_nu: 1 } }),
);
const second = buildWall(
baseSummary({ anvandare: { ...baseSummary().anvandare, aktiva_nu: 2 } }),
);
expect(first.boards[0]!.tiles.find((t) => t.label === "Aktiva nu")!.value).toBe("1");
expect(second.boards[0]!.tiles.find((t) => t.label === "Aktiva nu")!.value).toBe("2");
});
+45 -7
View File
@@ -1,7 +1,12 @@
import { describe, expect, it, beforeEach, afterAll } from "vitest";
import { eq, sql } from "drizzle-orm";
import { createDatabase, closeDatabase } from "../src/client.js";
import { schema, seedReleaseGates, evaluateReleaseGates, summarizeReleaseGates } from "../src/index.js";
import {
schema,
seedReleaseGates,
evaluateReleaseGates,
summarizeReleaseGates,
} from "../src/index.js";
import { BUILT_IN_RELEASE_GATES } from "@app/shared-types";
const { db, pool } = createDatabase();
@@ -53,9 +58,27 @@ describe("release gates", () => {
const userB = await createTestUser("22222222-2222-2222-2222-222222222222");
const now = new Date();
await db.insert(schema.productAnalyticsEvents).values([
{ eventName: "account_created", userId: userA, occurredAt: now, receivedAt: now, properties: {} },
{ eventName: "account_created", userId: userB, occurredAt: now, receivedAt: now, properties: {} },
{ eventName: "scan_completed", userId: userA, occurredAt: now, receivedAt: now, properties: {} },
{
eventName: "account_created",
userId: userA,
occurredAt: now,
receivedAt: now,
properties: {},
},
{
eventName: "account_created",
userId: userB,
occurredAt: now,
receivedAt: now,
properties: {},
},
{
eventName: "scan_completed",
userId: userA,
occurredAt: now,
receivedAt: now,
properties: {},
},
]);
const results = await evaluateReleaseGates(db);
@@ -80,12 +103,27 @@ describe("release gates", () => {
const user = await createTestUser("33333333-3333-3333-3333-333333333333");
const now = new Date();
await db.insert(schema.productAnalyticsEvents).values([
{ eventName: "account_created", userId: user, occurredAt: now, receivedAt: now, properties: {} },
{ eventName: "scan_completed", userId: user, occurredAt: now, receivedAt: now, properties: {} },
{
eventName: "account_created",
userId: user,
occurredAt: now,
receivedAt: now,
properties: {},
},
{
eventName: "scan_completed",
userId: user,
occurredAt: now,
receivedAt: now,
properties: {},
},
]);
await evaluateReleaseGates(db);
const [gate] = await db.select().from(schema.releaseGates).where(eq(schema.releaseGates.gateKey, "first_scan_rate"));
const [gate] = await db
.select()
.from(schema.releaseGates)
.where(eq(schema.releaseGates.gateKey, "first_scan_rate"));
expect(gate?.lastValue).toBeCloseTo(1);
expect(gate?.status).toBe("passed");
expect(gate?.lastEvaluatedAt).not.toBeNull();