package main import ( "os" "reflect" "testing" ) func Test_parseConfig(t *testing.T) { t.Run("Default config", func(t *testing.T) { os.Clearenv() cfg, err := parseConfig() if err != nil { t.Error() return } if cfg.Port != 8080 { t.Error("Default Port not 8080") } if len(cfg.HoneyPots) != 1 || cfg.HoneyPots[0] != "_t_email" { t.Error("Default HoneyPots are wrong") } if cfg.SmtpPort != 587 { t.Error("SMTP Port not 587") } if len(cfg.Blacklist) != 2 || cfg.Blacklist[0] != "gambling" || cfg.Blacklist[1] != "casino" { t.Error("Default Blacklist is wrong") } }) t.Run("Correct config parsing", func(t *testing.T) { os.Clearenv() _ = os.Setenv("PORT", "1111") _ = os.Setenv("HONEYPOTS", "pot,abc") _ = os.Setenv("EMAIL_TO", "mail@example.com") _ = os.Setenv("ALLOWED_TO", "mail@example.com,test@example.com") _ = os.Setenv("EMAIL_FROM", "forms@example.com") _ = os.Setenv("SMTP_USER", "test@example.com") _ = os.Setenv("SMTP_PASS", "secret") _ = os.Setenv("SMTP_HOST", "smtp.example.com") _ = os.Setenv("SMTP_PORT", "100") _ = os.Setenv("GOOGLE_API_KEY", "abc") _ = os.Setenv("BLACKLIST", "test,abc") cfg, err := parseConfig() if err != nil { t.Error() return } if !reflect.DeepEqual(cfg.Port, 1111) { t.Error("Port is wrong") } if !reflect.DeepEqual(cfg.HoneyPots, []string{"pot", "abc"}) { t.Error("HoneyPots are wrong") } if !reflect.DeepEqual(cfg.DefaultRecipient, "mail@example.com") { t.Error("DefaultRecipient is wrong") } if !reflect.DeepEqual(cfg.AllowedRecipients, []string{"mail@example.com", "test@example.com"}) { t.Error("AllowedRecipients are wrong") } if !reflect.DeepEqual(cfg.Sender, "forms@example.com") { t.Error("Sender is wrong") } if !reflect.DeepEqual(cfg.SmtpUser, "test@example.com") { t.Error("SMTP user is wrong") } if !reflect.DeepEqual(cfg.SmtpPassword, "secret") { t.Error("SMTP password is wrong") } if !reflect.DeepEqual(cfg.SmtpHost, "smtp.example.com") { t.Error("SMTP host is wrong") } if !reflect.DeepEqual(cfg.SmtpPort, 100) { t.Error("SMTP port is wrong") } if !reflect.DeepEqual(cfg.GoogleApiKey, "abc") { t.Error("Google API Key is wrong") } if !reflect.DeepEqual(cfg.Blacklist, []string{"test", "abc"}) { t.Error("Blacklist is wrong") } }) t.Run("Error when wrong config", func(t *testing.T) { os.Clearenv() _ = os.Setenv("PORT", "ABC") _, err := parseConfig() if err == nil { t.Error() } }) } func Test_checkRequiredConfig(t *testing.T) { validConfig := &config{ Port: 8080, HoneyPots: []string{"_t_email"}, DefaultRecipient: "mail@example.com", AllowedRecipients: []string{"mail@example.com"}, Sender: "forms@example.com", SmtpUser: "test@example.com", SmtpPassword: "secret", SmtpHost: "smtp.example.com", SmtpPort: 587, } t.Run("Valid config", func(t *testing.T) { if true != checkRequiredConfig(validConfig) { t.Error() } }) t.Run("Default recipient missing", func(t *testing.T) { newConfig := *validConfig newConfig.DefaultRecipient = "" if false != checkRequiredConfig(&newConfig) { t.Error() } }) t.Run("Allowed recipients missing", func(t *testing.T) { newConfig := *validConfig newConfig.AllowedRecipients = nil if false != checkRequiredConfig(&newConfig) { t.Error() } }) t.Run("Sender missing", func(t *testing.T) { newConfig := *validConfig newConfig.Sender = "" if false != checkRequiredConfig(&newConfig) { t.Error() } }) t.Run("SMTP user missing", func(t *testing.T) { newConfig := *validConfig newConfig.SmtpUser = "" if false != checkRequiredConfig(&newConfig) { t.Error() } }) t.Run("SMTP password missing", func(t *testing.T) { newConfig := *validConfig newConfig.SmtpPassword = "" if false != checkRequiredConfig(&newConfig) { t.Error() } }) t.Run("SMTP host missing", func(t *testing.T) { newConfig := *validConfig newConfig.SmtpHost = "" if false != checkRequiredConfig(&newConfig) { t.Error() } }) }