63 lines · 2.0 KB · TypeScript
RawDownload
import { describe, expect, it } from "@effect/vitest";import * as Effect from "effect/Effect";import * as Schema from "effect/Schema"; import { ApplicationProjectEvent } from "./applicationEvent.ts"; const decodeApplicationProjectEvent = Schema.decodeUnknownEffect(ApplicationProjectEvent); describe("application project events", () => {  it.effect("decodes project events without the legacy thread event contract", () =>    Effect.gen(function* () {      const event = yield* decodeApplicationProjectEvent({        sequence: 12,        eventId: "event-project-12",        aggregateKind: "project",        aggregateId: "project-1",        occurredAt: "2026-06-24T12:00:00.000Z",        commandId: "command-project-12",        causationEventId: null,        correlationId: "command-project-12",        metadata: {},        type: "project.created",        payload: {          projectId: "project-1",          title: "Project",          workspaceRoot: "/tmp/project",          defaultModelSelection: null,          scripts: [],          createdAt: "2026-06-24T12:00:00.000Z",          updatedAt: "2026-06-24T12:00:00.000Z",        },      });       expect(event.type).toBe("project.created");      expect(event.payload.projectId).toBe("project-1");    }),  );   it.effect("rejects a project event carrying a thread aggregate", () =>    Effect.gen(function* () {      const result = yield* Effect.result(        decodeApplicationProjectEvent({          sequence: 12,          eventId: "event-project-12",          aggregateKind: "thread",          aggregateId: "project-1",          occurredAt: "2026-06-24T12:00:00.000Z",          commandId: null,          causationEventId: null,          correlationId: null,          metadata: {},          type: "project.deleted",          payload: {            projectId: "project-1",            deletedAt: "2026-06-24T12:00:00.000Z",          },        }),      );       expect(result._tag).toBe("Failure");    }),  );});