Esempio n. 1
0
        public async Task Sold()
        {
            var state = new AuctionItemState
            {
                StartTime = DateTimeOffset.Parse("2020-01-01 19:30:00"),
                EndTime   = DateTimeOffset.Parse("2020-01-01 20:30:00"),
            };

            state.InitBiddingRecords();
            state.BiddingRecords[1] = new BiddingRecord
            {
                Price = 1
            };
            var design = ActorTestHelper.GetDesign(typeof(AuctionItemActor));

            using var mocker = design.CreateAutoMock("11", state);
            mocker.Mock <IClock>()
            .Setup(x => x.UtcNow)
            .Returns(new DateTime(2020, 01, 01, 21, 0, 0));

            var auctionItemActor = mocker.Create <AuctionItemActor>();
            // act
            var status = await auctionItemActor.GetStatusAsync();

            // assert
            status.Should().Be(AuctionItemStatus.Sold);
        }
Esempio n. 2
0
        public async Task TheTopIsTheHighestPrice()
        {
            using var mocker = AutoMock.GetStrict();

            var now = mocker.FreezeNow();

            await using var handler = mocker.Create <NewBidderEventHandler>();
            var state = new AuctionItemState();

            var topPrice = 9999;

            // act
            await handler.HandleEvent(state, new NewBidderEvent
            {
                Price  = 2,
                UserId = 1
            }, default);

            await handler.HandleEvent(state, new NewBidderEvent
            {
                Price  = topPrice,
                UserId = 2
            }, default);

            // assert
            var(key, value) = state.BiddingRecords.First();
            key.Should().Be(topPrice);
        }
Esempio n. 3
0
        public async Task TryBidding(decimal basePrice, decimal?topPrice, decimal biddingPrice, bool success)
        {
            var state = new AuctionItemState
            {
                StartTime = DateTimeOffset.Parse("2020-01-01 19:30:00"),
                EndTime   = DateTimeOffset.Parse("2020-01-01 20:30:00"),
                BasePrice = basePrice,
            };
            var design = ActorTestHelper.GetDesign(typeof(AuctionItemActor));

            using var mocker = design.CreateAutoMock("1", state);
            mocker.Mock <IClock>()
            .Setup(x => x.UtcNow)
            .Returns(new DateTime(2020, 01, 01, 20, 0, 0));

            mocker.Mock <IClock>()
            .Setup(x => x.UtcNow)
            .Returns(new DateTime(2020, 01, 01, 20, 0, 0));

            if (topPrice != null)
            {
                state.InitBiddingRecords();
                state.BiddingRecords[topPrice.Value] = new BiddingRecord
                {
                    Price  = topPrice.Value,
                    UserId = 11
                };
            }

            var auctionItemActor = mocker.Create <AuctionItemActor>();
            // act
            var input = new TryBiddingInput
            {
                UserId = 777,
                Price  = biddingPrice
            };
            var result = await auctionItemActor.TryBidding(input);

            // assert
            var nowPrice = Math.Max(biddingPrice, basePrice);

            if (topPrice.HasValue)
            {
                nowPrice = Math.Max(nowPrice, topPrice.Value);
            }

            var expectedResult = new TryBiddingResult
            {
                Success           = success,
                NowPrice          = nowPrice,
                UserId            = input.UserId,
                AuctionItemStatus = AuctionItemStatus.OnSell
            };

            result.Should().BeEquivalentTo(expectedResult);
        }
Esempio n. 4
0
        public async Task StatusWithNoBidder(int hour, AuctionItemStatus expectedStatus)
        {
            var state = new AuctionItemState
            {
                StartTime = DateTimeOffset.Parse("2020-01-01 19:30:00"),
                EndTime   = DateTimeOffset.Parse("2020-01-01 20:30:00")
            };
            var claptrapDesign = ActorTestHelper.GetDesign(typeof(AuctionItemActor));

            using var mocker = claptrapDesign.CreateAutoMock("1", state);

            mocker.Mock <IClock>()
            .Setup(x => x.UtcNow)
            .Returns(new DateTime(2020, 01, 01, hour, 0, 0));

            var auctionItemActor = mocker.Create <AuctionItemActor>();
            // act
            var status = await auctionItemActor.GetStatusAsync();

            // assert
            status.Should().Be(expectedStatus);
        }
Esempio n. 5
0
        public async Task AddFirstBiddingRecord()
        {
            using var mocker = AutoMock.GetStrict();

            var now = mocker.FreezeNow();

            await using var handler = mocker.Create <NewBidderEventHandler>();
            var state     = new AuctionItemState();
            var eventData = new NewBidderEvent
            {
                Price  = 2,
                UserId = 1
            };

            // act
            await handler.HandleEvent(state, eventData, default);

            // assert
            var(key, value) = state.BiddingRecords.Single();
            key.Should().Be(eventData.Price);
            value.UserId.Should().Be(eventData.UserId);
            value.Price.Should().Be(eventData.Price);
            value.BiddingTime.Should().Be(now);
        }