public void PassesAddedEvents_is_published_for_each_pass()
            {
                using (PassContext context =
                           GetContext())
                {
                    var mediator    = new Mock <IMediator>();
                    var dateService = new Mock <IDateService>();
                    var currentDate = DateTime.UtcNow;
                    dateService.Setup(x => x.Now()).Returns(currentDate);
                    var sut = new AddSkiPassOnPurchaseCompleted(context, mediator.Object, dateService.Object);

                    sut.Handle(new Events.PurchaseCompleted
                    {
                        Passes = new List <PassPurchased>
                        {
                            passPurchased
                        }
                    });
                    var dbPass = context.Passes.Single();
                    mediator.Verify(x => x.Publish(It.Is <PassAdded>(y => y.CardId == passPurchased.CardId &&
                                                                     y.CreatedOn == currentDate &&
                                                                     y.PassId == dbPass.Id &&
                                                                     y.PassTypeId == passPurchased.PassTypeId)));
                }
            }
            public void Empty_passes_collection_saves_nothing_to_the_database()
            {
                using (PassContext context = GetContext())
                {
                    var mediator    = new Mock <IMediator>();
                    var dateService = new Mock <IDateService>();
                    var currentDate = DateTime.UtcNow;
                    dateService.Setup(x => x.Now()).Returns(currentDate);
                    var sut = new AddSkiPassOnPurchaseCompleted(context, mediator.Object, dateService.Object);
                    sut.Handle(new Events.PurchaseCompleted {
                        Passes = new List <PassPurchased>()
                    });

                    Assert.Equal(0, context.Passes.Count());
                }
            }
            public void Empty_passes_collection_publishes_no_messages()
            {
                using (PassContext context = GetContext())
                {
                    var mediator    = new Mock <IMediator>();
                    var dateService = new Mock <IDateService>();
                    var currentDate = DateTime.UtcNow;
                    dateService.Setup(x => x.Now()).Returns(currentDate);
                    var sut = new AddSkiPassOnPurchaseCompleted(context, mediator.Object, dateService.Object);

                    sut.Handle(new Events.PurchaseCompleted {
                        Passes = new List <PassPurchased>()
                    });

                    mediator.Verify(x => x.Publish(It.IsAny <PassAdded>()), Times.Never);
                }
            }
            public void Pass_is_saved_to_the_database_for_each_pass()
            {
                using (PassContext context = GetContext())
                {
                    var mediator    = new Mock <IMediator>();
                    var dateService = new Mock <IDateService>();
                    var currentDate = DateTime.UtcNow;
                    dateService.Setup(x => x.Now()).Returns(currentDate);
                    var sut = new AddSkiPassOnPurchaseCompleted(context, mediator.Object, dateService.Object);
                    sut.Handle(new Events.PurchaseCompleted
                    {
                        Passes = new List <PassPurchased>
                        {
                            passPurchased
                        }
                    });

                    Assert.Equal(1, context.Passes.Count());
                    Assert.Equal(passPurchased.CardId, context.Passes.Single().CardId);
                    Assert.Equal(passPurchased.PassTypeId, context.Passes.Single().PassTypeId);
                    Assert.Equal(currentDate, context.Passes.Single().CreatedOn);
                }
            }