コード例 #1
0
            public override async Task <ICollection <MembershipModel> > Handle(Request request, CancellationToken cancellationToken)
            {
                var list = _databaseQueries.GetMembershipsAndPayments(request.Payment.MemberId)
                           .Where(x => x.Difference > 0).OrderBy(x => x.Year).ThenBy(x => x.Month).ThenBy(x => x.Amount);

                var amount = request.Payment.Amount;

                foreach (var item in list)
                {
                    if (amount <= 0)
                    {
                        break;
                    }
                    var amountToPay = amount > item.Difference ? item.Difference : amount;
                    await DbContext.Payments.AddAsync(new Payment()
                    {
                        MembershipId = item.Id,
                        Amount       = amountToPay,
                        Date         = request.Payment.DateTime,
                        CreatorId    = request.Creator
                    }, cancellationToken);

                    amount -= amountToPay;
                }

                await DbContext.SaveChangesAsync(cancellationToken);

                return(await _mediator.Send(new GetMembershipsQuery.Request(request.Payment.MemberId), cancellationToken));
            }
コード例 #2
0
            public override Task <List <MembershipsAndPayments> > Handle(Request request, CancellationToken cancellationToken)
            {
                var memberships = _queries.GetMembershipsAndPayments(null).ToList();

                return(Task.FromResult(memberships));
            }
コード例 #3
0
        public async void AddPayment()
        {
            var payment = new PaymentModel
            {
                MemberId = 1,
                Amount   = 3000,
                DateTime = DateTime.Now
            };

            _mockQueries.GetMembershipsAndPayments(1)
            .Returns(new List <MembershipsAndPayments>()
            {
                new MembershipsAndPayments()
                {
                    Id = 1, Year = 2018, Month = 12, Amount = 2800, Difference = 2800,
                },
                new MembershipsAndPayments()
                {
                    Id = 2, Year = 2019, Month = 1, Amount = 2800, Difference = 2800
                },
                new MembershipsAndPayments()
                {
                    Id = 3, Year = 2019, Month = 1, Amount = 200, Difference = 200
                }
            });

            using (var dbFactory = new DbContextFactory())
            {
                using (var ctx = dbFactory.GetContext())
                {
                    ctx.Members.Add(new Member()
                    {
                        Id          = 1, FirstName = "Jovana", LastName = "Bajsanski",
                        Gender      = Gender.Female,
                        DateOfBirth = new DateTime(2010, 11, 25)
                    });
                    ctx.Memberships.Add(new Membership()
                    {
                        Id = 1, Year = 2018, Month = 12, Amount = 2800, Date = DateTime.Now, MemberId = 1
                    });
                    ctx.Memberships.Add(new Membership()
                    {
                        Id = 2, Year = 2019, Month = 1, Amount = 2800, Date = DateTime.Now, MemberId = 1
                    });
                    ctx.Memberships.Add(new Membership()
                    {
                        Id = 3, Year = 2019, Month = 1, Amount = 200, Date = DateTime.Now, MemberId = 1
                    });
                    ctx.SaveChanges();
                }

                // Act
                using (var ctx = dbFactory.GetContext())
                {
                    var mediator = Substitute.For <IMediator>();
                    var command  = new AddPaymentCommand.Handler(ctx, _mockQueries, mediator);
                    await command.Handle(new AddPaymentCommand.Request()
                    {
                        Payment = payment
                    }, CancellationToken.None);
                }

                // Assert

                using (var ctx = dbFactory.GetContext())
                {
                    var memberships = ctx.Memberships.Include(x => x.Payments).ToDictionary(x => x.Id);

                    Assert.Equal(1, memberships[1].Payments.Count);
                    Assert.Equal(2800, memberships[1].Payments.Single().Amount);

                    Assert.Equal(0, memberships[2].Payments.Count);

                    Assert.Equal(1, memberships[3].Payments.Count);
                    Assert.Equal(200, memberships[3].Payments.Single().Amount);
                }
            }
        }