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  }