예제 #1
0
        public async Task Run()
        {
            var data           = new DataFactory();
            var unitOfWorkMock = new UnitOfWorkMock();

            var pair1SelectedQuota = 23;
            var pair2SelectedQuota = 6;
            var pair3SelectedQuota = 2;

            var betablePair1 = data.BetablePair(1, pair1SelectedQuota, -1, -1, new Team(), new Team());
            var betablePair2 = data.BetablePair(2, -1, pair2SelectedQuota, -1, new Team(), new Team());
            var betablePair3 = data.BetablePair(3, -1, -1, pair3SelectedQuota, new Team(), new Team());
            IReadOnlyCollection <BetablePair> betablePairs = new[] { betablePair1, betablePair2, betablePair3 };

            var request = new CommitTicketRequest
            {
                Stake       = 19,
                BetingPairs = new[]
                {
                    new CommitTicketRequest.BetingPair
                    {
                        BetedPairId = betablePair1.Id,
                        BetingType  = BetingType.Team1Win
                    },
                    new CommitTicketRequest.BetingPair
                    {
                        BetedPairId = betablePair2.Id,
                        BetingType  = BetingType.Team2Win
                    },
                    new CommitTicketRequest.BetingPair
                    {
                        BetedPairId = betablePair3.Id,
                        BetingType  = BetingType.Draw
                    },
                }
            };

            var userId = "a";

            var currentUserAccessor = TestServicesFactory.CureCurrentUserAccessor(userId);

            var dataProviderMock = new Mock <IDataProvider>();

            dataProviderMock.Setup(dp => dp.BetablePairs(It.IsAny <IEnumerable <int> >())).Returns(Task.FromResult(betablePairs));

            var service = new TicketService(
                Mock.Of <IBonusService>(),
                unitOfWorkMock.Object,
                Mock.Of <IWalletService>(),
                currentUserAccessor,
                dataProviderMock.Object,
                Mock.Of <IMapper>());

            await service.Handle(request);

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

            var insertedObjects = unitOfWorkMock.Changes.Inserted;

            insertedObjects.OfType <Ticket>().Should().ContainSingle();
            var commitedTicket = insertedObjects.OfType <Ticket>().Single();

            var betedPairs = insertedObjects.OfType <BetedPair>().ToArray();

            betedPairs.Length.Should().Be(3);

            void AssertOnPair(int betablePairId, int quota, BetingType type)
            {
                var pair = betedPairs.Single(p => p.BetablePairId == betablePairId);

                pair.GetQuota().Should().Be(quota);
                pair.BetedType.Should().Be(type);
            }

            AssertOnPair(betablePair1.Id, pair1SelectedQuota, BetingType.Team1Win);
            AssertOnPair(betablePair2.Id, pair2SelectedQuota, BetingType.Team2Win);
            AssertOnPair(betablePair3.Id, pair3SelectedQuota, BetingType.Draw);

            commitedTicket.Quota.Should().Be(pair1SelectedQuota * pair2SelectedQuota * pair3SelectedQuota);
            commitedTicket.UserId.Should().Be(userId);
            commitedTicket.Stake.Should().Be(request.Stake);
        }