@dugongjs/testing
Version:
46 lines (45 loc) • 1.66 kB
JavaScript
import { v4 as uuid } from "uuid";
export class MessageBuilder {
constructor(options) {
this.domainEvents = [];
this.outboundMessageMapper = options.outboundMessageMapper;
this.initialSequenceNumber = options?.initialSequenceNumber ?? 1;
this.autoIncrementSequenceNumber = options?.autoIncrementSequenceNumber ?? true;
}
setInitialSequenceNumber(initialSequenceNumber) {
this.initialSequenceNumber = initialSequenceNumber;
return this;
}
addDomainEvent(...domainEvents) {
this.domainEvents.push(...domainEvents);
return this;
}
build() {
const domainEvents = this.domainEvents.map((domainEvent) => {
if (!domainEvent.getId()) {
domainEvent.setId(uuid());
}
if (!domainEvent.getTimestamp()) {
domainEvent.setTimestamp(new Date());
}
return domainEvent;
});
if (this.autoIncrementSequenceNumber) {
domainEvents.forEach((event, index) => {
event.setSequenceNumber(this.initialSequenceNumber + index);
});
}
return {
messages: domainEvents.map((event) => this.outboundMessageMapper.map(event.serialize())),
domainEvents,
domainEventIds: domainEvents.map((event) => event.getId())
};
}
clear() {
return new MessageBuilder({
outboundMessageMapper: this.outboundMessageMapper,
initialSequenceNumber: this.initialSequenceNumber,
autoIncrementSequenceNumber: this.autoIncrementSequenceNumber
});
}
}