forked from ddrilling/AsbCloudServer
Add Crud service abstract test.
This commit is contained in:
parent
c9d150d3a9
commit
a8c4fa58e9
@ -69,7 +69,7 @@ namespace AsbCloudApp.Services
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="token"></param>
|
||||
/// <returns>если больше 0 - Id записи, если меньше 0 - код ошибки</returns>
|
||||
/// <returns>количество добавленных, если меньше 0 - код ошибки</returns>
|
||||
Task<int> DeleteAsync(int id, CancellationToken token);
|
||||
}
|
||||
#nullable disable
|
||||
|
@ -94,25 +94,32 @@ namespace AsbCloudInfrastructure.Services
|
||||
{
|
||||
var entity = Convert(item);
|
||||
entity.Id = 0;
|
||||
dbSet.Add(entity);
|
||||
var entry = dbSet.Add(entity);
|
||||
await dbContext.SaveChangesAsync(token);
|
||||
entry.State = EntityState.Detached;
|
||||
return entity.Id;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual Task<int> InsertRangeAsync(IEnumerable<TDto> items, CancellationToken token = default)
|
||||
public virtual async Task<int> InsertRangeAsync(IEnumerable<TDto> items, CancellationToken token = default)
|
||||
{
|
||||
if (!items.Any())
|
||||
return Task.FromResult(0);
|
||||
return 0;
|
||||
var entities = items.Select(i =>
|
||||
{
|
||||
var entity = Convert(i);
|
||||
entity.Id = 0;
|
||||
return entity;
|
||||
});
|
||||
|
||||
dbSet.AddRange(entities);
|
||||
return dbContext.SaveChangesAsync(token);
|
||||
var entries = new List<Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry>(items.Count());
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
var entry = dbSet.Add(entity);
|
||||
entries.Add(entry);
|
||||
}
|
||||
var affected = await dbContext.SaveChangesAsync(token);
|
||||
entries.ForEach(e => e.State = EntityState.Detached);
|
||||
return affected;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@ -122,11 +129,14 @@ namespace AsbCloudInfrastructure.Services
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(e => e.Id == item.Id, token)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
if (existingEntity is null)
|
||||
return ICrudService<TDto>.ErrorIdNotFound;
|
||||
|
||||
var entity = Convert(item);
|
||||
var entry = dbSet.Update(entity);
|
||||
await dbContext.SaveChangesAsync(token);
|
||||
entry.State = EntityState.Detached;
|
||||
return entry.Entity.Id;
|
||||
}
|
||||
|
||||
@ -138,8 +148,10 @@ namespace AsbCloudInfrastructure.Services
|
||||
.FirstOrDefault(e => e.Id == id);
|
||||
if (entity == default)
|
||||
return Task.FromResult(ICrudService<TDto>.ErrorIdNotFound);
|
||||
dbSet.Remove(entity);
|
||||
return dbContext.SaveChangesAsync(token);
|
||||
var entry = dbSet.Remove(entity);
|
||||
var affected = dbContext.SaveChangesAsync(token);
|
||||
entry.State = EntityState.Detached;
|
||||
return affected;
|
||||
}
|
||||
|
||||
protected virtual TDto Convert(TEntity src) => src.Adapt<TDto>();
|
||||
|
@ -1,7 +1,5 @@
|
||||
using AsbCloudApp.Data;
|
||||
using AsbCloudApp.Services;
|
||||
using AsbCloudDb.Model;
|
||||
using AsbCloudInfrastructure.Services;
|
||||
using AsbCloudApp.Services;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@ -9,27 +7,6 @@ using Xunit;
|
||||
|
||||
namespace AsbCloudWebApi.Tests.ServicesTests
|
||||
{
|
||||
public class DepositCrudServiceTest : CrudServiceTestAbstract<DepositDto>
|
||||
{
|
||||
protected override DepositDto MakeNewItem()
|
||||
{
|
||||
var item = new DepositDto
|
||||
{
|
||||
Caption = "test deposit",
|
||||
Latitude = 1,
|
||||
Longitude = 2,
|
||||
Timezone = new SimpleTimezoneDto { Hours = 5, TimezoneId = "test Never-land"}
|
||||
};
|
||||
return item;
|
||||
}
|
||||
|
||||
protected override ICrudService<DepositDto> MakeService()
|
||||
{
|
||||
var dbContext = TestHelpter.MakeTestContext();
|
||||
return new CrudCacheServiceBase<DepositDto, Deposit>(dbContext);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class CrudServiceTestAbstract<TDto>
|
||||
where TDto: AsbCloudApp.Data.IId
|
||||
{
|
||||
@ -37,6 +14,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
|
||||
|
||||
public CrudServiceTestAbstract()
|
||||
{
|
||||
AsbCloudInfrastructure.DependencyInjection.MapsterSetup();
|
||||
service = MakeService();
|
||||
}
|
||||
|
||||
@ -44,11 +22,12 @@ namespace AsbCloudWebApi.Tests.ServicesTests
|
||||
protected abstract TDto MakeNewItem();
|
||||
|
||||
[Fact]
|
||||
public async Task Insert()
|
||||
public async Task<int> Insert()
|
||||
{
|
||||
var newItem = MakeNewItem();
|
||||
var id = await service.InsertAsync(newItem, CancellationToken.None);
|
||||
Assert.True(id > 0);
|
||||
return id;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -64,8 +43,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
|
||||
[Fact]
|
||||
public async Task GetById()
|
||||
{
|
||||
var newItem = MakeNewItem();
|
||||
var id = await service.InsertAsync(newItem, CancellationToken.None);
|
||||
var id = await Insert();
|
||||
var gotItem = await service.GetAsync(id, CancellationToken.None);
|
||||
Assert.True(id > 0);
|
||||
Assert.Equal(id, gotItem.Id);
|
||||
@ -83,14 +61,25 @@ namespace AsbCloudWebApi.Tests.ServicesTests
|
||||
Assert.Equal(count + 1, newCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateAsync_returns_notfound()
|
||||
{
|
||||
var item = MakeNewItem();
|
||||
item.Id = int.MaxValue - 1;
|
||||
var updatedId = await service.UpdateAsync(item, CancellationToken.None);
|
||||
Assert.True(updatedId < 0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateAsync()
|
||||
{
|
||||
var newItem = MakeNewItem();
|
||||
var id = await service.InsertAsync(newItem, CancellationToken.None);
|
||||
var updatedId = await service.UpdateAsync(newItem, CancellationToken.None);
|
||||
Assert.True(id > 0);
|
||||
Assert.Equal(id, updatedId);
|
||||
newItem.Id = await service.InsertAsync(newItem, CancellationToken.None);
|
||||
var item = MakeNewItem();
|
||||
item.Id = newItem.Id;
|
||||
var updatedId = await service.UpdateAsync(item, CancellationToken.None);
|
||||
Assert.True(newItem.Id > 0);
|
||||
Assert.Equal(newItem.Id, updatedId);
|
||||
}
|
||||
|
||||
[Fact]
|
@ -0,0 +1,28 @@
|
||||
using AsbCloudApp.Data;
|
||||
using AsbCloudApp.Services;
|
||||
using AsbCloudDb.Model;
|
||||
using AsbCloudInfrastructure.Services;
|
||||
|
||||
namespace AsbCloudWebApi.Tests.ServicesTests
|
||||
{
|
||||
public class DepositCrudCacheServiceTest : CrudServiceTestAbstract<DepositDto>
|
||||
{
|
||||
protected override DepositDto MakeNewItem()
|
||||
{
|
||||
var item = new DepositDto
|
||||
{
|
||||
Caption = "test deposit",
|
||||
Latitude = 1,
|
||||
Longitude = 2,
|
||||
Timezone = new SimpleTimezoneDto { Hours = 5, TimezoneId = "test Never-land"}
|
||||
};
|
||||
return item;
|
||||
}
|
||||
|
||||
protected override ICrudService<DepositDto> MakeService()
|
||||
{
|
||||
var dbContext = TestHelpter.MakeTestContext();
|
||||
return new CrudCacheServiceBase<DepositDto, Deposit>(dbContext);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user