From 4f01edb9230f58ff84b0dd892c931ec8ac9aad55 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Tue, 13 Sep 2022 12:56:08 +0200 Subject: move src out of srv, clean up default.nix and Makefile --- src/mailinglist/store_test.go | 95 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/mailinglist/store_test.go (limited to 'src/mailinglist/store_test.go') diff --git a/src/mailinglist/store_test.go b/src/mailinglist/store_test.go new file mode 100644 index 0000000..9093d90 --- /dev/null +++ b/src/mailinglist/store_test.go @@ -0,0 +1,95 @@ +package mailinglist + +import ( + "io" + "testing" + "time" + + "github.com/mediocregopher/blog.mediocregopher.com/srv/cfg" + "github.com/stretchr/testify/assert" +) + +func TestStore(t *testing.T) { + + var dataDir cfg.DataDir + + if err := dataDir.Init(); err != nil { + t.Fatal(err) + } + + t.Cleanup(func() { dataDir.Close() }) + + store, err := NewStore(dataDir) + assert.NoError(t, err) + + t.Cleanup(func() { + assert.NoError(t, store.Close()) + }) + + now := func() time.Time { + return time.Now().Truncate(time.Second) + } + + assertGet := func(t *testing.T, email Email) { + t.Helper() + + gotEmail, err := store.Get(email.Email) + assert.NoError(t, err) + assert.Equal(t, email, gotEmail) + + gotEmail, err = store.GetBySubToken(email.SubToken) + assert.NoError(t, err) + assert.Equal(t, email, gotEmail) + + if email.UnsubToken != "" { + gotEmail, err = store.GetByUnsubToken(email.UnsubToken) + assert.NoError(t, err) + assert.Equal(t, email, gotEmail) + } + } + + assertNotFound := func(t *testing.T, email string) { + t.Helper() + _, err := store.Get(email) + assert.ErrorIs(t, err, ErrNotFound) + } + + // now start actual tests + + // GetAll should not do anything, there's no data + _, err = store.GetAll()() + assert.ErrorIs(t, err, io.EOF) + + emailFoo := Email{ + Email: "foo", + SubToken: "subTokenFoo", + CreatedAt: now(), + } + + // email isn't stored yet, shouldn't exist + assertNotFound(t, emailFoo.Email) + + // Set an email, now it should exist + assert.NoError(t, store.Set(emailFoo)) + assertGet(t, emailFoo) + + // Update the email with an unsub token + emailFoo.UnsubToken = "unsubTokenFoo" + emailFoo.VerifiedAt = now() + assert.NoError(t, store.Set(emailFoo)) + assertGet(t, emailFoo) + + // GetAll should now only return that email + iter := store.GetAll() + gotEmail, err := iter() + assert.NoError(t, err) + assert.Equal(t, emailFoo, gotEmail) + _, err = iter() + assert.ErrorIs(t, err, io.EOF) + + // Delete the email, it should be gone + assert.NoError(t, store.Delete(emailFoo.Email)) + assertNotFound(t, emailFoo.Email) + _, err = store.GetAll()() + assert.ErrorIs(t, err, io.EOF) +} -- cgit v1.2.3