diff --git a/internal/bootstrap/banner.go b/internal/bootstrap/banner.go new file mode 100644 index 0000000..8eab5c0 --- /dev/null +++ b/internal/bootstrap/banner.go @@ -0,0 +1,43 @@ +package bootstrap + +import ( + "fmt" + "io" + "os" + + "cs-agent/internal/pkg/config" +) + +func printBanner() { + printBannerTo(os.Stdout, config.Current()) +} + +func printBannerTo(w io.Writer, cfg config.Config) { + _, _ = fmt.Fprint(w, renderBanner(cfg)) +} + +func renderBanner(cfg config.Config) string { + port := cfg.Server.Port + if port <= 0 { + port = 8080 + } + dbType := cfg.DB.Type + if dbType == "" { + dbType = "unknown" + } + + return fmt.Sprintf(` + ____ _ _ _ _ ___ +/ ___|| |__ ___| | | / \ |_ _| +\___ \| '_ \ / _ \ | | / _ \ | | + ___) | | | | __/ | | / ___ \ | | +|____/|_| |_|\___|_|_| /_/ \_\___| + +:: Shell AI :: + +Port : %d +DB : %s +Address : http://127.0.0.1:%d + +`, port, dbType, port) +} diff --git a/internal/bootstrap/banner_test.go b/internal/bootstrap/banner_test.go new file mode 100644 index 0000000..044bd2e --- /dev/null +++ b/internal/bootstrap/banner_test.go @@ -0,0 +1,42 @@ +package bootstrap + +import ( + "strings" + "testing" + + "cs-agent/internal/pkg/config" +) + +func TestRenderBanner(t *testing.T) { + got := renderBanner(config.Config{ + Server: config.ServerConfig{Port: 8083}, + DB: config.DBConfig{Type: "sqlite"}, + }) + + expected := []string{ + ":: Shell AI ::", + "Port : 8083", + "DB : sqlite", + "Address : http://127.0.0.1:8083", + } + for _, item := range expected { + if !strings.Contains(got, item) { + t.Fatalf("renderBanner() missing %q in:\n%s", item, got) + } + } +} + +func TestRenderBannerDefaults(t *testing.T) { + got := renderBanner(config.Config{}) + + expected := []string{ + "Port : 8080", + "DB : unknown", + "Address : http://127.0.0.1:8080", + } + for _, item := range expected { + if !strings.Contains(got, item) { + t.Fatalf("renderBanner() missing %q in:\n%s", item, got) + } + } +} diff --git a/internal/bootstrap/server.go b/internal/bootstrap/server.go index 3a006f1..471b76d 100644 --- a/internal/bootstrap/server.go +++ b/internal/bootstrap/server.go @@ -25,6 +25,7 @@ func NewServer() (*gin.Engine, error) { cfg := config.Current() gin.SetMode(gin.ReleaseMode) + printBanner() app := gin.New() app.Use(corsMiddleware())