summaryrefslogtreecommitdiff
path: root/src/post/asset/asset_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/post/asset/asset_test.go')
-rw-r--r--src/post/asset/asset_test.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/post/asset/asset_test.go b/src/post/asset/asset_test.go
new file mode 100644
index 0000000..574cc08
--- /dev/null
+++ b/src/post/asset/asset_test.go
@@ -0,0 +1,92 @@
+package asset
+
+import (
+ "bytes"
+ "io"
+ "testing"
+
+ "github.com/mediocregopher/blog.mediocregopher.com/srv/post"
+ "github.com/stretchr/testify/assert"
+)
+
+type testHarness struct {
+ store Store
+}
+
+func newTestHarness(t *testing.T) *testHarness {
+
+ db := post.NewInMemSQLDB()
+ t.Cleanup(func() { db.Close() })
+
+ store := NewStore(db)
+
+ return &testHarness{
+ store: store,
+ }
+}
+
+func (h *testHarness) assertGet(t *testing.T, exp, id string) {
+ t.Helper()
+ buf := new(bytes.Buffer)
+ err := h.store.Get(id, buf)
+ assert.NoError(t, err)
+ assert.Equal(t, exp, buf.String())
+}
+
+func (h *testHarness) assertNotFound(t *testing.T, id string) {
+ t.Helper()
+ err := h.store.Get(id, io.Discard)
+ assert.ErrorIs(t, ErrNotFound, err)
+}
+
+func TestStore(t *testing.T) {
+
+ testStore := func(t *testing.T, h *testHarness) {
+ t.Helper()
+
+ h.assertNotFound(t, "foo")
+ h.assertNotFound(t, "bar")
+
+ err := h.store.Set("foo", bytes.NewBufferString("FOO"))
+ assert.NoError(t, err)
+
+ h.assertGet(t, "FOO", "foo")
+ h.assertNotFound(t, "bar")
+
+ err = h.store.Set("foo", bytes.NewBufferString("FOOFOO"))
+ assert.NoError(t, err)
+
+ h.assertGet(t, "FOOFOO", "foo")
+ h.assertNotFound(t, "bar")
+
+ assert.NoError(t, h.store.Delete("foo"))
+ h.assertNotFound(t, "foo")
+ h.assertNotFound(t, "bar")
+
+ assert.NoError(t, h.store.Delete("bar"))
+ h.assertNotFound(t, "foo")
+ h.assertNotFound(t, "bar")
+
+ // test list
+
+ ids, err := h.store.List()
+ assert.NoError(t, err)
+ assert.Empty(t, ids)
+
+ err = h.store.Set("foo", bytes.NewBufferString("FOOFOO"))
+ assert.NoError(t, err)
+ err = h.store.Set("foo", bytes.NewBufferString("FOOFOO"))
+ assert.NoError(t, err)
+ err = h.store.Set("bar", bytes.NewBufferString("FOOFOO"))
+ assert.NoError(t, err)
+
+ ids, err = h.store.List()
+ assert.NoError(t, err)
+ assert.Equal(t, []string{"bar", "foo"}, ids)
+ }
+
+ t.Run("sql", func(t *testing.T) {
+ h := newTestHarness(t)
+ testStore(t, h)
+ })
+}