package config_test import ( "errors" "testing" "go.uber.org/fx" "sneak.berlin/go/dnswatcher/internal/config" "sneak.berlin/go/dnswatcher/internal/globals" "sneak.berlin/go/dnswatcher/internal/logger" ) func TestNewReturnsErrNoTargetsWhenEmpty(t *testing.T) { // Cannot use t.Parallel() because t.Setenv modifies the process // environment. t.Setenv("DNSWATCHER_TARGETS", "") t.Setenv("DNSWATCHER_DATA_DIR", t.TempDir()) var cfg *config.Config app := fx.New( fx.Provide( func() *globals.Globals { return &globals.Globals{ Appname: "dnswatcher-test-empty", } }, logger.New, config.New, ), fx.Populate(&cfg), fx.NopLogger, ) err := app.Err() if err == nil { t.Fatal( "expected error when DNSWATCHER_TARGETS is empty, got nil", ) } if !errors.Is(err, config.ErrNoTargets) { t.Errorf("expected ErrNoTargets, got: %v", err) } } func TestNewSucceedsWithTargets(t *testing.T) { // Cannot use t.Parallel() because t.Setenv modifies the process // environment. t.Setenv("DNSWATCHER_TARGETS", "example.com") t.Setenv("DNSWATCHER_DATA_DIR", t.TempDir()) // Prevent loading a local config file by changing to a temp dir. t.Chdir(t.TempDir()) var cfg *config.Config app := fx.New( fx.Provide( func() *globals.Globals { return &globals.Globals{ Appname: "dnswatcher-test-ok", } }, logger.New, config.New, ), fx.Populate(&cfg), fx.NopLogger, ) err := app.Err() if err != nil { t.Fatalf( "expected no error with valid targets, got: %v", err, ) } if len(cfg.Domains) != 1 || cfg.Domains[0] != "example.com" { t.Errorf( "expected [example.com], got domains=%v", cfg.Domains, ) } }