|
1 | 1 | package postgres_test |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "context" |
4 | 5 | "database/sql" |
| 6 | + "math" |
5 | 7 | "os" |
6 | 8 | "testing" |
7 | 9 |
|
8 | | - "github.com/get-eventually/go-eventually/eventstore" |
9 | | - "github.com/get-eventually/go-eventually/eventstore/postgres" |
10 | | - "github.com/get-eventually/go-eventually/internal" |
11 | | - |
12 | 10 | "github.com/stretchr/testify/assert" |
13 | 11 | "github.com/stretchr/testify/require" |
14 | 12 | "github.com/stretchr/testify/suite" |
| 13 | + |
| 14 | + "github.com/get-eventually/go-eventually" |
| 15 | + "github.com/get-eventually/go-eventually/eventstore" |
| 16 | + "github.com/get-eventually/go-eventually/eventstore/postgres" |
| 17 | + "github.com/get-eventually/go-eventually/eventstore/stream" |
| 18 | + "github.com/get-eventually/go-eventually/internal" |
15 | 19 | ) |
16 | 20 |
|
| 21 | +var firstInstance = stream.ID{ |
| 22 | + Type: "first-type", |
| 23 | + Name: "my-instance-for-latest-number", |
| 24 | +} |
| 25 | + |
17 | 26 | const defaultPostgresURL = "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable" |
18 | 27 |
|
19 | 28 | func obtainEventStore(t *testing.T) (*sql.DB, postgres.EventStore) { |
@@ -67,3 +76,37 @@ func TestStoreSuite(t *testing.T) { |
67 | 76 | return store |
68 | 77 | })) |
69 | 78 | } |
| 79 | + |
| 80 | +func TestLatestSequenceNumber(t *testing.T) { |
| 81 | + db, store := obtainEventStore(t) |
| 82 | + defer func() { assert.NoError(t, db.Close()) }() |
| 83 | + |
| 84 | + require.NoError(t, store.Register(internal.IntPayload(0))) |
| 85 | + |
| 86 | + ctx := context.Background() |
| 87 | + |
| 88 | + for i := 1; i < 10; i++ { |
| 89 | + _, err := store.Append( |
| 90 | + ctx, |
| 91 | + firstInstance, |
| 92 | + eventstore.VersionCheck(int64(i-1)), |
| 93 | + eventually.Event{Payload: internal.IntPayload(i)}, |
| 94 | + ) |
| 95 | + |
| 96 | + require.NoError(t, err) |
| 97 | + } |
| 98 | + |
| 99 | + ch := make(chan eventstore.Event, 1) |
| 100 | + go func() { |
| 101 | + require.NoError(t, store.Stream(ctx, ch, stream.All{}, eventstore.SelectFromBeginning)) |
| 102 | + }() |
| 103 | + |
| 104 | + var latestSequenceNumber int64 |
| 105 | + for event := range ch { |
| 106 | + latestSequenceNumber = int64(math.Max(float64(latestSequenceNumber), float64(event.SequenceNumber))) |
| 107 | + } |
| 108 | + |
| 109 | + actual, err := store.LatestSequenceNumber(ctx) |
| 110 | + assert.NoError(t, err) |
| 111 | + assert.Equal(t, latestSequenceNumber, actual) |
| 112 | +} |
0 commit comments