package app import ( "github.com/stretchr/testify/assert" "os" "testing" ) func TestNewOptions(t *testing.T) { os.Setenv("DEVELOPMENT", "false") os.Setenv("APP_NAME", "testValidate") os.Setenv("GRPC_URL", ":7113") os.Setenv("CLICKHOUSE_URL", "tcp://127.0.0.1:9000?debug=true") os.Setenv("DB_PATH", "./recover.bolt") os.Setenv("TELEGRAM_TOKEN", "6712573453:AAFqTOsgwe_j48ZQ1GzWKQDT5Nwr-SAWjz8") os.Setenv("TELEGRAM_CHANNEL_ID", "1002217604546") os.Setenv("CLICKHOUSE_TABLE_MAIN_NAME", "test_validator") os.Setenv("ADMIN_HTTP_URL", "127.0.0.1:8000") opts := NewOptions() assert.Equal(t, false, opts.Development) assert.Equal(t, "testValidate", opts.AppName) assert.Equal(t, ":7113", opts.GrpcURL) assert.Equal(t, "tcp://127.0.0.1:9000?debug=true", opts.ClickhouseURL) assert.Equal(t, "./recover.bolt", opts.DBPath) assert.Equal(t, "6712573453:AAFqTOsgwe_j48ZQ1GzWKQDT5Nwr-SAWjz8", opts.TelegramToken) assert.Equal(t, uint64(1002217604546), opts.TelegramChannelID) assert.Equal(t, "test_validator", opts.ClickhouseTableMainName) assert.Equal(t, "127.0.0.1:8000", opts.AdminHttpURL) } func TestOptions_Validate(t *testing.T) { optsMain := Options{ GrpcURL: ":7113", ClickhouseURL: "tcp://127.0.0.1:9000?debug=true", DBPath: "./recover.bolt", TelegramToken: "6712573453:AAFqTOsgwe_j48ZQ1GzWKQDT5Nwr-SAWjz8", TelegramChannelID: 1002217604546, ClickhouseTableMainName: "test_validator", AdminHttpURL: "127.0.0.1:8000", } t.Run("valid configuration", func(t *testing.T) { opts := optsMain err := opts.Validate() assert.NoError(t, err) }) t.Run("missing CLICKHOUSE_TABLE_MAIN_NAME", func(t *testing.T) { opts := optsMain opts.ClickhouseTableMainName = "" err := opts.Validate() assert.EqualError(t, err, "invalid value for DBClickHouseName, some value is empty") }) t.Run("missing GRPC_URL prefix ':'", func(t *testing.T) { opts := optsMain opts.GrpcURL = "7113" err := opts.Validate() assert.EqualError(t, err, "GRPC_URL must start with ':'") }) t.Run("missing ADMIN_HTTP_URL", func(t *testing.T) { opts := optsMain opts.AdminHttpURL = "" err := opts.Validate() assert.EqualError(t, err, "ADMIN_HTTP_URL not be empty") }) t.Run("missing CLICKHOUSE_URL", func(t *testing.T) { opts := optsMain opts.ClickhouseURL = "" err := opts.Validate() assert.EqualError(t, err, "CLICKHOUSE_URL is empty") }) t.Run("invalid DBPath directory", func(t *testing.T) { opts := optsMain opts.DBPath = "/invalid_path/test.db" err := opts.Validate() assert.Contains(t, err.Error(), "unable to create temporary file in directory") }) t.Run("empty Telegram token", func(t *testing.T) { opts := optsMain opts.TelegramToken = "" err := opts.Validate() assert.EqualError(t, err, "TELEGRAM_TOKEN or TELEGRAM_CHANNEL_ID empty") }) t.Run("empty Telegram ChatID", func(t *testing.T) { opts := optsMain opts.TelegramChannelID = 0 err := opts.Validate() assert.EqualError(t, err, "TELEGRAM_TOKEN or TELEGRAM_CHANNEL_ID empty") }) t.Run("invalid CLICKHOUSE_URL - connection error", func(t *testing.T) { opts := optsMain opts.ClickhouseURL = "tcp://invalid:9000?debug=true" err := opts.Validate() assert.Contains(t, err.Error(), "clickhouse ping error") }) }