refac: missing mutation tests, spa specs, checks shown to pass, touch targets, catalogue entry, production code
This commit is contained in:
1 parent
7c15206170
commit
3e02e14da4
48 files changed
+2173
-83
No files matched your search
@@ -5,10 +5,12 @@ import (
|
||||
"RenewCMS/internal/domain/author"
|
||||
"RenewCMS/internal/domain/localization"
|
||||
"RenewCMS/internal/domain/site"
|
||||
"RenewCMS/internal/domain/transaction"
|
||||
entity "RenewCMS/internal/infrastructure/persistence/models"
|
||||
persistence "RenewCMS/internal/infrastructure/persistence/repositories"
|
||||
"RenewCMS/internal/infrastructure/useCases"
|
||||
"context"
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -25,6 +27,27 @@ type seoIndexEnv struct {
|
||||
siteID uint32
|
||||
}
|
||||
|
||||
var errSEOClearFailed = errors.New("the SEO clear failed")
|
||||
|
||||
type failingSEOClear struct {
|
||||
domainArticle.SEOIndex
|
||||
}
|
||||
|
||||
func (failingSEOClear) MarkSiteSEOStale(uint32) error {
|
||||
return errSEOClearFailed
|
||||
}
|
||||
|
||||
type failingSEOClearTransactor struct {
|
||||
inner transaction.Transactor
|
||||
}
|
||||
|
||||
func (f failingSEOClearTransactor) Run(ctx context.Context, work func(transaction.Repositories) error) error {
|
||||
return f.inner.Run(ctx, func(repositories transaction.Repositories) error {
|
||||
repositories.ArticleSEO = failingSEOClear{repositories.ArticleSEO}
|
||||
return work(repositories)
|
||||
})
|
||||
}
|
||||
|
||||
func newSEOIndexEnv(t *testing.T, open func(*testing.T) *gorm.DB) *seoIndexEnv {
|
||||
t.Helper()
|
||||
db := open(t)
|
||||
@@ -123,6 +146,30 @@ func runArticleSEOIndex(t *testing.T, open func(*testing.T) *gorm.DB) {
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("A site description change whose SEO clear fails saves nothing", func(t *testing.T) {
|
||||
e := newSEOIndexEnv(t, open)
|
||||
created := e.create("en", 0)
|
||||
e.must(e.refresh.RefreshStale())
|
||||
before, err := e.sites.Get(e.siteID)
|
||||
e.must(err)
|
||||
description := "A description that is never saved."
|
||||
update := useCases.NewUpdateSiteUseCase(e.sites, persistence.NewImageRepository(e.db), discardRecorder, failingSEOClearTransactor{persistence.NewTransactor(e.db)})
|
||||
|
||||
_, err = update.Update(context.Background(), e.siteID, site.Patch{DefaultDescription: &description})
|
||||
|
||||
if !errors.Is(err, errSEOClearFailed) {
|
||||
t.Fatalf("err = %v", err)
|
||||
}
|
||||
after, err := e.sites.Get(e.siteID)
|
||||
e.must(err)
|
||||
if after.DefaultDescription != before.DefaultDescription {
|
||||
t.Fatalf("the description %q was saved", after.DefaultDescription)
|
||||
}
|
||||
if e.status(created.ID) == "" {
|
||||
t.Fatal("the stored status was cleared")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("A status computed before a concurrent write is not stored", func(t *testing.T) {
|
||||
e := newSEOIndexEnv(t, open)
|
||||
created := e.create("en", 0)
|
||||
@@ -143,7 +190,7 @@ func runArticleSEOIndex(t *testing.T, open func(*testing.T) *gorm.DB) {
|
||||
english := e.create("en", 0)
|
||||
french := e.create("fr", english.StoryID)
|
||||
description := strings.Repeat("Renovation notes. ", 6)
|
||||
update := useCases.NewUpdateSiteUseCase(e.sites, persistence.NewImageRepository(e.db), discardRecorder, e.articles)
|
||||
update := useCases.NewUpdateSiteUseCase(e.sites, persistence.NewImageRepository(e.db), discardRecorder, persistence.NewTransactor(e.db))
|
||||
_, err := update.Update(context.Background(), e.siteID, site.Patch{DefaultDescription: &description})
|
||||
e.must(err)
|
||||
|
||||
|
||||
Reference in new issue
Block a user