Ejemplo n.º 1
0
    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;
        }));
    }
Ejemplo n.º 2
0
    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");
    }
Ejemplo n.º 3
0
    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");
        });
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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);
        });
    }
Ejemplo n.º 6
0
    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));
    }