ci: trigga på master + formatfix inför Gitea Actions
CI / Typecheck, test & build (push) Failing after 2s
CI / Typecheck, test & build (push) Failing after 2s
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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");
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user