public async Task <FlashSaleResult> CreateFlashSaleResultAsync() { return(await WithUnitOfWorkAsync(async() => { var flashSaleResult = new FlashSaleResult( GuidGenerator.Create(), null, FlashSalesTestData.Store1Id, FlashSalesTestData.Plan1Id, GuidGenerator.Create()); await FlashSaleResultRepository.InsertAsync(flashSaleResult); return flashSaleResult; })); }
public void MarkAsFailed() { var flashSaleResult = new FlashSaleResult( id: Guid.NewGuid(), tenantId: null, storeId: Guid.NewGuid(), planId: Guid.NewGuid(), userId: Guid.NewGuid() ); flashSaleResult.Status.ShouldBe(FlashSaleResultStatus.Pending); flashSaleResult.MarkAsFailed("reason"); flashSaleResult.Status.ShouldBe(FlashSaleResultStatus.Failed); flashSaleResult.OrderId.ShouldBe(null); flashSaleResult.Reason.ShouldBe("reason"); }
public void MarkAsFailed_Should_Throw_FlashSaleResultStatusNotPendingException_When_Status_Not_Pending() { var flashSaleResult = new FlashSaleResult( id: Guid.NewGuid(), tenantId: null, storeId: Guid.NewGuid(), planId: Guid.NewGuid(), userId: Guid.NewGuid() ); flashSaleResult.Status.ShouldBe(FlashSaleResultStatus.Pending); flashSaleResult.MarkAsFailed("reason"); Assert.Throws <FlashSaleResultStatusNotPendingException>(() => { flashSaleResult.MarkAsFailed("reason"); }); }
public void MarkAsSuccessful() { var flashSaleResult = new FlashSaleResult( id: Guid.NewGuid(), tenantId: null, storeId: Guid.NewGuid(), planId: Guid.NewGuid(), userId: Guid.NewGuid() ); flashSaleResult.Status.ShouldBe(FlashSaleResultStatus.Pending); var orderId = Guid.NewGuid(); flashSaleResult.MarkAsSuccessful(orderId); flashSaleResult.Status.ShouldBe(FlashSaleResultStatus.Successful); flashSaleResult.OrderId.ShouldBe(orderId); }
public void MarkAsSuccessful_Should_Throw_FlashSaleResultStatusNotPendingException_When_Status_Not_Pending() { var flashSaleResult = new FlashSaleResult( id: Guid.NewGuid(), tenantId: null, storeId: Guid.NewGuid(), planId: Guid.NewGuid(), userId: Guid.NewGuid() ); flashSaleResult.Status.ShouldBe(FlashSaleResultStatus.Pending); var orderId = Guid.NewGuid(); flashSaleResult.MarkAsSuccessful(orderId); flashSaleResult.Reason.ShouldBe(null); Assert.Throws <FlashSaleResultStatusNotPendingException>(() => { flashSaleResult.MarkAsSuccessful(orderId); }); }
protected virtual async Task <FlashSaleResult> CreatePendingFlashSaleResultAsync(FlashSalePlanCacheItem plan, Guid userId, Func <Guid, Task> existResultPreProcess) { // Prevent repeat submit var existsResult = await FlashSaleResultRepository.FirstOrDefaultAsync(x => x.PlanId == plan.Id && x.UserId == userId && x.Status != FlashSaleResultStatus.Failed && x.Reason != FlashSaleResultFailedReason.InvalidHashToken); if (existsResult != null) { await existResultPreProcess(existsResult.Id); throw new BusinessException(FlashSalesErrorCodes.DuplicateFlashSalesOrder); } var result = new FlashSaleResult( id: GuidGenerator.Create(), tenantId: CurrentTenant.Id, storeId: plan.StoreId, planId: plan.Id, userId: userId ); return(await FlashSaleResultRepository.InsertAsync(result, autoSave : true)); }