github.com/mailgun/mailgun-go/v3@v3.6.4/mailing_lists_test.go (about) 1 package mailgun_test 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/facebookgo/ensure" 8 "github.com/mailgun/mailgun-go/v3" 9 ) 10 11 func TestMailingListMembers(t *testing.T) { 12 mg := mailgun.NewMailgun(testDomain, testKey) 13 mg.SetAPIBase(server.URL()) 14 15 ctx := context.Background() 16 address := randomEmail("list", testDomain) 17 _, err := mg.CreateMailingList(ctx, mailgun.MailingList{ 18 Address: address, 19 Name: address, 20 Description: "TestMailingListMembers-related mailing list", 21 AccessLevel: mailgun.AccessLevelMembers, 22 }) 23 ensure.Nil(t, err) 24 defer func() { 25 ensure.Nil(t, mg.DeleteMailingList(ctx, address)) 26 }() 27 28 var countMembers = func() int { 29 var page []mailgun.Member 30 var count int 31 32 it := mg.ListMembers(address, nil) 33 for it.Next(ctx, &page) { 34 count += len(page) 35 } 36 ensure.Nil(t, it.Err()) 37 return count 38 } 39 40 startCount := countMembers() 41 protoJoe := mailgun.Member{ 42 Address: "joe@example.com", 43 Name: "Joe Example", 44 Subscribed: mailgun.Subscribed, 45 } 46 ensure.Nil(t, mg.CreateMember(ctx, true, address, protoJoe)) 47 newCount := countMembers() 48 ensure.False(t, newCount <= startCount) 49 50 theMember, err := mg.GetMember(ctx, "joe@example.com", address) 51 ensure.Nil(t, err) 52 ensure.DeepEqual(t, theMember.Address, protoJoe.Address) 53 ensure.DeepEqual(t, theMember.Name, protoJoe.Name) 54 ensure.DeepEqual(t, theMember.Subscribed, protoJoe.Subscribed) 55 ensure.True(t, len(theMember.Vars) == 0) 56 57 _, err = mg.UpdateMember(ctx, "joe@example.com", address, mailgun.Member{ 58 Name: "Joe Cool", 59 }) 60 ensure.Nil(t, err) 61 62 theMember, err = mg.GetMember(ctx, "joe@example.com", address) 63 ensure.Nil(t, err) 64 ensure.DeepEqual(t, theMember.Name, "Joe Cool") 65 ensure.Nil(t, mg.DeleteMember(ctx, "joe@example.com", address)) 66 ensure.DeepEqual(t, countMembers(), startCount) 67 68 err = mg.CreateMemberList(ctx, nil, address, []interface{}{ 69 mailgun.Member{ 70 Address: "joe.user1@example.com", 71 Name: "Joe's debugging account", 72 Subscribed: mailgun.Unsubscribed, 73 }, 74 mailgun.Member{ 75 Address: "Joe Cool <joe.user2@example.com>", 76 Name: "Joe's Cool Account", 77 Subscribed: mailgun.Subscribed, 78 }, 79 mailgun.Member{ 80 Address: "joe.user3@example.com", 81 Vars: map[string]interface{}{ 82 "packet-email": "KW9ABC @ BOGBBS-4.#NCA.CA.USA.NOAM", 83 }, 84 }, 85 }) 86 ensure.Nil(t, err) 87 88 theMember, err = mg.GetMember(ctx, "joe.user2@example.com", address) 89 ensure.Nil(t, err) 90 ensure.DeepEqual(t, theMember.Name, "Joe's Cool Account") 91 ensure.NotNil(t, theMember.Subscribed) 92 ensure.True(t, *theMember.Subscribed) 93 } 94 95 func TestMailingLists(t *testing.T) { 96 mg := mailgun.NewMailgun(testDomain, testKey) 97 mg.SetAPIBase(server.URL()) 98 ctx := context.Background() 99 100 address := randomEmail("list", testDomain) 101 protoList := mailgun.MailingList{ 102 Address: address, 103 Name: "List1", 104 Description: "A list created by an acceptance test.", 105 AccessLevel: mailgun.AccessLevelMembers, 106 } 107 108 var countLists = func() int { 109 var count int 110 it := mg.ListMailingLists(nil) 111 var page []mailgun.MailingList 112 for it.Next(ctx, &page) { 113 count += len(page) 114 } 115 ensure.Nil(t, it.Err()) 116 return count 117 } 118 119 _, err := mg.CreateMailingList(ctx, protoList) 120 ensure.Nil(t, err) 121 defer func() { 122 ensure.Nil(t, mg.DeleteMailingList(ctx, address)) 123 124 _, err := mg.GetMailingList(ctx, address) 125 ensure.NotNil(t, err) 126 }() 127 128 actualCount := countLists() 129 ensure.False(t, actualCount < 1) 130 131 theList, err := mg.GetMailingList(ctx, address) 132 ensure.Nil(t, err) 133 134 protoList.CreatedAt = theList.CreatedAt // ignore this field when comparing. 135 ensure.DeepEqual(t, theList, protoList) 136 137 _, err = mg.UpdateMailingList(ctx, address, mailgun.MailingList{ 138 Description: "A list whose description changed", 139 }) 140 ensure.Nil(t, err) 141 142 theList, err = mg.GetMailingList(ctx, address) 143 ensure.Nil(t, err) 144 145 newList := protoList 146 newList.Description = "A list whose description changed" 147 ensure.DeepEqual(t, theList, newList) 148 }