Files
go-caatsm/cmd/main/main_test.go
T

115 lines
3.2 KiB
Go

package main
import (
"flag"
"time"
appconfig "caatsm/internal/infra/config"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/urfave/cli/v2"
)
var _ = Describe("CLI overrides", func() {
var (
cfg *appconfig.Config
flagSet *flag.FlagSet
args []string
)
BeforeEach(func() {
cfg = &appconfig.Config{
NATS: appconfig.NATSConfig{
URL: "nats://base:4222",
Stream: "BASE_STREAM",
Consumer: "base-consumer",
},
Subscription: appconfig.SubscriptionConfig{
Topic: "base.subject",
},
Publisher: appconfig.PublisherConfig{
Topic: "base.publisher",
},
Postgres: appconfig.PostgresConfig{
URL: "postgres://base",
},
Log: appconfig.LogConfig{
Level: "info",
},
Telemetry: appconfig.TelemetryConfig{
Enabled: false,
Endpoint: "",
Insecure: false,
},
}
flagSet = flag.NewFlagSet("test", flag.ContinueOnError)
flagSet.String("nats-url", "", "")
flagSet.String("subject", "", "")
flagSet.String("stream", "", "")
flagSet.String("consumer", "", "")
flagSet.String("publisher-topic", "", "")
flagSet.String("postgres-url", "", "")
flagSet.String("log-level", "", "")
flagSet.String("replay-from", "", "")
flagSet.Duration("ack-wait", 0, "")
flagSet.Bool("telemetry-enabled", false, "")
flagSet.String("telemetry-endpoint", "", "")
flagSet.Bool("telemetry-insecure", false, "")
args = []string{
"--nats-url", "nats://override:4222",
"--subject", "override.subject",
"--stream", "STREAM",
"--consumer", "CONSUMER",
"--publisher-topic", "pub.topic",
"--postgres-url", "postgres://override",
"--log-level", "debug",
"--replay-from", "seq:42",
"--ack-wait", "45s",
"--telemetry-enabled",
"--telemetry-endpoint", "http://otel:4318",
"--telemetry-insecure",
}
})
JustBeforeEach(func() {
err := flagSet.Parse(args)
Expect(err).NotTo(HaveOccurred())
ctx := cli.NewContext(cli.NewApp(), flagSet, nil)
applyCLIOverrides(cfg, ctx)
})
It("applies overrides for all critical flags", func() {
Expect(cfg.NATS.URL).To(Equal("nats://override:4222"))
Expect(cfg.Subscription.Topic).To(Equal("override.subject"))
Expect(cfg.NATS.Stream).To(Equal("STREAM"))
Expect(cfg.NATS.Consumer).To(Equal("CONSUMER"))
Expect(cfg.Publisher.Topic).To(Equal("pub.topic"))
Expect(cfg.Postgres.URL).To(Equal("postgres://override"))
Expect(cfg.Log.Level).To(Equal("debug"))
Expect(cfg.NATS.ConsumerRules.DeliverPolicy).To(Equal("sequence"))
Expect(cfg.NATS.ConsumerRules.StartSequence).To(Equal(uint64(42)))
Expect(cfg.NATS.ConsumerRules.AckWait).To(Equal(45 * time.Second))
Expect(cfg.Telemetry.Enabled).To(BeTrue())
Expect(cfg.Telemetry.Endpoint).To(Equal("http://otel:4318"))
Expect(cfg.Telemetry.Insecure).To(BeTrue())
})
Context("with time-based replay override", func() {
BeforeEach(func() {
args = []string{
"--replay-from", "time:2024-11-15T08:00:00Z",
}
})
It("configures deliver policy and start time", func() {
Expect(cfg.NATS.ConsumerRules.DeliverPolicy).To(Equal("time"))
Expect(cfg.NATS.ConsumerRules.StartTime).To(Equal("2024-11-15T08:00:00Z"))
Expect(cfg.NATS.ConsumerRules.StartSequence).To(Equal(uint64(0)))
})
})
})