summaryrefslogtreecommitdiff
path: root/src/post/asset_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/post/asset_test.go')
-rw-r--r--src/post/asset_test.go91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/post/asset_test.go b/src/post/asset_test.go
new file mode 100644
index 0000000..4d62d46
--- /dev/null
+++ b/src/post/asset_test.go
@@ -0,0 +1,91 @@
+package post
+
+import (
+ "bytes"
+ "io"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+type assetTestHarness struct {
+ store AssetStore
+}
+
+func newAssetTestHarness(t *testing.T) *assetTestHarness {
+
+ db := NewInMemSQLDB()
+ t.Cleanup(func() { db.Close() })
+
+ store := NewAssetStore(db)
+
+ return &assetTestHarness{
+ store: store,
+ }
+}
+
+func (h *assetTestHarness) 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 *assetTestHarness) assertNotFound(t *testing.T, id string) {
+ t.Helper()
+ err := h.store.Get(id, io.Discard)
+ assert.ErrorIs(t, ErrAssetNotFound, err)
+}
+
+func TestAssetStore(t *testing.T) {
+
+ testAssetStore := func(t *testing.T, h *assetTestHarness) {
+ 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 := newAssetTestHarness(t)
+ testAssetStore(t, h)
+ })
+}