You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
5.1 KiB

using NSubstitute;
using NSubstitute.Exceptions;
using Shentun.Peis.CardRegisters;
using Shentun.Peis.Enums;
using Shentun.Peis.GuidTypes;
using Shentun.Peis.IncludeDetails;
using Shentun.Peis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TencentCloud.Cpdp.V20190820.Models;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow;
using Xunit;
using Xunit.Abstractions;
namespace Shentun.Peis
{
public class CardRegisterManagerTest : PeisDomainTestBase
{
private readonly IRepository<CardRegister, Guid> _repository;
private readonly IRepository<CardBill, Guid> _cardBillRepository;
private readonly ICardRegisterRepository _cardRegisterRepository;
private readonly CardRegisterManager _manager;
private readonly ITestOutputHelper _output;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public CardRegisterManagerTest(ITestOutputHelper output)
{
_output = output;
_repository = GetRequiredService<IRepository<CardRegister, Guid>>();
_cardRegisterRepository = GetRequiredService<ICardRegisterRepository>();
_cardBillRepository = GetRequiredService<IRepository<CardBill, Guid>>();
_manager = GetRequiredService<CardRegisterManager>();
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
}
[Fact]
[UnitOfWork]
public async void AddCardBillTest()
{
var id = new Guid("3a0d9464-e69e-67d5-c292-b2e11fb334b1");
using (IUnitOfWork unitOfWork = _unitOfWorkManager.Begin())
{
var cardRegister = await _cardRegisterRepository.GetAsync(id, includeDetails: true);
//var cardRegister = _cardRegisterRepository.WithDetails().Where(o => o.Id == id).FirstOrDefault();
//var cardRegister = await _cardRegisterRepository.GetAsync(id, includeDetails: true);
//var cardRegister = await _cardRegisterRepository.Get(new Guid("3a0d9464-e69e-67d5-c292-b2e11fb334b1"), includeDetails: true);
//await _repository.EnsureCollectionLoadedAsync(cardRegister, x => x.CardBills);
_output.WriteLine(cardRegister.CardBalance.ToString());
_output.WriteLine(cardRegister.CardBills.Count.ToString());
var cardBill = _manager.CreateCardBill(cardRegister, "01", CardBillFlag.Charge, Convert.ToDecimal(10));
try
{
await _repository.UpdateAsync(cardRegister);
await _cardBillRepository.InsertAsync(cardBill);
await unitOfWork.CompleteAsync();
}
catch (Exception ex)
{
await unitOfWork.RollbackAsync();
}
_output.WriteLine(cardRegister.CardBalance.ToString());
}
}
[Fact]
public async void AddCardBillNoUnitOfWorkTest()
{
var id = new Guid("3a0d9464-e69e-67d5-c292-b2e11fb334b1");
var cardRegister = await _cardRegisterRepository.GetAsync(id, includeDetails: true);
//var cardRegister = _cardRegisterRepository.WithDetails().Where(o => o.Id == id).FirstOrDefault();
//var cardRegister = await _cardRegisterRepository.GetAsync(id, includeDetails: true);
//var cardRegister = await _cardRegisterRepository.Get(new Guid("3a0d9464-e69e-67d5-c292-b2e11fb334b1"), includeDetails: true);
//await _repository.EnsureCollectionLoadedAsync(cardRegister, x => x.CardBills);
_output.WriteLine(cardRegister.CardBalance.ToString());
_output.WriteLine(cardRegister.CardBills.Count.ToString());
var cardBill = _manager.CreateCardBill(cardRegister, "01", CardBillFlag.Refund, Convert.ToDecimal(-1000));
await _repository.UpdateAsync(cardRegister);
await _cardBillRepository.InsertAsync(cardBill);
}
/// <summary>
/// 要支持级联更新,必须使用工作单元UnitOfWork
/// </summary>
[Fact]
//[UnitOfWork]
public async void AddCardBillByGetIdTest()
{
var id = new Guid("3a0d9464-e69e-67d5-c292-b2e11fb334b1");
using (IUnitOfWork unitOfWork = _unitOfWorkManager.Begin())
{
var cardRegister = await _cardRegisterRepository.GetAsync(id, includeDetails: true);
_output.WriteLine(cardRegister.CardBalance.ToString());
_output.WriteLine(cardRegister.CardBills.Count.ToString());
_manager.AddCardBill(cardRegister, "01", CardBillFlag.Charge, Convert.ToDecimal(100));
try
{
await _repository.UpdateAsync(cardRegister);
await unitOfWork.CompleteAsync();
}
catch (Exception ex)
{
await unitOfWork.RollbackAsync();
}
_output.WriteLine(cardRegister.CardBalance.ToString());
}
}
}
}