package test import ( "RenewCMS/internal/domain/article" "RenewCMS/internal/domain/language" "RenewCMS/internal/domain/site" "RenewCMS/internal/domain/transaction" "context" "sync/atomic" ) type mockStartingLanguages struct { confirmed map[uint32]string locked []uint32 failWith error removed map[uint32]bool } var _ language.Repository = &mockStartingLanguages{} func (m *mockStartingLanguages) ListBySite(siteID uint32) ([]language.SiteLanguage, error) { return nil, nil } func (m *mockStartingLanguages) MarkConfirmed(siteID uint32, tag string) error { return nil } func (m *mockStartingLanguages) LockSiteLanguages(siteID uint32) ([]language.SiteLanguage, error) { m.locked = append(m.locked, siteID) if m.failWith != nil { return nil, m.failWith } if m.removed[siteID] { return nil, site.ErrSiteNotFound } tag, confirmed := m.confirmed[siteID] if !confirmed || tag == language.Unassigned { return nil, nil } return []language.SiteLanguage{{SiteID: siteID, Tag: tag, IsDefault: true, Enabled: true, Confirmed: true}}, nil } type mockCreateTransactor struct { articles article.Repository languages *mockStartingLanguages runs int } var _ transaction.Transactor = &mockCreateTransactor{} func (m *mockCreateTransactor) Run(ctx context.Context, work func(transaction.Repositories) error) error { m.runs++ return work(transaction.Repositories{Articles: m.articles, Languages: m.languages}) } func passthroughCreateTransactor(articles article.Repository) *mockCreateTransactor { return &mockCreateTransactor{articles: articles, languages: &mockStartingLanguages{confirmed: map[uint32]string{}}} } var fixtureStoryCounter atomic.Uint32 func fixtureStory() uint32 { return 1000 + fixtureStoryCounter.Add(1) }