You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
1.9 KiB
92 lines
1.9 KiB
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)
|
|
})
|
|
}
|
|
|