github.com/soulteary/pocket-bookcase@v0.0.0-20240428065142-0b5a9a0fc98a/internal/domains/bookmarks_test.go (about) 1 package domains_test 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/sirupsen/logrus" 8 "github.com/soulteary/pocket-bookcase/internal/config" 9 "github.com/soulteary/pocket-bookcase/internal/database" 10 "github.com/soulteary/pocket-bookcase/internal/dependencies" 11 "github.com/soulteary/pocket-bookcase/internal/domains" 12 "github.com/soulteary/pocket-bookcase/internal/model" 13 "github.com/soulteary/pocket-bookcase/internal/testutil" 14 "github.com/spf13/afero" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestBookmarkDomain(t *testing.T) { 19 fs := afero.NewMemMapFs() 20 21 db, err := database.OpenSQLiteDatabase(context.TODO(), ":memory:") 22 require.NoError(t, err) 23 require.NoError(t, db.Migrate(context.TODO())) 24 25 deps := &dependencies.Dependencies{ 26 Database: db, 27 Config: config.ParseServerConfiguration(context.TODO(), logrus.New()), 28 Log: logrus.New(), 29 Domains: &dependencies.Domains{}, 30 } 31 deps.Domains.Storage = domains.NewStorageDomain(deps, fs) 32 33 fs.MkdirAll("thumb", 0755) 34 fs.Create("thumb/1") 35 fs.MkdirAll("ebook", 0755) 36 fs.Create("ebook/1.epub") 37 fs.MkdirAll("archive", 0755) 38 // TODO: write a valid archive file 39 fs.Create("archive/1") 40 41 domain := domains.NewBookmarksDomain(deps) 42 t.Run("HasEbook", func(t *testing.T) { 43 t.Run("Yes", func(t *testing.T) { 44 require.True(t, domain.HasEbook(&model.BookmarkDTO{ID: 1})) 45 }) 46 t.Run("No", func(t *testing.T) { 47 require.False(t, domain.HasEbook(&model.BookmarkDTO{ID: 2})) 48 }) 49 }) 50 51 t.Run("HasArchive", func(t *testing.T) { 52 t.Run("Yes", func(t *testing.T) { 53 require.True(t, domain.HasArchive(&model.BookmarkDTO{ID: 1})) 54 }) 55 t.Run("No", func(t *testing.T) { 56 require.False(t, domain.HasArchive(&model.BookmarkDTO{ID: 2})) 57 }) 58 }) 59 60 t.Run("HasThumbnail", func(t *testing.T) { 61 t.Run("Yes", func(t *testing.T) { 62 require.True(t, domain.HasThumbnail(&model.BookmarkDTO{ID: 1})) 63 }) 64 t.Run("No", func(t *testing.T) { 65 require.False(t, domain.HasThumbnail(&model.BookmarkDTO{ID: 2})) 66 }) 67 }) 68 69 t.Run("GetBookmark", func(t *testing.T) { 70 t.Run("Success", func(t *testing.T) { 71 _, err := deps.Database.SaveBookmarks(context.TODO(), true, *testutil.GetValidBookmark()) 72 require.NoError(t, err) 73 bookmark, err := domain.GetBookmark(context.Background(), 1) 74 require.NoError(t, err) 75 require.Equal(t, 1, bookmark.ID) 76 77 // Check DTO attributes 78 require.True(t, bookmark.HasEbook) 79 require.True(t, bookmark.HasArchive) 80 }) 81 }) 82 }