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); }
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); }
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); }
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); }
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); }