Example #1
0
        public async Task Should_Add_All_Transactions()
        {
            var newTransactions = new List <Transaction>()
            {
                new Transaction()
                {
                    Payer     = "NEW PAYER",
                    Points    = 1000,
                    Timestamp = new DateTime(2020, 11, 12, 14, 0, 0, DateTimeKind.Utc)
                },
                new Transaction()
                {
                    Payer     = "NEW PAYER",
                    Points    = 200,
                    Timestamp = new DateTime(2020, 9, 30, 11, 0, 0, DateTimeKind.Utc)
                }
            };

            var service = new RewardsService(_rewardsDbContext, _mapper);
            await service.AddTransactions(newTransactions);

            var newPayerTransactions = await _rewardsDbContext.Transactions.Where(t => t.Payer == "NEW PAYER").ToListAsync();

            Assert.Equal(2, newPayerTransactions.Count);
            Assert.Contains(newPayerTransactions, t => string.Equals(t.Payer, newTransactions[0].Payer) && t.Points == newTransactions[0].Points && t.Timestamp.Equals(newTransactions[0].Timestamp) && t.RemainingPoints == newTransactions[0].Points);
            Assert.Contains(newPayerTransactions, t => string.Equals(t.Payer, newTransactions[1].Payer) && t.Points == newTransactions[1].Points && t.Timestamp.Equals(newTransactions[1].Timestamp) && t.RemainingPoints == newTransactions[1].Points);
        }
Example #2
0
        public async Task Should_Throw_Exception_Adding()
        {
            var newTransactions = new List <Transaction>()
            {
                new Transaction()
                {
                    Payer     = "DANNON",
                    Points    = -100,
                    Timestamp = new DateTime(2020, 9, 12, 14, 0, 0, DateTimeKind.Utc)
                }
            };

            var service   = new RewardsService(_rewardsDbContext, _mapper);
            var exception = await Assert.ThrowsAnyAsync <Exception>(() => service.AddTransactions(newTransactions));

            Assert.Equal("Invalid transaction! Could not spend all points", exception.Message);
        }
Example #3
0
        public async Task Should_Deduct_Points_Correctly_Adding()
        {
            var newTransactions = new List <Transaction>()
            {
                new Transaction()
                {
                    Payer     = "DANNON",
                    Points    = -200,
                    Timestamp = new DateTime(2020, 11, 2, 15, 0, 0, DateTimeKind.Utc)
                }
            };

            var service = new RewardsService(_rewardsDbContext, _mapper);
            await service.AddTransactions(newTransactions);

            var dannonTransactions = await _rewardsDbContext.Transactions.Where(t => t.Payer == "DANNON").ToListAsync();

            Assert.Contains(dannonTransactions, t => string.Equals(t.Payer, newTransactions[0].Payer) && t.Points == newTransactions[0].Points && t.Timestamp.Equals(newTransactions[0].Timestamp) && t.RemainingPoints == 0);
            Assert.Contains(dannonTransactions, t => string.Equals(t.Payer, mockTransactions[0].Payer) && t.Points == mockTransactions[0].Points && t.Timestamp.Equals(mockTransactions[0].Timestamp) && t.RemainingPoints == mockTransactions[0].Points - 100);
            Assert.Contains(dannonTransactions, t => string.Equals(t.Payer, mockTransactions[4].Payer) && t.Points == mockTransactions[4].Points && t.Timestamp.Equals(mockTransactions[4].Timestamp) && t.RemainingPoints == mockTransactions[4].Points - 300);
        }