Beispiel #1
0
        public async Task HandleMemberSubscriptionAsync_Pending_ShouldBeChangedByEmailsServiceToUnsubscribedThanPending()
        {
            //arrange
            var nullLogger        = new NullLogger <SubscriberService>();
            var fakeRepository    = new FakeMailchimpRepository();
            var subscriberService = new SubscriberService(nullLogger, fakeRepository);
            var newSubscriber     = new NewSubscriberDto()
            {
                Email  = "*****@*****.**",
                Name   = "Marek",
                Source = "UnitTest"
            };

            //act
            await subscriberService.HandleMemberSubscriptionAsync(newSubscriber);

            MemberDto receivedMember = await fakeRepository.GetMemberAsync(newSubscriber.Email);

            var memberHistory = fakeRepository.Members["*****@*****.**"];

            //assert
            Assert.Equal(3, memberHistory.Count);
            Assert.Equal(newSubscriber.Email, receivedMember.EmailAddress);
            Assert.Equal("unsubscribed", memberHistory.ElementAt(1).Status);
            Assert.Equal("pending", receivedMember.Status);
        }
Beispiel #2
0
        public async Task HandleMemberSubscriptionAsync_UnsubscribedSubscriber_ShouldBeResubscribedWithStatusPending()
        {
            //arrange
            var nullLogger             = new NullLogger <SubscriberService>();
            var fakeRepository         = new FakeMailchimpRepository();
            var subscriberService      = new SubscriberService(nullLogger, fakeRepository);
            var unsubscribedSubscriber = new NewSubscriberDto()
            {
                Email  = "*****@*****.**",
                Name   = "Unsubscribed",
                Source = "UnitTest"
            };

            //assume
            var assumedMember = await fakeRepository.GetMemberAsync(unsubscribedSubscriber.Email);

            Assume.That(
                assumedMember?.Status ==
                "unsubscribed", "Missing unsubscribed member in the collection");

            //act
            await subscriberService.HandleMemberSubscriptionAsync(unsubscribedSubscriber);

            MemberDto receivedMember = await fakeRepository.GetMemberAsync(unsubscribedSubscriber.Email);

            //assert
            Assert.Equal(unsubscribedSubscriber.Email, receivedMember.EmailAddress);
            Assert.Equal("pending", receivedMember.Status);
        }
Beispiel #3
0
        public async Task HandleMemberSubscriptionAsync_AlreadySubscribed_ShouldBeNotChanged()
        {
            //arrange
            var nullLogger           = new NullLogger <SubscriberService>();
            var fakeRepository       = new FakeMailchimpRepository();
            var subscriberService    = new SubscriberService(nullLogger, fakeRepository);
            var subscribedSubscriber = new NewSubscriberDto()
            {
                Email  = "*****@*****.**",
                Name   = "Subscribed",
                Source = "UnitTest"
            };

            //assume
            var assumedMember = await fakeRepository.GetMemberAsync(subscribedSubscriber.Email);

            Assume.That(
                assumedMember?.Status ==
                "subscribed", "Missing subscribed member in the collection");

            //act
            await subscriberService.HandleMemberSubscriptionAsync(subscribedSubscriber);

            MemberDto receivedMember = await fakeRepository.GetMemberAsync(subscribedSubscriber.Email);

            var memberChanges = fakeRepository.Members["*****@*****.**"];

            //assert
            Assert.Single(memberChanges);
            Assert.Equal(subscribedSubscriber.Email, receivedMember.EmailAddress);
            Assert.Equal("subscribed", receivedMember.Status);
        }
        public async Task ReconfirmSubscriptionAsync(NewSubscriberDto newSubscriber)
        {
            var updatedMember = new MemberDto()
            {
                Status = "pending",
                Tags   = null,
            };

            await _mailchimpRepository.UpdateMemberAsync(newSubscriber.Email, updatedMember);
        }
        public async Task HandleMemberSubscriptionAsync(NewSubscriberDto userToSubscribe)
        {
            var mailchimpSubscriptionStatus = await GetEmailStatusAsync(userToSubscribe.Email);

            if (mailchimpSubscriptionStatus == SubscriberStatusDto.DoesNotExist)
            {
                await AddMemberToMailchimpAsync(userToSubscribe);
            }
            else if (mailchimpSubscriptionStatus == SubscriberStatusDto.Archived ||
                     mailchimpSubscriptionStatus == SubscriberStatusDto.Unsubscribed)
            {
                await ReconfirmSubscriptionAsync(userToSubscribe);
            }
            else if (mailchimpSubscriptionStatus == SubscriberStatusDto.Pending)
            {
                await ReconfirmPendingAsync(userToSubscribe);
            }
        }
        public async Task AddMemberAsync(NewSubscriberDto newSubscriber)
        {
            var memberExists = _members.TryGetValue(newSubscriber.Email, out var member);

            if (memberExists)
            {
                member.Add(new MemberDto()
                {
                    Id           = Guid.NewGuid().ToString(),
                    Status       = "pending",
                    EmailAddress = newSubscriber.Email,
                    Tags         = new List <TagDto>()
                    {
                        new TagDto()
                        {
                            Name = newSubscriber.Source
                        }
                    }
                });
            }
            else
            {
                _members.Add(newSubscriber.Email, new List <MemberDto>()
                {
                    new MemberDto()
                    {
                        Id           = Guid.NewGuid().ToString(),
                        Status       = "pending",
                        EmailAddress = newSubscriber.Email,
                        Tags         = new List <TagDto>()
                        {
                            new TagDto()
                            {
                                Name = newSubscriber.Source
                            }
                        }
                    }
                });
            }
        }
Beispiel #7
0
        public async Task HandleMemberSubscriptionAsync_NewSubscriber_ShouldBeAddedToEmailsServiceWithStatusPending()
        {
            //arrange
            var nullLogger        = new NullLogger <SubscriberService>();
            var fakeRepository    = new FakeMailchimpRepository();
            var subscriberService = new SubscriberService(nullLogger, fakeRepository);
            var newSubscriber     = new NewSubscriberDto()
            {
                Email  = "*****@*****.**",
                Name   = "Marek",
                Source = "UnitTest"
            };

            //act
            await subscriberService.HandleMemberSubscriptionAsync(newSubscriber);

            MemberDto receivedMember = await fakeRepository.GetMemberAsync(newSubscriber.Email);

            //assert
            Assert.Equal(newSubscriber.Email, receivedMember.EmailAddress);
            Assert.Equal("pending", receivedMember.Status);
        }
Beispiel #8
0
        public async Task AddMemberAsync(NewSubscriberDto newSubscriber)
        {
            var newMember = new NewMemberDto()
            {
                EmailAddress = newSubscriber.Email,
                Status       = "pending",
                Tags         = new List <string>()
                {
                    newSubscriber.Source
                },
                MergeFields = new MergeFieldsDto()
                {
                    FirstName = newSubscriber.Name,
                },
                MarketingPresmissions = new List <MarketingPermissionsDto>()
                {
                    new(_marketingPermissionIdForEmail)
                },
            };

            await _mailchimpClient.AddMemberAsync(newMember);
        }
 private async Task AddMemberToMailchimpAsync(NewSubscriberDto newSubscriber)
 {
     await _mailchimpRepository.AddMemberAsync(newSubscriber);
 }
Beispiel #10
0
        public async Task Run([QueueTrigger("mailchimp-subscriptions", Connection = "AzureWebJobsMailchimpServiceQueue")] NewSubscriberDto userToSubscribe, ILogger log)
        {
            log.LogInformation($"C# ServiceBus queue trigger function processed message: {JsonConvert.SerializeObject(userToSubscribe)}");

            await _subscriberService.HandleMemberSubscriptionAsync(userToSubscribe);
        }