69 lines
2.5 KiB
Go
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))
|
|
}
|
|
}
|