@@ -40,6 +40,29 @@ func obtainEventStore(t *testing.T) (*sql.DB, postgres.EventStore) {
4040 db , err := sql .Open ("postgres" , url )
4141 require .NoError (t , err )
4242
43+ handleError := func (err error ) {
44+ if ! assert .NoError (t , err ) {
45+ t .FailNow ()
46+ }
47+ }
48+
49+ tx , err := db .Begin ()
50+ require .NoError (t , err )
51+
52+ // Reset checkpoints for subscriptions.
53+ _ , err = tx .Exec ("DELETE FROM subscriptions_checkpoints" )
54+ require .NoError (t , err )
55+
56+ // Reset committed events and streams.
57+ _ , err = tx .Exec ("DELETE FROM streams" )
58+ require .NoError (t , err )
59+
60+ // Reset the global sequence number to 1.
61+ _ , err = tx .Exec ("ALTER SEQUENCE events_global_sequence_number_seq RESTART WITH 1" )
62+ require .NoError (t , err )
63+
64+ handleError (tx .Commit ())
65+
4366 return db , postgres .NewEventStore (db )
4467}
4568
@@ -50,29 +73,6 @@ func TestStoreSuite(t *testing.T) {
5073 require .NoError (t , store .Register (internal .IntPayload (0 )))
5174
5275 suite .Run (t , eventstore .NewStoreSuite (func () eventstore.Store {
53- handleError := func (err error ) {
54- if ! assert .NoError (t , err ) {
55- t .FailNow ()
56- }
57- }
58-
59- tx , err := db .Begin ()
60- require .NoError (t , err )
61-
62- // Reset checkpoints for subscriptions.
63- _ , err = tx .Exec ("DELETE FROM subscriptions_checkpoints" )
64- require .NoError (t , err )
65-
66- // Reset committed events and streams.
67- _ , err = tx .Exec ("DELETE FROM streams" )
68- require .NoError (t , err )
69-
70- // Reset the global sequence number to 1.
71- _ , err = tx .Exec ("ALTER SEQUENCE events_global_sequence_number_seq RESTART WITH 1" )
72- require .NoError (t , err )
73-
74- handleError (tx .Commit ())
75-
7676 return store
7777 }))
7878}
@@ -111,3 +111,41 @@ func TestLatestSequenceNumber(t *testing.T) {
111111 assert .NoError (t , err )
112112 assert .Equal (t , latestSequenceNumber , actual )
113113}
114+
115+ func TestAppendToStoreWrapperOption (t * testing.T ) {
116+ db , _ := obtainEventStore (t )
117+ defer func () { assert .NoError (t , db .Close ()) }()
118+
119+ triggered := false
120+
121+ store := postgres .NewEventStore (
122+ db ,
123+ postgres .WithAppendMiddleware (func (super postgres.AppendToStoreFunc ) postgres.AppendToStoreFunc {
124+ return func (
125+ ctx context.Context ,
126+ tx * sql.Tx ,
127+ id stream.ID ,
128+ expected eventstore.VersionCheck ,
129+ event eventually.Event ,
130+ ) (int64 , error ) {
131+ triggered = true
132+ return super (ctx , tx , id , expected , event )
133+ }
134+ }),
135+ )
136+
137+ require .NoError (t , store .Register (internal .IntPayload (0 )))
138+
139+ ctx := context .Background ()
140+
141+ _ , _ = store .Append (
142+ ctx ,
143+ firstInstance ,
144+ eventstore .VersionCheck (int64 (- 1 )),
145+ eventually.Event {Payload : internal .IntPayload (13 )},
146+ )
147+
148+ latestSequenceNumber , _ := store .LatestSequenceNumber (ctx )
149+ assert .Equal (t , int64 (1 ), latestSequenceNumber )
150+ assert .True (t , triggered )
151+ }
0 commit comments