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  }