feat: version 2 beta
This commit is contained in:
108
tests/adapters/store/add-many-events.ts
Normal file
108
tests/adapters/store/add-many-events.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
import { assertEquals, assertObjectMatch, assertRejects } from "@std/assert";
|
||||
import { it } from "@std/testing/bdd";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { EventValidationError } from "../../../mod.ts";
|
||||
import type { EventStoreFactory } from "../mocks/events.ts";
|
||||
import { userReducer } from "../mocks/user-reducer.ts";
|
||||
import { describe } from "../utilities/describe.ts";
|
||||
|
||||
export default describe<EventStoreFactory>(".addSequence", (getEventStore) => {
|
||||
it("should insert 'user:created', 'user:name:given-set', and 'user:email-set' in a sequence of events", async () => {
|
||||
const { store } = await getEventStore();
|
||||
const stream = nanoid();
|
||||
|
||||
const events = [
|
||||
store.event({
|
||||
stream,
|
||||
type: "user:created",
|
||||
data: {
|
||||
name: {
|
||||
given: "Jane",
|
||||
family: "Doe",
|
||||
},
|
||||
email: "jane.doe@fixture.none",
|
||||
},
|
||||
meta: {
|
||||
auditor: "admin",
|
||||
},
|
||||
}),
|
||||
store.event({
|
||||
stream,
|
||||
type: "user:name:given-set",
|
||||
data: "John",
|
||||
meta: {
|
||||
auditor: "admin",
|
||||
},
|
||||
}),
|
||||
store.event({
|
||||
stream,
|
||||
type: "user:email-set",
|
||||
data: "john@doe.com",
|
||||
meta: {
|
||||
auditor: "admin",
|
||||
},
|
||||
}),
|
||||
];
|
||||
|
||||
await store.pushManyEvents(events);
|
||||
|
||||
const records = await store.getEventsByStreams([stream]);
|
||||
|
||||
assertEquals(records.length, 3);
|
||||
|
||||
records.forEach((record, index) => {
|
||||
assertObjectMatch(record, events[index]);
|
||||
});
|
||||
|
||||
const state = await store.reduce({ name: "user", stream, reducer: userReducer });
|
||||
|
||||
assertEquals(state?.name.given, "John");
|
||||
assertEquals(state?.email, "john@doe.com");
|
||||
});
|
||||
|
||||
it("should not commit any events when insert fails", async () => {
|
||||
const { store } = await getEventStore();
|
||||
const stream = nanoid();
|
||||
|
||||
await assertRejects(
|
||||
async () =>
|
||||
store.pushManyEvents([
|
||||
store.event({
|
||||
stream,
|
||||
type: "user:created",
|
||||
data: {
|
||||
name: {
|
||||
given: "Jane",
|
||||
family: "Doe",
|
||||
},
|
||||
email: "jane.doe@fixture.none",
|
||||
},
|
||||
meta: {
|
||||
auditor: "admin",
|
||||
},
|
||||
}),
|
||||
store.event({
|
||||
stream,
|
||||
type: "user:name:given-set",
|
||||
data: {
|
||||
givens: "John",
|
||||
},
|
||||
} as any),
|
||||
store.event({
|
||||
stream,
|
||||
type: "user:email-set",
|
||||
data: "john@doe.com",
|
||||
meta: {
|
||||
auditor: "admin",
|
||||
},
|
||||
}),
|
||||
]),
|
||||
EventValidationError,
|
||||
);
|
||||
|
||||
const records = await store.getEventsByStreams([stream]);
|
||||
|
||||
assertEquals(records.length, 0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user