コード例 #1
0
        public async Task Run()
        {
            var data           = new DataFactory();
            var unitOfWorkMock = new UnitOfWorkMock();

            var variousSportsBonus = new VariousSportsBonus {
                IncreasesQuotaBy = 4, RequiredNumberOfDifferentSports = 3, IsActive = true
            };
            IEnumerable <ITicketBonus> bonuses = new[] { variousSportsBonus };
            var dataProvider = new Mock <IDataProvider>();

            dataProvider.Setup(r => r.AllActiveBonuses()).Returns(Task.FromResult(bonuses));

            var sportId    = 1;
            var betedPairs = CollectionUtils.Generate(() => data.BetedPair(sportId++), 3);

            var quotaWithoutBonus = 2;
            var ticket            = new Ticket {
                Quota = quotaWithoutBonus, Id = 4, BetedPairs = betedPairs
            };

            var bonusService = new BonusService(new BonusApplier(unitOfWorkMock.Object), dataProvider.Object);

            await bonusService.ApplyBonuses(ticket);

            unitOfWorkMock.Changes.SavedChanges.Should().BeTrue();

            var insertedObjects = unitOfWorkMock.Changes.Inserted;

            insertedObjects.OfType <AppliedBonus>().Should().ContainSingle();
            var appliedBonus = (AppliedBonus)insertedObjects.Single();

            appliedBonus.TicketId.Should().Be(ticket.Id);
            appliedBonus.BonusName.Should().Be(variousSportsBonus.GetName());

            ticket.Quota.Should().Be(variousSportsBonus.IncreasesQuotaBy + quotaWithoutBonus);
        }