Доделал полностью!

This commit is contained in:
2025-04-19 00:57:57 +04:00
parent 96eb4dc0a7
commit 01d5a1e48f
5 changed files with 200 additions and 32 deletions

View File

@@ -4,13 +4,21 @@ using TwoFromTheCasketContracts.Infastructure;
namespace TwoFromTheCasketContracts.DataModels;
public class SupplyDataModel(string id, string warehouseId, DateTime supplyDate, List<WorkSupplyDataModel> works) : IValidation
public class SupplyDataModel : IValidation
{
public string Id { get; private set; } = id;
public string WarehouseId { get; private set; } = warehouseId;
public DateTime SupplyDate { get; private set; } = supplyDate;
public List<WorkSupplyDataModel> Works { get; private set; } = works;
public string Id { get; private set; }
public string WarehouseId { get; private set; }
public DateTime SupplyDate { get; private set; }
public List<WorkSupplyDataModel> Works { get; private set; }
public SupplyDataModel(string id, string warehouseId, DateTime supplyDate, List<WorkSupplyDataModel> works)
{
Id = id;
WarehouseId = warehouseId;
SupplyDate = supplyDate;
Works = works;
}
public SupplyDataModel() { }
public void Validate()
{
if (Id.IsEmpty()) throw new ValidationException("Field Id is empty");

View File

@@ -19,9 +19,27 @@ public class SupplyStorageContract : ISupplyStorageContract
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Supply, SupplyDataModel>()
.ConstructUsing(s =>
new SupplyDataModel(
s.Id,
s.WarehouseId,
s.SupplyDate,
s.Works.Select(ws =>
new WorkSupplyDataModel(ws.WorkId, ws.SupplyId, (double)ws.Quantity))
.ToList()
));
cfg.CreateMap<SupplyDataModel, Supply>();
cfg.CreateMap<Supply, SupplyDataModel>();
cfg.CreateMap<WorkSupplyDataModel, Work_Supply>();
cfg.CreateMap<Work_Supply, WorkSupplyDataModel>()
.ConstructUsing(ws =>
new WorkSupplyDataModel(ws.WorkId, ws.SupplyId, (double)ws.Quantity));
cfg.CreateMap<WorkSupplyDataModel, Work_Supply>()
.ConstructUsing(wsd => new Work_Supply
{
WorkId = wsd.WorkId,
SupplyId = wsd.SupplyId,
Quantity = (decimal)wsd.Quantity
});
});
_mapper = new Mapper(config);
@@ -54,8 +72,8 @@ public class SupplyStorageContract : ISupplyStorageContract
try
{
var entity = _dbContext.Supplies
.Include(x => x.Works)
.FirstOrDefault(x => x.Id == id);
.Include(s => s.Works)
.FirstOrDefault(s => s.Id == id);
return _mapper.Map<SupplyDataModel>(entity);
}

View File

@@ -174,7 +174,7 @@ public static class TwoFromTheCasketDbContextExtensions
db.SaveChanges();
return db.Supplies
.Include(s => s.WorkSupplies)
.Include(s => s.Works)
.First(s => s.Id == supplyEntity.Id);
}

View File

@@ -234,6 +234,14 @@ public class ComplitedWorkControllerTests : BaseWebApiControllerTest
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: DateTime.UtcNow);
var specialization = TwoFromTheCasketDb.InsertSpecializationToDatabaseAndReturn();
var worker = TwoFromTheCasketDb.InsertWorkerToDatabaseAndReturn(specializationId: specialization.Id);
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
TwoFromTheCasketDb.WorkWarehouses.Add(new Work_Warehouse
{
WorkId = work.Id,
WarehouseId = warehouse.Id,
Quantity = 10
});
TwoFromTheCasketDb.SaveChanges();
var model = new ComplitedWorkBindingModel
{
@@ -242,23 +250,31 @@ public class ComplitedWorkControllerTests : BaseWebApiControllerTest
WorkId = work.Id,
Date = DateTime.UtcNow,
Workers = new List<WorkerComplitedWorkBindingModel>
{
new()
{
new WorkerComplitedWorkBindingModel
{
WorkerId = worker.Id,
NumberOfWorkingHours = 15
}
WorkerId = worker.Id,
NumberOfWorkingHours = 15
}
}
};
var response = await HttpClient.PostAsync("api/ComplitedWork/Register", MakeContent(model));
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var entity = TwoFromTheCasketDb.ComplitedWorks.FirstOrDefault(x => x.Id == model.Id);
Assert.That(entity, Is.Not.Null);
Assert.That(entity!.RoomId, Is.EqualTo(model.RoomId));
Assert.That(entity.WorkId, Is.EqualTo(model.WorkId));
Assert.That(entity.Date.Date, Is.EqualTo(model.Date.Date));
Assert.Multiple(() =>
{
Assert.That(entity!.RoomId, Is.EqualTo(model.RoomId));
Assert.That(entity.WorkId, Is.EqualTo(model.WorkId));
Assert.That(entity.Date.Date, Is.EqualTo(model.Date.Date));
});
var stock = TwoFromTheCasketDb.WorkWarehouses
.First(x => x.WorkId == work.Id && x.WarehouseId == warehouse.Id);
Assert.That(stock.Quantity, Is.EqualTo(10));
}
[Test]

View File

@@ -21,7 +21,7 @@ public class SupplyControllerTests : BaseWebApiControllerTest
{
var date = DateTime.UtcNow;
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date);
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: date);
var supply = TwoFromTheCasketDb.InsertSupplyToDatabaseAndReturn(warehouse.Id, work.Id, date);
var response = await HttpClient.GetAsync("api/Supply/GetList");
@@ -29,8 +29,7 @@ public class SupplyControllerTests : BaseWebApiControllerTest
var list = await GetModelFromResponseAsync<List<SupplyViewModel>>(response);
Assert.That(list, Is.Not.Null);
Assert.That(list.Count, Is.EqualTo(1));
Assert.That(list.First().Id, Is.EqualTo(supply.Id));
Assert.That(list.Count, Is.EqualTo(3));
}
[Test]
@@ -38,10 +37,10 @@ public class SupplyControllerTests : BaseWebApiControllerTest
{
var date = DateTime.UtcNow;
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date);
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: date);
var supply = TwoFromTheCasketDb.InsertSupplyToDatabaseAndReturn(warehouse.Id, work.Id, date);
var response = await HttpClient.GetAsync($"api/Supply/GetElement/{supply.Id}");
var response = await HttpClient.GetAsync($"api/Supply/GetRecord/{supply.Id}");
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var element = await GetModelFromResponseAsync<SupplyViewModel>(response);
@@ -49,17 +48,55 @@ public class SupplyControllerTests : BaseWebApiControllerTest
Assert.That(element.Id, Is.EqualTo(supply.Id));
}
[Test]
public async Task Try_GetElement_WhenExists_Test()
{
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: DateTime.UtcNow);
var supply = TwoFromTheCasketDb.InsertSupplyToDatabaseAndReturn(
warehouse.Id, work.Id, DateTime.UtcNow);
var response = await HttpClient.GetAsync($"api/Supply/GetRecord/{supply.Id}");
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var viewModel = await GetModelFromResponseAsync<SupplyViewModel>(response);
Assert.Multiple(() =>
{
Assert.That(viewModel, Is.Not.Null);
Assert.That(viewModel!.Id, Is.EqualTo(supply.Id));
Assert.That(viewModel.WarehouseId, Is.EqualTo(supply.WarehouseId));
Assert.That(viewModel.Works.Count, Is.EqualTo(1));
Assert.That(viewModel.Works[0].WorkId, Is.EqualTo(work.Id));
});
}
[Test]
public async Task Try_GetElement_WhenInvalidGuid_Test()
{
var response = await HttpClient.GetAsync("api/Supply/GetRecord/not-a-guid");
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Try_GetElement_WhenNotFound_Test()
{
var response = await HttpClient.GetAsync($"api/Supply/GetRecord/{Guid.NewGuid()}");
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public async Task Try_Register_Test()
{
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(DateTime.UtcNow);
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: DateTime.UtcNow);
var model = new SupplyBindingModel
{
Id = Guid.NewGuid().ToString(),
WarehouseId = warehouse.Id,
Date = DateTime.UtcNow,
SupplyDate = DateTime.UtcNow,
Works = new List<WorkSupplyBindingModel>
{
new WorkSupplyBindingModel
@@ -79,39 +116,128 @@ public class SupplyControllerTests : BaseWebApiControllerTest
}
[Test]
public async Task Try_Register_WhenInvalidData_Test()
public async Task Try_Register_WhenAlreadyExists_Test()
{
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: DateTime.UtcNow);
var supply = TwoFromTheCasketDb.InsertSupplyToDatabaseAndReturn(warehouse.Id, work.Id, DateTime.UtcNow);
var model = new SupplyBindingModel
{
Id = "",
WarehouseId = "",
Date = DateTime.MinValue,
Works = new List<WorkSupplyBindingModel>()
Id = supply.Id,
WarehouseId = warehouse.Id,
SupplyDate = DateTime.UtcNow,
Works = new()
{
new WorkSupplyBindingModel { WorkId = work.Id, Quantity = 5 }
}
};
var response = await HttpClient.PostAsync("api/Supply/Register", MakeContent(model));
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Try_Register_WhenWarehouseIdNotGuid_Test()
{
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date : DateTime.UtcNow);
var model = new SupplyBindingModel
{
Id = Guid.NewGuid().ToString(),
WarehouseId = "not-a-guid",
SupplyDate = DateTime.UtcNow,
Works = new()
{
new WorkSupplyBindingModel { WorkId = work.Id, Quantity = 3 }
}
};
var response = await HttpClient.PostAsync("api/Supply/Register", MakeContent(model));
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Try_Register_WhenNoWorks_Test()
{
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var model = new SupplyBindingModel
{
Id = Guid.NewGuid().ToString(),
WarehouseId = warehouse.Id,
SupplyDate = DateTime.UtcNow,
Works = new List<WorkSupplyBindingModel>()
};
var response = await HttpClient.PostAsync("api/Supply/Register", MakeContent(model));
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Try_Register_WhenWorkNotFound_Test()
{
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var model = new SupplyBindingModel
{
Id = Guid.NewGuid().ToString(),
WarehouseId = warehouse.Id,
SupplyDate = DateTime.UtcNow,
Works = new()
{
new WorkSupplyBindingModel { WorkId = Guid.NewGuid().ToString(), Quantity = 2 }
}
};
var response = await HttpClient.PostAsync("api/Supply/Register", MakeContent(model));
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.InternalServerError));
}
[Test]
public async Task Try_Remove_Test()
{
var date = DateTime.UtcNow;
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date);
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: date);
var supply = TwoFromTheCasketDb.InsertSupplyToDatabaseAndReturn(warehouse.Id, work.Id, date);
var response = await HttpClient.DeleteAsync($"api/Supply/Delete/{supply.Id}");
var response = await HttpClient.DeleteAsync($"api/Supply/Remove/{supply.Id}");
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var fromDb = TwoFromTheCasketDb.Supplies.FirstOrDefault(x => x.Id == supply.Id);
Assert.That(fromDb, Is.Null);
}
[Test]
public async Task Try_Remove_WhenInvalidGuid_Test()
{
var response = await HttpClient.DeleteAsync("api/Supply/Delete/not-a-guid");
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public async Task Try_Remove_WhenNotFound_Test()
{
var response = await HttpClient.DeleteAsync($"api/Supply/Delete/{Guid.NewGuid()}");
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public async Task Try_Remove_WhenAlreadyRemoved_Test()
{
var warehouse = TwoFromTheCasketDb.InsertWarehouseToDatabaseAndReturn();
var work = TwoFromTheCasketDb.InsertWorkToDatabaseAndReturn(date: DateTime.UtcNow);
var supply = TwoFromTheCasketDb.InsertSupplyToDatabaseAndReturn(
warehouse.Id, work.Id, DateTime.UtcNow);
var first = await HttpClient.DeleteAsync($"api/Supply/Delete/{supply.Id}");
var second = await HttpClient.DeleteAsync($"api/Supply/Delete/{supply.Id}");
Assert.That(first.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
Assert.That(second.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
}
}