Files
RenewCMS/test/article_list_stories_usecase_test.go
T

69 lines
2.5 KiB
Go

package test
import (
"testing"
"RenewCMS/internal/domain/article"
"RenewCMS/internal/infrastructure/useCases"
)
func TestListStoriesPageSuggestionCounts(t *testing.T) {
cases := []struct {
name string
articles []article.Article
want int
}{
{"versions of one story count once", []article.Article{
{ID: 1, StoryID: 10, SiteID: 1, IsOnline: true},
{ID: 2, StoryID: 10, SiteID: 1, IsOnline: true},
}, 1},
{"stories without an id count individually", []article.Article{
{ID: 1, StoryID: 0, SiteID: 1, IsOnline: true},
{ID: 2, StoryID: 0, SiteID: 1, IsOnline: true},
{ID: 3, StoryID: 10, SiteID: 1, IsOnline: true},
}, 3},
{"offline versions are not visible to a reader", []article.Article{
{ID: 1, StoryID: 10, SiteID: 1, IsOnline: false},
}, 0},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
repo := newMockArticleRepo()
for _, a := range c.articles {
repo.articles[a.ID] = a
}
uc := useCases.NewListArticlesUseCase(repo, &fakeBodyRenderer{}, plainSites(), newFakeLocalizationStore(repo))
page, err := uc.ListStoriesPage(useCases.ListStoriesCommand{Page: 1, Size: 10})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if page.Counts.Suggestions != c.want {
t.Fatalf("suggestions = %d, want %d", page.Counts.Suggestions, c.want)
}
})
}
}
func TestListArticlesPageSEOFilterAndSuggestionCount(t *testing.T) {
repo := newMockArticleRepo()
for id := uint32(1); id <= 3; id++ {
repo.articles[id] = article.Article{ID: id, StoryID: id, SiteID: 1, IsOnline: true}
}
uc := useCases.NewListArticlesUseCase(repo, &fakeBodyRenderer{}, plainSites(), plainLocalization())
page, err := uc.ListArticlesPage(useCases.ListArticlesCommand{Page: 2, Size: 2, SEO: article.SEOStatusSuggestions})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if page.Total != 3 || len(page.Items) != 1 || page.Counts.Suggestions != 3 {
t.Fatalf("total=%d items=%d suggestions=%d, want 3/1/3", page.Total, len(page.Items), page.Counts.Suggestions)
}
beyond, _ := uc.ListArticlesPage(useCases.ListArticlesCommand{Page: 3, Size: 2, SEO: article.SEOStatusSuggestions})
if len(beyond.Items) != 0 || beyond.Total != 3 {
t.Fatalf("beyond: items=%d total=%d, want 0/3", len(beyond.Items), beyond.Total)
}
none, _ := uc.ListArticlesPage(useCases.ListArticlesCommand{Page: 1, Size: 2, SEO: article.SEOStatusReady})
if none.Total != 0 || len(none.Items) != 0 {
t.Fatalf("ready: total=%d items=%d, want 0/0", none.Total, len(none.Items))
}
}