Beispiel #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);
        }
Beispiel #2
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);
        }
Beispiel #3
0
        public async Task UpdateCount_Ok()
        {
            const int maxCount       = 10000;
            var       state          = TrainInfo.Create(Enumerable.Range(1000, 4).ToList(), maxCount);
            var       claptrapDesign = ActorTestHelper.GetDesign(typeof(TrainGran));

            using var mocker = claptrapDesign.CreateAutoMock("123", state);
            var actor = mocker.Create <TrainGran>();
            await actor.UpdateCountAsync(1000, 1001);
        }
Beispiel #4
0
        public void UpdateCount_StationNotFound()
        {
            const int maxCount       = 10000;
            var       state          = TrainInfo.Create(Enumerable.Range(1000, 4).ToList(), maxCount);
            var       claptrapDesign = ActorTestHelper.GetDesign(typeof(TrainGran));

            using var mocker = claptrapDesign.CreateAutoMock("123", state);
            var actor = mocker.Create <TrainGran>();

            Assert.ThrowsAsync <StationNotFoundException>(() => actor.UpdateCountAsync(1000, 10000));
        }
Beispiel #5
0
        public async Task Normal()
        {
            var seatInfo       = SeatInfo.Create(Enumerable.Range(1000, 4).ToList());
            var claptrapDesign = ActorTestHelper.GetDesign(typeof(SeatActor));

            using var mocker = claptrapDesign.CreateAutoMock("123", seatInfo);

            var actor  = mocker.Create <SeatActor>();
            var reqId1 = "newbe36524-1";
            await actor.TakeSeatAsync(1000, 1001, reqId1);
        }
Beispiel #6
0
        public void StationMismatched()
        {
            var seatInfo       = SeatInfo.Create(Enumerable.Range(1000, 4).ToList());
            var claptrapDesign = ActorTestHelper.GetDesign(typeof(SeatActor));

            using var mocker = claptrapDesign.CreateAutoMock("123", seatInfo);
            var          actor  = mocker.Create <SeatActor>();
            const string reqId1 = "newbe36524-1";

            Assert.ThrowsAsync <StationNotFoundException>(()
                                                          => actor.TakeSeatAsync(1001, 1000, reqId1));
        }
Beispiel #7
0
        public void AlreadyTaken()
        {
            var seatInfo = SeatInfo.Create(Enumerable.Range(1000, 4).ToList());

            seatInfo.RequestIds[0] = "taken";
            var claptrapDesign = ActorTestHelper.GetDesign(typeof(SeatActor));

            using var mocker = claptrapDesign.CreateAutoMock("123", seatInfo);
            var          actor  = mocker.Create <SeatActor>();
            const string reqId1 = "newbe36524-1";

            Assert.ThrowsAsync <SeatHasBeenTakenException>(()
                                                           => actor.TakeSeatAsync(1000, 1002, reqId1));
        }
Beispiel #8
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);
        }