лаб11 усложненка

This commit is contained in:
ne_kroman 2025-02-13 18:55:25 +04:00
parent 1ebb95b7b1
commit 723e8f3c72
3 changed files with 61 additions and 14 deletions

View File

@ -0,0 +1,37 @@
using ElectricalRepairServiceContract.Exceptions;
using ElectricalRepairServiceContract.Extensions;
using ElectricalRepairServiceContract.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ElectricalRepairServiceContract.DataModels
{
public class DetailDeliveryDataModel : IValidation
{
public string Id { get; private set; }
public string DetailId { get; private set; }
public int Amount { get; private set; }
public DateTime Date { get; private set; }
public DetailDeliveryDataModel(string id, string detailId, int amount, DateTime date)
{
Id = id;
DetailId = detailId;
Amount = amount;
Date = date;
}
public void Validate()
{
if (Id.IsEmpty())
throw new ValidationException("Field Id is empty");
if (!Id.IsGuid())
throw new ValidationException("The value in the field Id is not a unique identifier");
if (Amount <= 0)
throw new ValidationException("The Amount must be more then 0");
}
}
}

View File

@ -16,16 +16,20 @@ namespace ElectricalRepairServiceContract.DataModels
public string Name { get; private set; } public string Name { get; private set; }
public int Count { get; private set; } public int Count { get; private set; }
public int OldCount { get; private set; } public int OldCount { get; private set; }
public DateTime UpdateDate { get; private set; } public DateTime UpdateDate { get; private set; }
public List<DetailDeliveryDataModel>? DetailsDelivery { get; private set; }
public List<DetailsUseDataModel>? DetailsUses { get; private set; }
public DetailsDataModel(string id, string name, int count, int oldCount, DateTime updateDate) public DetailsDataModel(string id, string name, int count, int oldCount,
DateTime updateDate, List<DetailDeliveryDataModel>? detailsDelivery, List<DetailsUseDataModel>? detailsUses)
{ {
Id = id; Id = id;
Name = name; Name = name;
Count = count; Count = count;
OldCount = oldCount; OldCount = oldCount;
UpdateDate = updateDate; UpdateDate = updateDate;
DetailsDelivery = detailsDelivery;
DetailsUses = detailsUses;
} }
public void Validate() public void Validate()
@ -37,9 +41,9 @@ namespace ElectricalRepairServiceContract.DataModels
if (Name.IsEmpty()) if (Name.IsEmpty())
throw new ValidationException("Field Description is empty"); throw new ValidationException("Field Description is empty");
if (Count < 0) if (Count < 0)
throw new ValidationException("The count must be more then 0"); throw new ValidationException("The count must be positive");
if (OldCount < 0) if (OldCount < 0)
throw new ValidationException("The count must be more then 0"); throw new ValidationException("The count must be positive");
} }
} }
} }

View File

@ -10,41 +10,41 @@ namespace ElectricalRepairServiceTests.DataModelsTests
[Test] [Test]
public void IdIsNullOrEmptyTest() public void IdIsNullOrEmptyTest()
{ {
var details = CreateDataModel(null, "name", 1, 1, DateTime.Now); var details = CreateDataModel(null, "name", 1, 1, DateTime.Now, null, null);
Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>());
details = CreateDataModel(string.Empty, "name", 1, 1, DateTime.Now); details = CreateDataModel(string.Empty, "name", 1, 1, DateTime.Now, null, null);
Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void IdIsNotGuidTest() public void IdIsNotGuidTest()
{ {
var details = CreateDataModel("invalid-id", "name", 1, 1, DateTime.Now); var details = CreateDataModel("invalid-id", "name", 1, 1, DateTime.Now, null, null);
Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void NameIsNullOrEmptyTest() public void NameIsNullOrEmptyTest()
{ {
var details = CreateDataModel(Guid.NewGuid().ToString(), null, 1, 1, DateTime.Now); var details = CreateDataModel(Guid.NewGuid().ToString(), null, 1, 1, DateTime.Now, null, null);
Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>());
details = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, 1, 1, DateTime.Now); details = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, 1, 1, DateTime.Now, null, null);
Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void CountIsNegativeTest() public void CountIsNegativeTest()
{ {
var details = CreateDataModel(Guid.NewGuid().ToString(), "name", -1, 10, DateTime.Now); var details = CreateDataModel(Guid.NewGuid().ToString(), "name", -1, 10, DateTime.Now, null, null);
Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>());
} }
[Test] [Test]
public void OldCountIsNegativeTest() public void OldCountIsNegativeTest()
{ {
var details = CreateDataModel(Guid.NewGuid().ToString(), "name", 10, -1, DateTime.Now); var details = CreateDataModel(Guid.NewGuid().ToString(), "name", 10, -1, DateTime.Now, null, null);
Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>()); Assert.That(() => details.Validate(), Throws.TypeOf<ValidationException>());
} }
@ -56,17 +56,23 @@ namespace ElectricalRepairServiceTests.DataModelsTests
var count = 10; var count = 10;
var oldCount = 10; var oldCount = 10;
var dateTime = DateTime.Now; var dateTime = DateTime.Now;
List<DetailDeliveryDataModel> detailsDelivery = [new DetailDeliveryDataModel(null, null, 0, DateTime.Now)];
List<DetailsUseDataModel> detailsUses = [new DetailsUseDataModel(null, null, 0)];
var details = CreateDataModel(id, name, count, oldCount, dateTime); var details = CreateDataModel(id, name, count, oldCount, dateTime, detailsDelivery, detailsUses);
Assert.That(details.Id, Is.EqualTo(id)); Assert.That(details.Id, Is.EqualTo(id));
Assert.That(details.Name, Is.EqualTo(name)); Assert.That(details.Name, Is.EqualTo(name));
Assert.That(details.Count, Is.EqualTo(count)); Assert.That(details.Count, Is.EqualTo(count));
Assert.That(details.OldCount, Is.EqualTo(oldCount)); Assert.That(details.OldCount, Is.EqualTo(oldCount));
Assert.That(details.UpdateDate, Is.EqualTo(dateTime)); Assert.That(details.UpdateDate, Is.EqualTo(dateTime));
Assert.That(details.DetailsDelivery, Is.EqualTo(detailsDelivery));
Assert.That(details.DetailsUses, Is.EqualTo(detailsUses));
} }
private DetailsDataModel CreateDataModel(string id, string name, int count, int oldCount, DateTime dateTime) private DetailsDataModel CreateDataModel(string id, string name, int count, int oldCount,
=> new DetailsDataModel(id, name, count, oldCount, dateTime); DateTime dateTime, List<DetailDeliveryDataModel>? detailsDelivery, List<DetailsUseDataModel>? detailsUses)
=> new DetailsDataModel(id, name, count, oldCount,
dateTime, detailsDelivery, detailsUses);
} }
} }