1
- import type { OutboxEntry } from '@message-queue-toolkit/outbox-core'
1
+ import { InMemoryOutboxAccumulator , type OutboxEntry } from '@message-queue-toolkit/outbox-core'
2
2
import {
3
3
type CommonEventDefinition ,
4
4
enrichMessageSchemaWithBase ,
@@ -37,6 +37,7 @@ describe('outbox-prisma-adapter', () => {
37
37
id UUID PRIMARY KEY,
38
38
type TEXT NOT NULL,
39
39
created TIMESTAMP NOT NULL,
40
+ updated TIMESTAMP,
40
41
retry_count INT NOT NULL DEFAULT 0,
41
42
data JSONB NOT NULL,
42
43
status TEXT NOT NULL
@@ -74,6 +75,7 @@ describe('outbox-prisma-adapter', () => {
74
75
id : expect . any ( String ) ,
75
76
type : 'entity.created' ,
76
77
created : expect . any ( Date ) ,
78
+ updated : expect . any ( Date ) ,
77
79
retryCount : 0 ,
78
80
data : {
79
81
id : expect . any ( String ) ,
@@ -87,4 +89,124 @@ describe('outbox-prisma-adapter', () => {
87
89
} ,
88
90
] )
89
91
} )
92
+
93
+ it ( 'should insert successful entries from accumulator' , async ( ) => {
94
+ const accumulator = new InMemoryOutboxAccumulator < SupportedEvents > ( )
95
+
96
+ const entry1 = {
97
+ id : uuidv7 ( ) ,
98
+ event : events . created ,
99
+ status : 'CREATED' ,
100
+ data : {
101
+ id : uuidv7 ( ) ,
102
+ payload : {
103
+ message : 'TEST EVENT' ,
104
+ } ,
105
+ metadata : { } ,
106
+ timestamp : new Date ( ) . toISOString ( ) ,
107
+ } ,
108
+ retryCount : 0 ,
109
+ created : new Date ( ) ,
110
+ } satisfies OutboxEntry < SupportedEvents [ number ] >
111
+ accumulator . add ( entry1 )
112
+
113
+ const entry2 = {
114
+ id : uuidv7 ( ) ,
115
+ event : events . created ,
116
+ status : 'CREATED' ,
117
+ data : {
118
+ id : uuidv7 ( ) ,
119
+ payload : {
120
+ message : 'TEST EVENT 2' ,
121
+ } ,
122
+ metadata : { } ,
123
+ timestamp : new Date ( ) . toISOString ( ) ,
124
+ } ,
125
+ retryCount : 0 ,
126
+ created : new Date ( ) ,
127
+ } satisfies OutboxEntry < SupportedEvents [ number ] >
128
+ accumulator . add ( entry2 )
129
+
130
+ await outboxPrismaAdapter . flush ( accumulator )
131
+
132
+ const entriesAfterFlush = await outboxPrismaAdapter . getEntries ( 10 )
133
+
134
+ expect ( entriesAfterFlush ) . toMatchObject ( [
135
+ {
136
+ id : entry1 . id ,
137
+ status : 'SUCCESS' ,
138
+ } ,
139
+ {
140
+ id : entry2 . id ,
141
+ status : 'SUCCESS' ,
142
+ } ,
143
+ ] )
144
+ } )
145
+
146
+ it ( "should update successful entries' status to 'SUCCESS'" , async ( ) => {
147
+ const accumulator = new InMemoryOutboxAccumulator < SupportedEvents > ( )
148
+
149
+ const entry1 = {
150
+ id : uuidv7 ( ) ,
151
+ event : events . created ,
152
+ status : 'CREATED' ,
153
+ data : {
154
+ id : uuidv7 ( ) ,
155
+ payload : {
156
+ message : 'TEST EVENT' ,
157
+ } ,
158
+ metadata : { } ,
159
+ timestamp : new Date ( ) . toISOString ( ) ,
160
+ } ,
161
+ retryCount : 0 ,
162
+ created : new Date ( ) ,
163
+ } satisfies OutboxEntry < SupportedEvents [ number ] >
164
+ accumulator . add ( entry1 )
165
+
166
+ const entry2 = {
167
+ id : uuidv7 ( ) ,
168
+ event : events . created ,
169
+ status : 'CREATED' ,
170
+ data : {
171
+ id : uuidv7 ( ) ,
172
+ payload : {
173
+ message : 'TEST EVENT 2' ,
174
+ } ,
175
+ metadata : { } ,
176
+ timestamp : new Date ( ) . toISOString ( ) ,
177
+ } ,
178
+ retryCount : 0 ,
179
+ created : new Date ( ) ,
180
+ } satisfies OutboxEntry < SupportedEvents [ number ] >
181
+ accumulator . add ( entry2 )
182
+
183
+ await outboxPrismaAdapter . createEntry ( entry1 )
184
+ await outboxPrismaAdapter . createEntry ( entry2 )
185
+
186
+ const beforeFlush = await outboxPrismaAdapter . getEntries ( 10 )
187
+ expect ( beforeFlush ) . toMatchObject ( [
188
+ {
189
+ id : entry1 . id ,
190
+ status : 'CREATED' ,
191
+ } ,
192
+ {
193
+ id : entry2 . id ,
194
+ status : 'CREATED' ,
195
+ } ,
196
+ ] )
197
+
198
+ outboxPrismaAdapter . flush ( accumulator )
199
+
200
+ const afterFlush = await outboxPrismaAdapter . getEntries ( 10 )
201
+ expect ( afterFlush ) . toMatchObject ( [
202
+ {
203
+ id : entry1 . id ,
204
+ status : 'SUCCESS' ,
205
+ } ,
206
+ {
207
+ id : entry2 . id ,
208
+ status : 'SUCCESS' ,
209
+ } ,
210
+ ] )
211
+ } )
90
212
} )
0 commit comments