summaryrefslogtreecommitdiff
path: root/srv/src/post/asset_test.go
blob: 4d62d46a3d653e80f93eaedd3c2a6d6089a00c5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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)
	})
}