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/post/draft_post_test.go | 130 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/post/draft_post_test.go (limited to 'src/post/draft_post_test.go') diff --git a/src/post/draft_post_test.go b/src/post/draft_post_test.go new file mode 100644 index 0000000..f404bb0 --- /dev/null +++ b/src/post/draft_post_test.go @@ -0,0 +1,130 @@ +package post + +import ( + "sort" + "testing" + + "github.com/stretchr/testify/assert" +) + +type draftStoreTestHarness struct { + store DraftStore +} + +func newDraftStoreTestHarness(t *testing.T) draftStoreTestHarness { + + db := NewInMemSQLDB() + t.Cleanup(func() { db.Close() }) + + store := NewDraftStore(db) + + return draftStoreTestHarness{ + store: store, + } +} + +func TestDraftStore(t *testing.T) { + + assertPostEqual := func(t *testing.T, exp, got Post) { + t.Helper() + sort.Strings(exp.Tags) + sort.Strings(got.Tags) + assert.Equal(t, exp, got) + } + + assertPostsEqual := func(t *testing.T, exp, got []Post) { + t.Helper() + + if !assert.Len(t, got, len(exp), "exp:%+v\ngot: %+v", exp, got) { + return + } + + for i := range exp { + assertPostEqual(t, exp[i], got[i]) + } + } + + t.Run("not_found", func(t *testing.T) { + h := newDraftStoreTestHarness(t) + + _, err := h.store.GetByID("foo") + assert.ErrorIs(t, err, ErrPostNotFound) + }) + + t.Run("set_get_delete", func(t *testing.T) { + h := newDraftStoreTestHarness(t) + + post := testPost(0) + post.Tags = []string{"foo", "bar"} + + err := h.store.Set(post) + assert.NoError(t, err) + + gotPost, err := h.store.GetByID(post.ID) + assert.NoError(t, err) + + assertPostEqual(t, post, gotPost) + + // we will now try updating the post, and ensure it updates properly + + post.Title = "something else" + post.Series = "whatever" + post.Body = "anything" + post.Tags = []string{"bar", "baz"} + + err = h.store.Set(post) + assert.NoError(t, err) + + gotPost, err = h.store.GetByID(post.ID) + assert.NoError(t, err) + + assertPostEqual(t, post, gotPost) + + // delete the post, it should go away + assert.NoError(t, h.store.Delete(post.ID)) + + _, err = h.store.GetByID(post.ID) + assert.ErrorIs(t, err, ErrPostNotFound) + }) + + t.Run("get", func(t *testing.T) { + h := newDraftStoreTestHarness(t) + + posts := []Post{ + testPost(0), + testPost(1), + testPost(2), + testPost(3), + } + + for _, post := range posts { + err := h.store.Set(post) + assert.NoError(t, err) + } + + gotPosts, hasMore, err := h.store.Get(0, 2) + assert.NoError(t, err) + assert.True(t, hasMore) + assertPostsEqual(t, posts[:2], gotPosts) + + gotPosts, hasMore, err = h.store.Get(1, 2) + assert.NoError(t, err) + assert.False(t, hasMore) + assertPostsEqual(t, posts[2:4], gotPosts) + + posts = append(posts, testPost(4)) + err = h.store.Set(posts[4]) + assert.NoError(t, err) + + gotPosts, hasMore, err = h.store.Get(1, 2) + assert.NoError(t, err) + assert.True(t, hasMore) + assertPostsEqual(t, posts[2:4], gotPosts) + + gotPosts, hasMore, err = h.store.Get(2, 2) + assert.NoError(t, err) + assert.False(t, hasMore) + assertPostsEqual(t, posts[4:], gotPosts) + }) + +} -- cgit v1.2.3