Доделал полностью!
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user