summaryrefslogtreecommitdiff
path: root/srv/src/post/asset_test.go
blob: 4b88000d99b75ea45cd7d7841757ab41002b437a (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
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) {

	h := newAssetTestHarness(t)

	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")
}