protected override Task <RequestStatus> HandleCommand(BidCommand request, CancellationToken cancellationToken) { var transactionOpt = new TransactionOptions() { IsolationLevel = IsolationLevel.Serializable, Timeout = TimeSpan.FromSeconds(10) }; using (var scope = new TransactionScope(TransactionScopeOption.Required, transactionOpt)) { var status = _bidCommandHandler.Handle(request, cancellationToken); scope.Complete(); return(status); } }
public void Test1() { var services = TestDepedencies.Instance.Value; var user = new User(); user.Register("testUserName"); user.AddCredits(10000); var userIdentity = user.UserIdentity; services.UserRepository.AddUser(user); var product = new Product("test name", "test product description", Condition.New); var auctionArgs = new AuctionArgs.Builder() .SetBuyNow(20.0m) .SetName("test auction name") .SetStartDate(DateTime.UtcNow.AddMinutes(10)) .SetEndDate(DateTime.UtcNow.AddDays(1)) .SetCategory(new Category("test", 0)) .SetOwner(new UserIdentity() { UserId = Guid.NewGuid(), UserName = "******" }) .SetProduct(product) .SetTags(new string[] { "tag1", "tag2" }) .Build(); var auction = new Auction(auctionArgs); var sem = new SemaphoreSlim(0, 1); var eventHandler = new Mock <AuctionRaisedHandler>(services.AppEventBuilder, services.DbContext, Mock.Of <IRequestStatusService>(), Mock.Of <ILogger <AuctionRaisedHandler> >()); eventHandler.CallBase = true; eventHandler.Setup(f => f.Consume(It.IsAny <IAppEvent <AuctionRaised> >())) .Callback(() => sem.Release()); var requestStatusService = new Mock <IRequestStatusService>(); requestStatusService.Setup(service => service.TrySendNotificationToAll("AuctionPriceChanged", It.IsAny <Dictionary <string, object> >())); services.SetupEventBus(eventHandler.Object); var stubHandler = new BidCommandHandler(services.AuctionRepository, services.EventBus, Mock.Of <ILogger <BidCommandHandler> >(), requestStatusService.Object, services.UserRepository); services.AuctionRepository.AddAuction(auction); var cmd = new BidCommand(auction.AggregateId, 21.0m); cmd.SignedInUser = userIdentity; stubHandler.Handle(cmd, CancellationToken.None); if (!sem.Wait(TimeSpan.FromSeconds(60))) { Assert.Fail(); } ; eventHandler.Verify(f => f.Consume(It.IsAny <IAppEvent <AuctionRaised> >()), Times.Once); requestStatusService.Verify(f => f.TrySendNotificationToAll("AuctionPriceChanged", It.IsAny <Dictionary <string, object> >()), Times.Once()); }