package main import ( "os" "reflect" "strings" "testing" "time" ) func Test_findRecipient(t *testing.T) { prepare := func() { os.Clearenv() _ = os.Setenv("ALLOWED_TO", "mail@example.com,test@example.com") _ = os.Setenv("EMAIL_TO", "mail@example.com") appConfig, _ = parseConfig() } t.Run("No recipient specified", func(t *testing.T) { prepare() values := &FormValues{} result := findRecipient(values) if result != "mail@example.com" { t.Error() } }) t.Run("Multiple recipients specified", func(t *testing.T) { prepare() values := &FormValues{ "_to": {"abc@example.com", "def@example.com"}, } result := findRecipient(values) if result != "mail@example.com" { t.Error() } }) t.Run("Allowed recipient specified", func(t *testing.T) { prepare() values := &FormValues{ "_to": {"test@example.com"}, } result := findRecipient(values) if result != "test@example.com" { t.Error() } }) t.Run("Forbidden recipient specified", func(t *testing.T) { prepare() values := &FormValues{ "_to": {"forbidden@example.com"}, } result := findRecipient(values) if result != "mail@example.com" { t.Error() } }) } func Test_findFormName(t *testing.T) { t.Run("No form name", func(t *testing.T) { if "a form" != findFormName(&FormValues{}) { t.Error() } }) t.Run("Multiple form names", func(t *testing.T) { if "a form" != findFormName(&FormValues{"_formName": {"Test", "ABC"}}) { t.Error() } }) t.Run("Form name", func(t *testing.T) { if "Test" != findFormName(&FormValues{"_formName": {"Test"}}) { t.Error() } }) } func Test_findReplyTo(t *testing.T) { t.Run("No replyTo", func(t *testing.T) { if "" != findReplyTo(&FormValues{}) { t.Error() } }) t.Run("Multiple replyTo", func(t *testing.T) { if "" != findReplyTo(&FormValues{"_replyTo": {"test@example.com", "test2@example.com"}}) { t.Error() } }) t.Run("replyTo", func(t *testing.T) { if "test@example.com" != findReplyTo(&FormValues{"_replyTo": {"test@example.com"}}) { t.Error() } }) } func Test_removeMetaValues(t *testing.T) { t.Run("Remove meta values", func(t *testing.T) { result := removeMetaValues(&FormValues{ "_test": {"abc"}, "test": {"def"}, }) want := FormValues{ "test": {"def"}, } if !reflect.DeepEqual(*result, want) { t.Error() } }) } func Test_buildMessage(t *testing.T) { t.Run("Test message", func(t *testing.T) { os.Clearenv() _ = os.Setenv("EMAIL_TO", "mail@example.com") _ = os.Setenv("ALLOWED_TO", "mail@example.com,test@example.com") _ = os.Setenv("EMAIL_FROM", "forms@example.com") appConfig, _ = parseConfig() values := &FormValues{ "_formName": {"Testform"}, "_replyTo": {"reply@example.com"}, "Testkey": {"Testvalue"}, "Another Key": {"Test", "ABC"}, } date := time.Now() result := buildMessage("test@example.com", date, values) if !strings.Contains(result, "Reply-To: reply@example.com") { t.Error() } if !strings.Contains(result, "Subject: New submission on Testform") { t.Error() } if !strings.Contains(result, "Testkey: Testvalue") { t.Error() } if !strings.Contains(result, "Another Key: Test, ABC") { t.Error() } }) }