refac: missing mutation tests, spa specs, checks shown to pass, touch targets, catalogue entry, production code

This commit is contained in:
Florian Sylvain committed 2026-11-04 03:04:35 +01:00
1 parent 7c15206170
commit 3e02e14da4
48 files changed
+2173 -83

No files matched your search

+48 -1
View File
@@ -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)