forked from mystiq/dex
205 lines
4.8 KiB
Go
205 lines
4.8 KiB
Go
// +build acceptance,spendMoney
|
|
|
|
package acceptance
|
|
|
|
import (
|
|
"fmt"
|
|
mailgun "github.com/mailgun/mailgun-go"
|
|
"testing"
|
|
)
|
|
|
|
func setup(t *testing.T) (mailgun.Mailgun, string) {
|
|
domain := reqEnv(t, "MG_DOMAIN")
|
|
apiKey := reqEnv(t, "MG_API_KEY")
|
|
mg := mailgun.NewMailgun(domain, apiKey, "")
|
|
|
|
address := fmt.Sprintf("list5@%s", domain)
|
|
_, err := mg.CreateList(mailgun.List{
|
|
Address: address,
|
|
Name: address,
|
|
Description: "TestMailingListMembers-related mailing list",
|
|
AccessLevel: mailgun.Members,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return mg, address
|
|
}
|
|
|
|
func teardown(t *testing.T, mg mailgun.Mailgun, address string) {
|
|
err := mg.DeleteList(address)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestMailingListMembers(t *testing.T) {
|
|
mg, address := setup(t)
|
|
defer teardown(t, mg, address)
|
|
|
|
var countPeople = func() int {
|
|
n, _, err := mg.GetMembers(mailgun.DefaultLimit, mailgun.DefaultSkip, mailgun.All, address)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return n
|
|
}
|
|
|
|
startCount := countPeople()
|
|
protoJoe := mailgun.Member{
|
|
Address: "joe@example.com",
|
|
Name: "Joe Example",
|
|
Subscribed: mailgun.Subscribed,
|
|
}
|
|
err := mg.CreateMember(true, address, protoJoe)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
newCount := countPeople()
|
|
if newCount <= startCount {
|
|
t.Fatalf("Expected %d people subscribed; got %d", startCount+1, newCount)
|
|
}
|
|
|
|
theMember, err := mg.GetMemberByAddress("joe@example.com", address)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if (theMember.Address != protoJoe.Address) ||
|
|
(theMember.Name != protoJoe.Name) ||
|
|
(*theMember.Subscribed != *protoJoe.Subscribed) ||
|
|
(len(theMember.Vars) != 0) {
|
|
t.Fatalf("Unexpected Member: Expected [%#v], Got [%#v]", protoJoe, theMember)
|
|
}
|
|
|
|
_, err = mg.UpdateMember("joe@example.com", address, mailgun.Member{
|
|
Name: "Joe Cool",
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
theMember, err = mg.GetMemberByAddress("joe@example.com", address)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if theMember.Name != "Joe Cool" {
|
|
t.Fatal("Expected Joe Cool; got " + theMember.Name)
|
|
}
|
|
|
|
err = mg.DeleteMember("joe@example.com", address)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if countPeople() != startCount {
|
|
t.Fatalf("Expected %d people; got %d instead", startCount, countPeople())
|
|
}
|
|
|
|
err = mg.CreateMemberList(nil, address, []interface{}{
|
|
mailgun.Member{
|
|
Address: "joe.user1@example.com",
|
|
Name: "Joe's debugging account",
|
|
Subscribed: mailgun.Unsubscribed,
|
|
},
|
|
mailgun.Member{
|
|
Address: "Joe Cool <joe.user2@example.com>",
|
|
Name: "Joe's Cool Account",
|
|
Subscribed: mailgun.Subscribed,
|
|
},
|
|
mailgun.Member{
|
|
Address: "joe.user3@example.com",
|
|
Vars: map[string]interface{}{
|
|
"packet-email": "KW9ABC @ BOGBBS-4.#NCA.CA.USA.NOAM",
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
theMember, err = mg.GetMemberByAddress("joe.user2@example.com", address)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if theMember.Name != "Joe's Cool Account" {
|
|
t.Fatalf("Expected Joe's Cool Account; got %s", theMember.Name)
|
|
}
|
|
if theMember.Subscribed != nil {
|
|
if *theMember.Subscribed != true {
|
|
t.Fatalf("Expected subscribed to be true; got %v", *theMember.Subscribed)
|
|
}
|
|
} else {
|
|
t.Fatal("Expected some kind of subscription status; got nil.")
|
|
}
|
|
}
|
|
|
|
func TestMailingLists(t *testing.T) {
|
|
domain := reqEnv(t, "MG_DOMAIN")
|
|
apiKey := reqEnv(t, "MG_API_KEY")
|
|
mg := mailgun.NewMailgun(domain, apiKey, "")
|
|
listAddr := fmt.Sprintf("list2@%s", domain)
|
|
protoList := mailgun.List{
|
|
Address: listAddr,
|
|
Name: "List1",
|
|
Description: "A list created by an acceptance test.",
|
|
AccessLevel: mailgun.Members,
|
|
}
|
|
|
|
var countLists = func() int {
|
|
total, _, err := mg.GetLists(mailgun.DefaultLimit, mailgun.DefaultSkip, "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return total
|
|
}
|
|
|
|
startCount := countLists()
|
|
|
|
_, err := mg.CreateList(protoList)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() {
|
|
err = mg.DeleteList(listAddr)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
newCount := countLists()
|
|
if newCount != startCount {
|
|
t.Fatalf("Expected %d lists defined; got %d", startCount, newCount)
|
|
}
|
|
}()
|
|
|
|
newCount := countLists()
|
|
if newCount <= startCount {
|
|
t.Fatalf("Expected %d lists defined; got %d", startCount+1, newCount)
|
|
}
|
|
|
|
theList, err := mg.GetListByAddress(listAddr)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
protoList.CreatedAt = theList.CreatedAt // ignore this field when comparing.
|
|
if theList != protoList {
|
|
t.Fatalf("Unexpected list descriptor: Expected [%#v], Got [%#v]", protoList, theList)
|
|
}
|
|
|
|
_, err = mg.UpdateList(listAddr, mailgun.List{
|
|
Description: "A list whose description changed",
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
theList, err = mg.GetListByAddress(listAddr)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
newList := protoList
|
|
newList.Description = "A list whose description changed"
|
|
if theList != newList {
|
|
t.Fatalf("Expected [%#v], Got [%#v]", newList, theList)
|
|
}
|
|
}
|