193 lines
4.6 KiB
Go
193 lines
4.6 KiB
Go
package infra_test
|
|
|
|
import (
|
|
"owl-blogs/app"
|
|
"owl-blogs/app/repository"
|
|
"owl-blogs/infra"
|
|
"owl-blogs/test"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func setupRepo() repository.EntryRepository {
|
|
db := test.NewMockDb()
|
|
register := app.NewEntryTypeRegistry()
|
|
register.Register(&test.MockEntry{})
|
|
repo := infra.NewEntryRepository(db, register)
|
|
return repo
|
|
}
|
|
|
|
func TestRepoCreate(t *testing.T) {
|
|
repo := setupRepo()
|
|
|
|
entry := &test.MockEntry{}
|
|
now := time.Now()
|
|
entry.SetPublishedAt(&now)
|
|
entry.SetAuthorId("authorId")
|
|
entry.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "str",
|
|
Number: 1,
|
|
Date: now,
|
|
})
|
|
err := repo.Create(entry)
|
|
require.NoError(t, err)
|
|
|
|
entry2, err := repo.FindById(entry.ID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, entry.ID(), entry2.ID())
|
|
require.Equal(t, entry.Content(), entry2.Content())
|
|
require.Equal(t, entry.AuthorId(), entry2.AuthorId())
|
|
require.Equal(t, entry.PublishedAt().Unix(), entry2.PublishedAt().Unix())
|
|
meta := entry.MetaData().(*test.MockEntryMetaData)
|
|
meta2 := entry2.MetaData().(*test.MockEntryMetaData)
|
|
require.Equal(t, meta.Str, meta2.Str)
|
|
require.Equal(t, meta.Number, meta2.Number)
|
|
require.Equal(t, meta.Date.Unix(), meta2.Date.Unix())
|
|
}
|
|
|
|
func TestRepoDelete(t *testing.T) {
|
|
repo := setupRepo()
|
|
|
|
entry := &test.MockEntry{}
|
|
now := time.Now()
|
|
entry.SetPublishedAt(&now)
|
|
entry.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "str",
|
|
Number: 1,
|
|
Date: now,
|
|
})
|
|
err := repo.Create(entry)
|
|
require.NoError(t, err)
|
|
|
|
err = repo.Delete(entry)
|
|
require.NoError(t, err)
|
|
|
|
_, err = repo.FindById("id")
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestRepoFindAll(t *testing.T) {
|
|
repo := setupRepo()
|
|
|
|
entry := &test.MockEntry{}
|
|
now := time.Now()
|
|
entry.SetPublishedAt(&now)
|
|
entry.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "str",
|
|
Number: 1,
|
|
Date: now,
|
|
})
|
|
err := repo.Create(entry)
|
|
|
|
require.NoError(t, err)
|
|
|
|
entry2 := &test.MockEntry{}
|
|
now2 := time.Now()
|
|
entry2.SetPublishedAt(&now2)
|
|
entry2.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "str",
|
|
Number: 1,
|
|
Date: now,
|
|
})
|
|
|
|
err = repo.Create(entry2)
|
|
require.NoError(t, err)
|
|
|
|
entries, err := repo.FindAll(nil)
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(entries))
|
|
|
|
entries, err = repo.FindAll(&[]string{"MockEntry"})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(entries))
|
|
|
|
entries, err = repo.FindAll(&[]string{"MockEntry2"})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 0, len(entries))
|
|
|
|
}
|
|
|
|
func TestRepoUpdate(t *testing.T) {
|
|
repo := setupRepo()
|
|
|
|
entry := &test.MockEntry{}
|
|
now := time.Now()
|
|
entry.SetPublishedAt(&now)
|
|
entry.SetAuthorId("authorId")
|
|
entry.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "str",
|
|
Number: 1,
|
|
Date: now,
|
|
})
|
|
err := repo.Create(entry)
|
|
require.NoError(t, err)
|
|
|
|
entry2 := &test.MockEntry{}
|
|
now2 := time.Now()
|
|
entry2.SetPublishedAt(&now2)
|
|
entry.SetAuthorId("authorId2")
|
|
entry2.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "str2",
|
|
Number: 2,
|
|
Date: now2,
|
|
})
|
|
err = repo.Create(entry2)
|
|
require.NoError(t, err)
|
|
err = repo.Update(entry2)
|
|
require.NoError(t, err)
|
|
|
|
entry3, err := repo.FindById(entry2.ID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, entry3.Content(), entry2.Content())
|
|
require.Equal(t, entry3.PublishedAt().Unix(), entry2.PublishedAt().Unix())
|
|
require.Equal(t, entry3.AuthorId(), entry2.AuthorId())
|
|
meta := entry3.MetaData().(*test.MockEntryMetaData)
|
|
meta2 := entry2.MetaData().(*test.MockEntryMetaData)
|
|
require.Equal(t, meta.Str, meta2.Str)
|
|
require.Equal(t, meta.Number, meta2.Number)
|
|
require.Equal(t, meta.Date.Unix(), meta2.Date.Unix())
|
|
}
|
|
|
|
func TestRepoNoSideEffect(t *testing.T) {
|
|
repo := setupRepo()
|
|
|
|
entry1 := &test.MockEntry{}
|
|
now1 := time.Now()
|
|
entry1.SetPublishedAt(&now1)
|
|
entry1.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "1",
|
|
Number: 1,
|
|
Date: now1,
|
|
})
|
|
|
|
err := repo.Create(entry1)
|
|
require.NoError(t, err)
|
|
|
|
entry2 := &test.MockEntry{}
|
|
now2 := time.Now()
|
|
entry2.SetPublishedAt(&now2)
|
|
entry2.SetMetaData(&test.MockEntryMetaData{
|
|
Str: "2",
|
|
Number: 2,
|
|
Date: now2,
|
|
})
|
|
err = repo.Create(entry2)
|
|
require.NoError(t, err)
|
|
|
|
r1, err := repo.FindById(entry1.ID())
|
|
require.NoError(t, err)
|
|
r2, err := repo.FindById(entry2.ID())
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, r1.MetaData().(*test.MockEntryMetaData).Str, "1")
|
|
require.Equal(t, r1.MetaData().(*test.MockEntryMetaData).Number, 1)
|
|
require.Equal(t, r1.MetaData().(*test.MockEntryMetaData).Date.Unix(), now1.Unix())
|
|
|
|
require.Equal(t, r2.MetaData().(*test.MockEntryMetaData).Str, "2")
|
|
require.Equal(t, r2.MetaData().(*test.MockEntryMetaData).Number, 2)
|
|
require.Equal(t, r2.MetaData().(*test.MockEntryMetaData).Date.Unix(), now2.Unix())
|
|
|
|
}
|