package test import ( "RenewCMS/internal/domain/article" "RenewCMS/internal/domain/language" "RenewCMS/internal/domain/transaction" "context" "sync/atomic" ) type mockStartingLanguages struct { confirmed map[uint32]string locked []uint32 failWith error } var _ language.Repository = &mockStartingLanguages{} func (m *mockStartingLanguages) ListBySite(siteID uint32) ([]language.SiteLanguage, error) { return nil, nil } func (m *mockStartingLanguages) ConfirmDefault(siteID uint32) error { return nil } func (m *mockStartingLanguages) LockStartingLanguage(siteID uint32) (string, error) { m.locked = append(m.locked, siteID) if m.failWith != nil { return "", m.failWith } return m.confirmed[siteID], 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) }