Skip to content

Commit

Permalink
fixtures: added post processors to loaders;
Browse files Browse the repository at this point in the history
  • Loading branch information
Jan Kamieth committed Jan 29, 2025
1 parent afa1423 commit 034111f
Show file tree
Hide file tree
Showing 13 changed files with 96 additions and 29 deletions.
1 change: 1 addition & 0 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ jobs:
uses: actions/checkout@v4

- name: Execute terraform fmt -check -recursive .
uses: dflook/terraform-fmt@v1
run: terraform fmt -check -recursive .

go-fumpt:
Expand Down
14 changes: 12 additions & 2 deletions pkg/application/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,14 +174,24 @@ func WithHttpServerShares(app *App) {
})
}

func WithFixtureSetFactory(group string, factory fixtures.FixtureSetsFactory) Option {
func WithFixtureSetFactory(group string, factory fixtures.FixtureSetsFactory, postprocessorFactories ...fixtures.PostProcessorFactory) Option {
return func(app *App) {
app.addKernelOption(func(config cfg.GosoConf) kernelPkg.Option {
return kernelPkg.WithMiddlewareFactory(fixtures.KernelMiddlewareLoader(group, factory), kernelPkg.PositionEnd)
return kernelPkg.WithMiddlewareFactory(fixtures.KernelMiddlewareLoader(group, factory, postprocessorFactories...), kernelPkg.PositionEnd)
})
}
}

func WithFixtureSetFactories(factories map[string]fixtures.FixtureSetsFactory, postprocessorFactories ...fixtures.PostProcessorFactory) Option {
return func(app *App) {
for group, factory := range factories {
app.addKernelOption(func(config cfg.GosoConf) kernelPkg.Option {
return kernelPkg.WithMiddlewareFactory(fixtures.KernelMiddlewareLoader(group, factory, postprocessorFactories...), kernelPkg.PositionEnd)
})
}
}
}

func WithKernelExitHandler(handler kernelPkg.ExitHandler) Option {
return func(app *App) {
app.addKernelOption(func(config cfg.GosoConf) kernelPkg.Option {
Expand Down
7 changes: 5 additions & 2 deletions pkg/fixtures/kernel_middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/justtrackio/gosoline/pkg/log"
)

func KernelMiddlewareLoader(group string, factory FixtureSetsFactory) kernel.MiddlewareFactory {
func KernelMiddlewareLoader(group string, factory FixtureSetsFactory, postProcessorFactories ...PostProcessorFactory) kernel.MiddlewareFactory {
return func(ctx context.Context, config cfg.Config, logger log.Logger) (kernel.Middleware, error) {
settings := unmarshalFixtureLoaderSettings(config)
logger = logger.WithChannel("fixtures").WithFields(map[string]any{
Expand All @@ -21,9 +21,12 @@ func KernelMiddlewareLoader(group string, factory FixtureSetsFactory) kernel.Mid
}

var err error
var loader FixtureLoader
var fixtureSets []FixtureSet

loader := NewFixtureLoader(ctx, config, logger)
if loader, err = NewFixtureLoader(ctx, config, logger, postProcessorFactories...); err != nil {
return nil, fmt.Errorf("could not create fixture loader: %w", err)
}

if fixtureSets, err = factory(ctx, config, logger, group); err != nil {
return nil, fmt.Errorf("can not build fixture sets: %w", err)
Expand Down
29 changes: 23 additions & 6 deletions pkg/fixtures/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,28 @@ import (
)

type fixtureLoader struct {
logger log.Logger
settings *fixtureLoaderSettings
logger log.Logger
postProcessors []PostProcessor
settings *fixtureLoaderSettings
}

func NewFixtureLoader(ctx context.Context, config cfg.Config, logger log.Logger) FixtureLoader {
func NewFixtureLoader(ctx context.Context, config cfg.Config, logger log.Logger, postProcessorFactories ...PostProcessorFactory) (FixtureLoader, error) {
var err error

settings := unmarshalFixtureLoaderSettings(config)
postProcessors := make([]PostProcessor, len(postProcessorFactories))

return &fixtureLoader{
logger: logger.WithChannel("fixtures"),
settings: settings,
for i, postprocessorFactory := range postProcessorFactories {
if postProcessors[i], err = postprocessorFactory(ctx, config, logger); err != nil {
return nil, fmt.Errorf("can not build fixture post processor #%d: %w", i, err)
}
}

return &fixtureLoader{
logger: logger.WithChannel("fixtures"),
postProcessors: postProcessors,
settings: settings,
}, nil
}

func (f *fixtureLoader) Load(ctx context.Context, group string, fixtureSets []FixtureSet) error {
Expand Down Expand Up @@ -53,5 +64,11 @@ func (f *fixtureLoader) Load(ctx context.Context, group string, fixtureSets []Fi
}
}

for _, processor := range f.postProcessors {
if err := processor.Process(ctx); err != nil {
return fmt.Errorf("can not post process fixtures: %w", err)
}
}

return nil
}
4 changes: 2 additions & 2 deletions pkg/fixtures/loader_noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ type noopFixtureLoader struct {
settings *fixtureLoaderSettings
}

func NewFixtureLoader(ctx context.Context, config cfg.Config, logger log.Logger) FixtureLoader {
func NewFixtureLoader(ctx context.Context, config cfg.Config, logger log.Logger, postProcessorFactories ...PostProcessorFactory) (FixtureLoader, error) {
settings := unmarshalFixtureLoaderSettings(config)

return &noopFixtureLoader{
logger: logger.WithChannel("fixture_loader"),
settings: settings,
}
}, nil
}

func (n *noopFixtureLoader) Load(ctx context.Context, group string, fixtureSets []FixtureSet) error {
Expand Down
14 changes: 14 additions & 0 deletions pkg/fixtures/post_processor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package fixtures

import (
"context"

"github.com/justtrackio/gosoline/pkg/cfg"
"github.com/justtrackio/gosoline/pkg/log"
)

type PostProcessor interface {
Process(ctx context.Context) error
}

type PostProcessorFactory func(ctx context.Context, config cfg.Config, logger log.Logger) (PostProcessor, error)
5 changes: 4 additions & 1 deletion pkg/test/env/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,10 @@ func (e *Environment) init(options ...Option) error {
e.logger = logger
e.config = config
e.filesystem = newFilesystem(e.t)
e.fixtureLoader = fixtures.NewFixtureLoader(e.ctx, e.config, e.logger)

if e.fixtureLoader, err = fixtures.NewFixtureLoader(e.ctx, e.config, e.logger); err != nil {
return fmt.Errorf("can not create fixture loader: %w", err)
}

return nil
}
Expand Down
3 changes: 2 additions & 1 deletion test/db/migration-golang-migrate/mysql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ func (s *MysqlTestSuite) TestPlainFixturesMysql() {
envLogger := s.Env().Logger()
envClient := s.Env().MySql("default").Client()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.provideFixtureSets()
s.NoError(err)
Expand Down
3 changes: 2 additions & 1 deletion test/db/migration-goose/mysql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ func (s *MysqlTestSuite) TestPlainFixturesMysql() {
envLogger := s.Env().Logger()
envClient := s.Env().MySql("default").Client()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.provideFixtureSets()
s.NoError(err)
Expand Down
12 changes: 8 additions & 4 deletions test/fixtures/dynamodb/dynamodb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ func (s *DynamoDbSuite) TestDynamoDb() {
envConfig := s.Env().Config()
envLogger := s.Env().Logger()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.dynamoDbFixtureSet1()
s.NoError(err)
Expand Down Expand Up @@ -91,7 +92,8 @@ func (s *DynamoDbSuite) TestDynamoDbWithPurge() {
envConfig := s.Env().Config()
envLogger := s.Env().Logger()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.dynamoDbFixtureSet1()
s.NoError(err)
Expand Down Expand Up @@ -173,7 +175,8 @@ func (s *DynamoDbSuite) TestDynamoDbKvStore() {
envConfig := s.Env().Config()
envLogger := s.Env().Logger()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.dynamoDbKvStoreFixtureSet1()
s.NoError(err)
Expand Down Expand Up @@ -215,7 +218,8 @@ func (s *DynamoDbSuite) TestDynamoDbKvStoreWithPurge() {
envConfig := s.Env().Config()
envLogger := s.Env().Logger()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.dynamoDbKvStoreFixtureSet1()
s.NoError(err)
Expand Down
3 changes: 2 additions & 1 deletion test/fixtures/kvstore/configurable_kvstore_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ func (s *ConfigurableKvStoreTestSuite) TestConfigurableKvStore() {
envConfig := s.Env().Config()
envLogger := s.Env().Logger()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.provideFixtures()
s.NoError(err)
Expand Down
18 changes: 13 additions & 5 deletions test/fixtures/mysql/mysql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ func (s *MysqlTestSuite) TestOrmFixturesMysql() {
envContext := s.Env().Context()
envClient := s.Env().MySql("default").Client()

loader := s.buildFixtureLoader(envContext)
loader, err := s.buildFixtureLoader(envContext)
s.NoError(err)

fss, err := s.provideMysqlOrmFixtureSets()
s.NoError(err)

Expand All @@ -58,7 +60,9 @@ func (s *MysqlTestSuite) TestPlainFixturesMysql() {
envContext := s.Env().Context()
envClient := s.Env().MySql("default").Client()

loader := s.buildFixtureLoader(envContext)
loader, err := s.buildFixtureLoader(envContext)
s.NoError(err)

fss, err := s.provideMysqlPlainFixtureSets()
s.NoError(err)

Expand All @@ -73,7 +77,9 @@ func (s *MysqlTestSuite) TestPurgedOrmFixturesMysql() {
envContext := s.Env().Context()
envClient := s.Env().MySql("default").Client()

loader := s.buildFixtureLoader(envContext)
loader, err := s.buildFixtureLoader(envContext)
s.NoError(err)

fss, err := s.provideMysqlOrmFixtureSets()
s.NoError(err)

Expand All @@ -98,7 +104,9 @@ func (s *MysqlTestSuite) TestPurgedPlainFixturesMysql() {
envLogger := s.Env().Logger()
envClient := s.Env().MySql("default").Client()

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.provideMysqlPlainFixtureSets()
s.NoError(err)

Expand All @@ -117,7 +125,7 @@ func (s *MysqlTestSuite) TestPurgedPlainFixturesMysql() {
gosoAssert.SqlColumnHasSpecificValue(s.T(), envClient, "mysql_plain_writer_test", "name", "purgedBefore")
}

func (s *MysqlTestSuite) buildFixtureLoader(ctx context.Context) fixtures.FixtureLoader {
func (s *MysqlTestSuite) buildFixtureLoader(ctx context.Context) (fixtures.FixtureLoader, error) {
envConfig := s.Env().Config()
envLogger := s.Env().Logger()

Expand Down
12 changes: 8 additions & 4 deletions test/fixtures/redis/redis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ func (s *RedisTestSuite) TestRedis() {
s.NoError(err)
s.Equal("OK", result)

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fs1, err := s.provideRedisOpSetFixtureSet()
s.NoError(err)
Expand Down Expand Up @@ -80,7 +81,8 @@ func (s *RedisTestSuite) TestRedisWithPurge() {
s.NoError(err)
s.Equal("OK", result)

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fs1, err := s.provideRedisOpSetFixtureSet()
s.NoError(err)
Expand Down Expand Up @@ -135,7 +137,8 @@ func (s *RedisTestSuite) TestRedisKvStore() {
s.NoError(err)
s.Equal("OK", result)

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.provideKvStoreFixtureSet()
s.NoError(err)
Expand All @@ -161,7 +164,8 @@ func (s *RedisTestSuite) TestRedisKvStoreWithPurge() {
s.NoError(err)
s.Equal("OK", result)

loader := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
loader, err := fixtures.NewFixtureLoader(envContext, envConfig, envLogger)
s.NoError(err)

fss, err := s.provideKvStoreFixtureSet()
s.NoError(err)
Expand Down

0 comments on commit 034111f

Please # to comment.