dex/email/mailgun_test.go

77 lines
2 KiB
Go

package email
import (
"strings"
"testing"
"github.com/kylelemons/godebug/pretty"
)
func TestNewEmailConfigFromReader(t *testing.T) {
tests := []struct {
json string
want MailgunEmailerConfig
wantErr bool
wantInitErr bool // want error when calling Emailer() with no fromAddr
}{
{
json: `{"type":"mailgun","id":"mg","privateAPIKey":"private","publicAPIKey":"public","domain":"example.com","from":"admin@example.com"}`,
want: MailgunEmailerConfig{
PrivateAPIKey: "private",
PublicAPIKey: "public",
Domain: "example.com",
FromAddr: "admin@example.com",
},
},
{
json: `{"type":"mailgun","id":"mg","publicAPIKey":"public","domain":"example.com",""}`,
wantErr: true,
},
{
json: `{"type":"mailgun","id":"mg","privateAPIKey":"private","publicAPIKey":"public"}`,
wantErr: true,
},
{
json: `{"type":"mailgun","id":"mg","privateAPIKey":"private","domain":"example.com"}`,
wantErr: true,
},
{
json: `{"type":"mailgun","id":"mg","privateAPIKey":"private","publicAPIKey":"public","domain":"example.com"}`,
want: MailgunEmailerConfig{
PrivateAPIKey: "private",
PublicAPIKey: "public",
Domain: "example.com",
},
// No fromAddr email provided. Calling Emailer("") should error since fromAddr needs to be provided
// in the config or as a command line argument.
wantInitErr: true,
},
}
for i, tt := range tests {
r := strings.NewReader(tt.json)
ec, err := newEmailerConfigFromReader(r)
if tt.wantErr {
if err == nil {
t.Errorf("case %d: want non-nil err.", i)
}
continue
}
if err != nil {
t.Errorf("case %d: want nil err: %v", i, err)
continue
}
if diff := pretty.Compare(tt.want, ec); diff != "" {
t.Errorf("case %d: Compare(want, got): %v", i, diff)
}
_, err = ec.Emailer("")
if err != nil && !tt.wantInitErr {
t.Errorf("case %d: failed to initialize emailer: %v", i, err)
}
if err == nil && tt.wantInitErr {
t.Errorf("case %d: expected error initializing emailer", i)
}
}
}