using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Util.Data.EntityFrameworkCore; using Util.Tests.Fakes; using Util.Tests.Infrastructure; using Util.Tests.Models; using Util.Tests.Queries; using Util.Tests.Repositories; using Util.Tests.Services; using Util.Tests.UnitOfWorks; using Xunit; using Xunit.Abstractions; using Xunit.DependencyInjection; namespace Util.Applications.Tests { /// /// 客户查询服务测试 /// 说明: /// 1. 测试查询服务操作 /// public class CustomerQueryServiceTest : TestBase { #region 测试初始化 /// /// 测试输出 /// private readonly ITestOutputHelper _testOutputHelper; /// /// 客户仓储 /// private readonly ICustomerRepository _repository; /// /// 客户查询服务 /// private readonly ICustomerQueryService _service; /// /// 测试初始化 /// public CustomerQueryServiceTest( ITestOutputHelperAccessor testOutputHelperAccessor, ICustomerRepository repository, ICustomerQueryService service, ITestUnitOfWork unitOfWork ) : base( unitOfWork ) { _testOutputHelper = testOutputHelperAccessor.Output; _repository = repository; _service = service; } #endregion #region 辅助方法 /// /// 添加客户 /// public async Task AddCustomerAsync() { return ( await AddCustomersAsync( 1 ) ).First(); } /// /// 添加客户列表 /// /// 添加数量 /// 客户姓名 public async Task> AddCustomersAsync( int count = 2, string name = null ) { var customers = CustomerFakeService.GetCustomers( count ); customers.ForEach( customer => { if ( name.IsEmpty() == false ) customer.Name = name; } ); await _repository.AddAsync( customers ); await UnitOfWork.CommitAsync(); UnitOfWork.ClearCache(); return customers.OrderBy( t => t.Code ).ToList(); } /// /// 打印更改跟踪调试信息 /// private void WriteTrackerDebug() { _testOutputHelper.WriteLine( UnitOfWork.GetChangeTrackerDebugView() ); } #endregion #region GetAllAsync /// /// 测试获取全部实体 /// [Fact] public async Task TestGetAllAsync() { var entities = await AddCustomersAsync(); var dtos = await _service.GetAllAsync(); Assert.True( dtos.Count >= entities.Count ); Assert.Equal( entities[0].Name, dtos.Find( t => t.Id == entities[0].Id.ToString() )?.Name ); } #endregion #region GetByIdAsync /// /// 测试通过标识获取实体 /// [Fact] public async Task TestGetByIdAsync() { var entity = await AddCustomerAsync(); var dto = await _service.GetByIdAsync( entity.Id ); Assert.Equal( entity.Name, dto.Name ); } #endregion #region GetByIdsAsync /// /// 测试通过标识列表获取实体列表 /// [Fact] public async Task TestGetByIdsAsync() { var entities = await AddCustomersAsync(); var dtos = await _service.GetByIdsAsync( entities.Select( t => t.Id ).Join() ); Assert.Equal( entities.Count, dtos.Count ); Assert.Equal( entities[0].Name, dtos.Find( t => t.Id == entities[0].Id.ToString() )?.Name ); } #endregion #region QueryAsync /// /// 测试查询 /// [Fact] public async Task TestQueryAsync() { //常量 var name = "TestQueryAsync"; //添加客户实体列表 await AddCustomersAsync(); var entities = await AddCustomersAsync( 5, name ); //查询 var query = new CustomerQuery { Name = name, Order = "Code" }; var dtos = await _service.QueryAsync( query ); WriteTrackerDebug(); Assert.True( dtos.Count == entities.Count ); Assert.Equal( entities[0].Id.ToString(), dtos[0].Id ); Assert.Equal( entities[4].Id.ToString(), dtos[4].Id ); } #endregion #region PageQueryAsync /// /// 测试分页查询 - 第1页 /// [Fact] public async Task TestPageQueryAsync_1() { //常量 var name = "TestPageQueryAsync_1"; //添加客户实体列表 await AddCustomersAsync(); var entities = await AddCustomersAsync( 5, name ); //查询 var query = new CustomerQuery { PageSize = 3, Page = 1, Name = name, Order = "Code" }; var dtos = await _service.PageQueryAsync( query ); WriteTrackerDebug(); Assert.Equal( 3, dtos.Data.Count ); Assert.Equal( entities[0].Id.ToString(), dtos.Data[0].Id ); Assert.Equal( entities[1].Id.ToString(), dtos.Data[1].Id ); Assert.Equal( entities[2].Id.ToString(), dtos.Data[2].Id ); } /// /// 测试分页查询 - 第2页 /// [Fact] public async Task TestPageQueryAsync_2() { //常量 var name = "TestPageQueryAsync_2"; //添加客户实体列表 await AddCustomersAsync(); var entities = await AddCustomersAsync( 5, name ); //查询 var query = new CustomerQuery { PageSize = 3, Page = 2, Name = name, Order = "Code" }; var dtos = await _service.PageQueryAsync( query ); WriteTrackerDebug(); Assert.Equal( 2, dtos.Data.Count ); Assert.Equal( entities[3].Id.ToString(), dtos.Data[0].Id ); Assert.Equal( entities[4].Id.ToString(), dtos.Data[1].Id ); } #endregion } }