Фикс багов

This commit is contained in:
2025-02-08 10:28:34 +04:00
parent 1f77f2ef27
commit 34ff2d61e8
11 changed files with 259 additions and 59 deletions

View File

@@ -6,9 +6,10 @@ using TwoFromTheCasketContracts.Infastructure;
namespace TwoFromTheCasketContracts.DataModels;
public class RoomsDataModel(string id, string address, double space, TypeRoom type) : IValidation
public class RoomDataModel(string id, string ownerFIO, string address, double space, TypeRoom type) : IValidation
{
public string Id { get; private set; } = id;
public string OwnerFIO { get; private set; } = ownerFIO;
public string Address { get; private set; } = address;
public double Space { get; private set; } = space;
public TypeRoom Type { get; private set; } = type;
@@ -19,6 +20,8 @@ public class RoomsDataModel(string id, string address, double space, TypeRoom ty
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 (OwnerFIO.IsEmpty())
throw new ValidationException("Field OwnerFIO is empty");
if (Address.IsEmpty())
throw new ValidationException("Field Address is empty");
if (!Regex.IsMatch(Address, @"^([А-ЯЁа-яё0-9\s.,-]+),\s?д\.\s?\d+(,\s?кв\.\s?\d+)?$"))

View File

@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using TwoFromTheCasketContracts.Enums;
using TwoFromTheCasketContracts.Exceptions;
using TwoFromTheCasketContracts.Extensions;
using TwoFromTheCasketContracts.Infastructure;
namespace TwoFromTheCasketContracts.DataModels;
public class RoomHistoryDataModel(string roomId, string ownerFIO, TypeRoom type, DateTime dateChange) : IValidation
{
public string RoomId { get; private set; } = roomId;
public string OwnerFIO { get; private set; } = ownerFIO;
public TypeRoom Type { get; private set; } = type;
public DateTime DateChange { get; private set; } = dateChange;
public void Validate()
{
if (RoomId.IsEmpty())
throw new ValidationException("Field RoomId is empty");
if (!RoomId.IsGuid())
throw new ValidationException("The value in the field RoomId is not a unique identifier");
if (OwnerFIO.IsEmpty())
throw new ValidationException("Field OwnerFIO is empty");
if (Type == TypeRoom.None)
throw new ValidationException("Field Type is empty");
}
}

View File

@@ -4,7 +4,7 @@ using TwoFromTheCasketContracts.Infastructure;
namespace TwoFromTheCasketContracts.DataModels;
public class SalaryHistoryDataModel(string id, string workerId, double sum) : IValidation
public class SalaryDataModel(string id, string workerId, double sum) : IValidation
{
public string Id { get; private set; } = id;
public string WorkerId { get; private set; } = workerId;

View File

@@ -0,0 +1,32 @@
using TwoFromTheCasketContracts.Extensions;
using TwoFromTheCasketContracts.Exceptions;
using TwoFromTheCasketContracts.Infastructure;
namespace TwoFromTheCasketContracts.DataModels;
public class Specialization(string id, string specializationId, string specializationName, double salary,
bool isActual, DateTime changeDate) : IValidation
{
public string Id { get; private set; } = id;
public string SpecializationId { get; private set; } = specializationId;
public string SpecializationName { get; private set; } = specializationName;
public double Salary { get; private set; } = salary;
public bool IsActual { get; private set; } = isActual;
public DateTime ChangeDate { get; private set; } = changeDate;
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 (SpecializationId.IsEmpty())
throw new ValidationException("Field SpecializationId is empty");
if (!SpecializationId.IsGuid())
throw new ValidationException("The value in the field SpecializationId is not a unique identifier");
if (SpecializationName.IsEmpty())
throw new ValidationException("Field SpecializationName is empty");
if (Salary <= 0)
throw new ValidationException("Field Salary is empty");
}
}

View File

@@ -6,17 +6,14 @@ using TwoFromTheCasketContracts.Enums;
namespace TwoFromTheCasketContracts.DataModels;
public class WorkerDataModel(string id, string fio, Specializations specialization, double salary, string phoneNumber,
DateTime dateBirthday) : IValidation
public class WorkerDataModel(string id, string fio, string specializationId, string phoneNumber, DateTime dateBirthday) : IValidation
{
public string Id { get; private set; } = id;
public string FIO { get; private set; } = fio;
public Specializations Specialization { get; private set; } = specialization;
public double Salary { get; private set; } = salary;
public string SpecializationId { get; private set; } = specializationId;
public string PhoneNumber { get; private set; } = phoneNumber;
public DateTime DateBirthDay { get; private set; } = dateBirthday;
public DateTime ValidFrom { get; private set; } = DateTime.Today;
public DateTime? ValidTo { get; private set; } = null;
public bool IsCurrent { get; private set; } = true;
@@ -28,10 +25,10 @@ public class WorkerDataModel(string id, string fio, Specializations specializati
throw new ValidationException("The value in the field Id is not a unique identifier");
if (FIO.IsEmpty())
throw new ValidationException("Field FIO is empty");
if(Specialization == Specializations.None)
throw new ValidationException("Field Specialization is empty");
if(Salary <= 0)
throw new ValidationException("Field Salary is empty");
if (SpecializationId.IsEmpty())
throw new ValidationException("Field SpecializationId is empty");
if (!SpecializationId.IsGuid())
throw new ValidationException("The value in the field SpecializationId is not a unique identifier");
if (PhoneNumber.IsEmpty())
throw new ValidationException("Field PhoneNumber is empty");
if (!Regex.IsMatch(PhoneNumber, @"^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\-]?)?[\d\- ]{7,10}$"))

View File

@@ -1,19 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TwoFromTheCasketContracts.Enums;
[Flags]
public enum Specializations
{
None = 0,
Plasterer = 1,
Painter = 2,
Carpenter = 4,
Electrician = 8,
Plumber = 16,
Mason = 32
}

View File

@@ -6,46 +6,46 @@ using System.Text.RegularExpressions;
namespace TwoFromTheCasketTests.DataModelsTests;
[TestFixture]
internal class RoomsDataModelTests
internal class RoomDataModelTests
{
[Test]
public void IdIsNullOrEmptyTest()
{
var room = CreateDataModel(null, "Ленина, д. 5", 50, TypeRoom.Office);
var room = CreateDataModel(null, "Леонид Иванов Николаевич", "Ленина, д. 5", 50, TypeRoom.Office);
Assert.That(() => room.Validate(), Throws.TypeOf<ValidationException>());
room = CreateDataModel(string.Empty, "Ленина, д. 5", 50, TypeRoom.Office);
room = CreateDataModel(string.Empty, "Леонид Иванов Николаевич", "Ленина, д. 5", 50, TypeRoom.Office);
Assert.That(() => room.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void IdIsNotGuidTest()
{
var room = CreateDataModel("not-a-guid", "Ленина, д. 5", 50, TypeRoom.Office);
var room = CreateDataModel("not-a-guid", "Леонид Иванов Николаевич", "Ленина, д. 5", 50, TypeRoom.Office);
Assert.That(() => room.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void AddressIsEmptyOrInvalidTest()
{
var room = CreateDataModel(Guid.NewGuid().ToString(), "", 50, TypeRoom.Office);
var room = CreateDataModel(Guid.NewGuid().ToString(), "Леонид Иванов Николаевич", "", 50, TypeRoom.Office);
Assert.That(() => room.Validate(), Throws.TypeOf<ValidationException>());
room = CreateDataModel(Guid.NewGuid().ToString(), "Invalid Address", 50, TypeRoom.Office);
room = CreateDataModel(Guid.NewGuid().ToString(), "Леонид Иванов Николаевич", "Invalid Address", 50, TypeRoom.Office);
Assert.That(() => room.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SpaceIsNegativeOrZeroTest()
{
var room = CreateDataModel(Guid.NewGuid().ToString(), "Ленина, д. 5", 0, TypeRoom.Office);
var room = CreateDataModel(Guid.NewGuid().ToString(), "Леонид Иванов Николаевич", "Ленина, д. 5", 0, TypeRoom.Office);
Assert.That(() => room.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void TypeIsNoneTest()
{
var room = CreateDataModel(Guid.NewGuid().ToString(), "Ленина, д. 5", 50, TypeRoom.None);
var room = CreateDataModel(Guid.NewGuid().ToString(), "Леонид Иванов Николаевич", "Ленина, д. 5", 50, TypeRoom.None);
Assert.That(() => room.Validate(), Throws.TypeOf<ValidationException>());
}
@@ -53,22 +53,24 @@ internal class RoomsDataModelTests
public void AllFieldsIsCorrectTest()
{
var id = Guid.NewGuid().ToString();
var ownersFIO = "Леонид Иванов Николаевич";
var address = "Ленина, д. 5";
var space = 50.0;
var type = TypeRoom.Office;
var room = CreateDataModel(id, address, space, type);
var room = CreateDataModel(id, ownersFIO, address, space, type);
Assert.That(() => room.Validate(), Throws.Nothing);
Assert.Multiple(() =>
{
Assert.That(room.Id, Is.EqualTo(id));
Assert.That(room.OwnerFIO, Is.EqualTo(ownersFIO));
Assert.That(room.Address, Is.EqualTo(address));
Assert.That(room.Space, Is.EqualTo(space));
Assert.That(room.Type, Is.EqualTo(type));
});
}
private static RoomsDataModel CreateDataModel(string? id, string address, double space, TypeRoom type)
=> new(id, address, space, type);
private static RoomDataModel CreateDataModel(string? id, string ownersFIO, string address, double space, TypeRoom type)
=> new(id, ownersFIO, address, space, type);
}

View File

@@ -0,0 +1,63 @@
using TwoFromTheCasketContracts.DataModels;
using TwoFromTheCasketContracts.Enums;
using TwoFromTheCasketContracts.Exceptions;
namespace TwoFromTheCasketTests.DataModelsTests;
[TestFixture]
internal class RoomHistoryDataModelTests
{
[Test]
public void RoomIdIsNullOrEmptyTest()
{
var roomHistory = CreateDataModel(null, "John Doe", TypeRoom.Office, DateTime.UtcNow);
Assert.That(() => roomHistory.Validate(), Throws.TypeOf<ValidationException>());
roomHistory = CreateDataModel(string.Empty, "John Doe", TypeRoom.Office, DateTime.UtcNow);
Assert.That(() => roomHistory.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void RoomIdIsNotGuidTest()
{
var roomHistory = CreateDataModel("not-a-guid", "John Doe", TypeRoom.Office, DateTime.UtcNow);
Assert.That(() => roomHistory.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void OwnerFIOIsEmptyTest()
{
var roomHistory = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, TypeRoom.Office, DateTime.UtcNow);
Assert.That(() => roomHistory.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void TypeIsNoneTest()
{
var roomHistory = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", TypeRoom.None, DateTime.UtcNow);
Assert.That(() => roomHistory.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void AllFieldsIsCorrectTest()
{
var roomId = Guid.NewGuid().ToString();
var ownerFIO = "John Doe";
var type = TypeRoom.Office;
var dateChange = DateTime.UtcNow;
var roomHistory = CreateDataModel(roomId, ownerFIO, type, dateChange);
Assert.That(() => roomHistory.Validate(), Throws.Nothing);
Assert.Multiple(() =>
{
Assert.That(roomHistory.RoomId, Is.EqualTo(roomId));
Assert.That(roomHistory.OwnerFIO, Is.EqualTo(ownerFIO));
Assert.That(roomHistory.Type, Is.EqualTo(type));
Assert.That(roomHistory.DateChange, Is.EqualTo(dateChange));
});
}
private static RoomHistoryDataModel CreateDataModel(string? roomId, string ownerFIO, TypeRoom type, DateTime dateChange)
=> new(roomId, ownerFIO, type, dateChange);
}

View File

@@ -4,7 +4,7 @@ using TwoFromTheCasketContracts.Exceptions;
namespace TwoFromTheCasketTests.DataModelsTests;
[TestFixture]
internal class SalaryHistoryDataModelTests
internal class SalaryDataModelTests
{
[Test]
public void IdIsNullOrEmptyTest()
@@ -58,6 +58,6 @@ internal class SalaryHistoryDataModelTests
});
}
private static SalaryHistoryDataModel CreateDataModel(string? id, string? workerId, double sum)
private static SalaryDataModel CreateDataModel(string? id, string? workerId, double sum)
=> new(id, workerId, sum);
}

View File

@@ -0,0 +1,83 @@
using TwoFromTheCasketContracts.DataModels;
using TwoFromTheCasketContracts.Exceptions;
namespace TwoFromTheCasketTests.DataModelsTests;
[TestFixture]
internal class SpecializationDataModelTests
{
[Test]
public void IdIsNullOrEmptyTest()
{
var specialization = CreateDataModel(null, Guid.NewGuid().ToString(), "Engineer", 60000, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
specialization = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), "Engineer", 60000, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void IdIsNotGuidTest()
{
var specialization = CreateDataModel("not-a-guid", Guid.NewGuid().ToString(), "Engineer", 60000, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SpecializationIdIsNullOrEmptyTest()
{
var specialization = CreateDataModel(Guid.NewGuid().ToString(), null, "Engineer", 60000, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
specialization = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "Engineer", 60000, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SpecializationIdIsNotGuidTest()
{
var specialization = CreateDataModel(Guid.NewGuid().ToString(), "not-a-guid", "Engineer", 60000, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SpecializationNameIsEmptyTest()
{
var specialization = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), string.Empty, 60000, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SalaryIsNegativeOrZeroTest()
{
var specialization = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "Engineer", 0, true, DateTime.UtcNow);
Assert.That(() => specialization.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void AllFieldsIsCorrectTest()
{
var id = Guid.NewGuid().ToString();
var specializationId = Guid.NewGuid().ToString();
var specializationName = "Engineer";
var salary = 60000;
var isActual = true;
var changeDate = DateTime.UtcNow;
var specialization = CreateDataModel(id, specializationId, specializationName, salary, isActual, changeDate);
Assert.That(() => specialization.Validate(), Throws.Nothing);
Assert.Multiple(() =>
{
Assert.That(specialization.Id, Is.EqualTo(id));
Assert.That(specialization.SpecializationId, Is.EqualTo(specializationId));
Assert.That(specialization.SpecializationName, Is.EqualTo(specializationName));
Assert.That(specialization.Salary, Is.EqualTo(salary));
Assert.That(specialization.IsActual, Is.EqualTo(isActual));
Assert.That(specialization.ChangeDate, Is.EqualTo(changeDate));
});
}
private static Specialization CreateDataModel(string? id, string? specializationId, string specializationName, double salary, bool isActual, DateTime changeDate)
=> new(id, specializationId, specializationName, salary, isActual, changeDate);
}

View File

@@ -10,48 +10,59 @@ internal class WorkerDataModelTests
[Test]
public void IdIsNullOrEmptyTest()
{
var worker = CreateDataModel(null, "John Doe", Specializations.Plasterer, 50000, "+7-777-777-77-77", DateTime.Now.AddYears(-25));
var worker = CreateDataModel(null, "John Doe", "1", "+7-777-777-77-77", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
worker = CreateDataModel(string.Empty, "John Doe", Specializations.Plasterer, 50000, "+7-777-777-77-77", DateTime.Now.AddYears(-25));
worker = CreateDataModel(string.Empty, "John Doe", "1", "+7-777-777-77-77", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void IdIsNotGuidTest()
{
var worker = CreateDataModel("not-a-guid", "John Doe", Specializations.Plasterer, 50000, "+7-777-777-77-77", DateTime.Now.AddYears(-25));
var worker = CreateDataModel("not-a-guid", "John Doe", "1", "+7-777-777-77-77", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void FIOIsEmptyTest()
{
var worker = CreateDataModel(Guid.NewGuid().ToString(), "", Specializations.Plasterer, 50000, "+7-777-777-77-77", DateTime.Now.AddYears(-25));
var worker = CreateDataModel(Guid.NewGuid().ToString(), "", "1", "+7-777-777-77-77", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SpecializationIsNoneTest()
public void SpecializationIdIsNullOrEmptyTest()
{
var worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", Specializations.None, 50000, "+7-777-777-77-77", DateTime.Now.AddYears(-25));
var worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", null, "+7-777-777-77-77", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", string.Empty, "+7-777-777-77-77", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void SpecializationIdIsNotGuidTest()
{
var worker = CreateDataModel("not-a-guid", "John Doe", "not-a-guid", "+7-777-777-77-77", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void PhoneNumberIsEmptyOrInvalidTest()
{
var worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", Specializations.Plasterer, 50000, string.Empty, DateTime.Now.AddYears(-25));
var worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", "1", string.Empty, DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", Specializations.Plasterer, 50000, "invalid-phone", DateTime.Now.AddYears(-25));
worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", "1", "invalid-phone", DateTime.Now.AddYears(-25));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
}
[Test]
public void DateBirthDayIsTooYoungTest()
{
var worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", Specializations.Plasterer, 50000, "+7-777-777-77-77", DateTime.Now.AddYears(-15));
var worker = CreateDataModel(Guid.NewGuid().ToString(), "John Doe", "1", "+7-777-777-77-77", DateTime.Now.AddYears(-15));
Assert.That(() => worker.Validate(), Throws.TypeOf<ValidationException>());
}
@@ -60,25 +71,23 @@ internal class WorkerDataModelTests
{
var id = Guid.NewGuid().ToString();
var fio = "John Doe";
var specialization = Specializations.Plasterer;
var salary = 50000;
var specializationId = Guid.NewGuid().ToString();
var phoneNumber = "+7-777-777-77-77";
var dateBirthday = DateTime.Now.AddYears(-25);
var worker = CreateDataModel(id, fio, specialization, salary, phoneNumber, dateBirthday);
var worker = CreateDataModel(id, fio, specializationId, phoneNumber, dateBirthday);
Assert.That(() => worker.Validate(), Throws.Nothing);
Assert.Multiple(() =>
{
Assert.That(worker.Id, Is.EqualTo(id));
Assert.That(worker.FIO, Is.EqualTo(fio));
Assert.That(worker.Specialization, Is.EqualTo(specialization));
Assert.That(worker.Salary, Is.EqualTo(salary));
Assert.That(worker.SpecializationId, Is.EqualTo(specializationId));
Assert.That(worker.PhoneNumber, Is.EqualTo(phoneNumber));
Assert.That(worker.DateBirthDay, Is.EqualTo(dateBirthday));
});
}
private static WorkerDataModel CreateDataModel(string? id, string fio, Specializations specialization, double salary, string phoneNumber, DateTime dateBirthday)
=> new(id, fio, specialization, salary, phoneNumber, dateBirthday);
private static WorkerDataModel CreateDataModel(string? id, string fio, string specializationId, string phoneNumber, DateTime dateBirthday)
=> new(id, fio, specializationId, phoneNumber, dateBirthday);
}