예제 #1
0
        public async Task Accept()
        {
            AcceptPurchaseOrder acceptPurchase = new AcceptPurchaseOrder
            {
                CustomerId      = CustomerId,
                PurchaseOrderId = Id,
                Items           = ItemLines.Select(il => new ItemLineRequest {
                    Description = il.Description, Type = il.Type
                }).ToList()
            };
            AcceptedPurchaseOrder response = await _Mediator.Send(acceptPurchase);

            Accepted = response.Accepted;
            if (response.Accepted)
            {
                ProcessedPurchaseOrder processedPurchaseOrder = new ProcessedPurchaseOrder
                {
                    CustomerId      = CustomerId,
                    PurchaseOrderId = Id,
                    Items           = ItemLines.Select(il => new ItemLineRequest {
                        Description = il.Description, Type = il.Type
                    }).ToList()
                };
                await _Mediator.Publish(processedPurchaseOrder);
            }
        }
        public async Task BookClubPointsServiceHandlesProcessedPurchasedOrderForExistingMembership()
        {
            int customerId = 344656;
            AwardedCustomerPoints awardedCustomerPoints = new AwardedCustomerPoints();
            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(m => m.Send(It.IsAny <AwardCustomerPoints>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(awardedCustomerPoints)
            .Verifiable("Awarded book club membership points.");

            ProcessedPurchaseOrder processedPurchaseOrder = new ProcessedPurchaseOrder
            {
                CustomerId      = customerId,
                PurchaseOrderId = 4567890,
                Items           = new List <ItemLineRequest>
                {
                    new ItemLineRequest {
                        Description = "Comprehensive First Aid Training", Type = ItemLineType.Product, Category = ItemLineCategory.Book
                    },
                    new ItemLineRequest {
                        Description = "The Girl on the Train", Type = ItemLineType.Product, Category = ItemLineCategory.Video
                    },
                }
            };

            IBookClubMembershipRepository fakeRepo = GetFakeBookClubMembershipRepository(BookClubMembership.Create(customerId));

            BookClubPointsService sut = new BookClubPointsService(mockMediator.Object, fakeRepo);

            await sut.Handle(processedPurchaseOrder);

            mockMediator.Verify(m => m.Send(It.Is <AwardCustomerPoints>(a => a.Points == 5), It.IsAny <CancellationToken>()), Times.Once);
        }
예제 #3
0
        public async Task VideoClubPointsServiceHandlesProcessedPurchasedOrderForNoMembership()
        {
            int customerId = 344656;
            AwardedCustomerPoints awardedCustomerPoints = new AwardedCustomerPoints();
            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(m => m.Send(It.IsAny <AwardCustomerPoints>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(awardedCustomerPoints)
            .Verifiable("Awarded Video club membership points.");

            ProcessedPurchaseOrder processedPurchaseOrder = new ProcessedPurchaseOrder
            {
                CustomerId      = customerId,
                PurchaseOrderId = 4567890,
                Items           = new List <ItemLineRequest>
                {
                    new ItemLineRequest {
                        Description = "Comprehensive First Aid Training", Type = ItemLineType.Product
                    },
                    new ItemLineRequest {
                        Description = "The Girl on the Train", Type = ItemLineType.Product
                    },
                }
            };

            IVideoClubMembershipRepository fakeRepo = GetFakeVideoClubMembershipRepository(null);

            VideoClubPointsService sut = new VideoClubPointsService(mockMediator.Object, fakeRepo);

            await sut.Handle(processedPurchaseOrder);

            mockMediator.Verify(m => m.Send(It.IsAny <AwardCustomerPoints>(), It.IsAny <CancellationToken>()), Times.Never);
        }
예제 #4
0
 public async Task Handle(ProcessedPurchaseOrder notification)
 {
     if (OrderHasVideos(notification.Items))
     {
         if (OrderHasVideoClubMembership(notification.Items) || CustomerHasMembership(notification.CustomerId))
         {
             int points = GetVideoPoints(notification.Items);
             AwardCustomerPoints awardCustomerPoints = new AwardCustomerPoints
             {
                 CustomerId = notification.CustomerId,
                 Points     = points
             };
             var response = await _Mediator.Send(awardCustomerPoints);
         }
     }
 }