Implement mailto barcodes and corresponding test
This commit is contained in:
parent
d07ccd7038
commit
cfb0d4ebc6
48
formatting/email.go
Normal file
48
formatting/email.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package formatting
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
type EMail struct {
|
||||||
|
Address string `json:"address,omitempty"`
|
||||||
|
Cc *string `json:"cc,omitempty"`
|
||||||
|
Bcc *string `json:"bcc,omitempty"`
|
||||||
|
Subject *string `json:"subject,omitempty"`
|
||||||
|
Content *string `json:"content,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func formatEMail(input string) (string, error) {
|
||||||
|
var email EMail
|
||||||
|
err := json.Unmarshal([]byte(input), &email)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
query := url.Values{}
|
||||||
|
|
||||||
|
if email.Subject != nil {
|
||||||
|
query.Add("subject", *email.Subject)
|
||||||
|
}
|
||||||
|
|
||||||
|
if email.Cc != nil {
|
||||||
|
query.Add("cc", *email.Cc)
|
||||||
|
}
|
||||||
|
|
||||||
|
if email.Bcc != nil {
|
||||||
|
query.Add("bcc", *email.Bcc)
|
||||||
|
}
|
||||||
|
|
||||||
|
if email.Content != nil {
|
||||||
|
query.Add("body", *email.Content)
|
||||||
|
}
|
||||||
|
|
||||||
|
barcodeString := "mailto:" + email.Address
|
||||||
|
|
||||||
|
if len(query) > 0 {
|
||||||
|
barcodeString += "?" + query.Encode()
|
||||||
|
}
|
||||||
|
|
||||||
|
return barcodeString, err
|
||||||
|
}
|
48
formatting/email_test.go
Normal file
48
formatting/email_test.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package formatting
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestFormatEmail(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
inputJSON string
|
||||||
|
expectedURL string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
inputJSON: `{
|
||||||
|
"address": "testing@example.com"
|
||||||
|
}`,
|
||||||
|
expectedURL: "mailto:testing@example.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
inputJSON: `{
|
||||||
|
"address": "testing@example.com",
|
||||||
|
"subject": "Hello",
|
||||||
|
"cc": "cc@example.com"
|
||||||
|
}`,
|
||||||
|
expectedURL: "mailto:testing@example.com?cc=cc%40example.com&subject=Hello",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
inputJSON: `{
|
||||||
|
"address": "testing@example.com",
|
||||||
|
"subject": "Subject",
|
||||||
|
"cc": "cc@example.com",
|
||||||
|
"bcc": "bcc@example.com",
|
||||||
|
"content": "this is email content"
|
||||||
|
}`,
|
||||||
|
expectedURL: "mailto:testing@example.com?bcc=bcc%40example.com&body=this+is+email+content&cc=cc%40example.com&subject=Subject",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, testCase := range testCases {
|
||||||
|
result, err := formatEMail(testCase.inputJSON)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Unexpected Error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if result != testCase.expectedURL {
|
||||||
|
t.Errorf("Input JSON: \n%s\n\nExpected: %s\n\n Got: %s", testCase.inputJSON, testCase.expectedURL, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user