A simple way to handle form submissions from static websites.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

151 lines
4.0 KiB

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()
}
})
}