using SmallSoftwareContracts.DataModels; using SmallSoftwareContracts.Exceptions; namespace SmallSoftwareTests.DataModelsTests; [TestFixture] internal class RequestDataModelTests { [Test] public void IdIsNullOrEmptyTest() { var request = CreateDataModel(null, Guid.NewGuid().ToString(), "test@example.com", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), "test@example.com", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void IdIsNotGuidTest() { var request = CreateDataModel("id", Guid.NewGuid().ToString(), "test@example.com", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void WorkerIdIsNullOrEmptyTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), null, "test@example.com", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "test@example.com", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void WorkerIdIsNotGuidTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), "workerId", "test@example.com", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void EmailIsInvalidTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "invalid_email", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "", 10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void SumIsLessOrZeroTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 0, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", -10, false, CreateSubDataModel()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void SoftwaresIsNullOrEmptyTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10, false, null); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10, false, new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void AllFieldsAreCorrectTest() { var requestId = Guid.NewGuid().ToString(); var workerId = Guid.NewGuid().ToString(); var email = "test@example.com"; var sum = 10; var isCancel = true; var softwares = CreateSubDataModel(); var request = CreateDataModel(requestId, workerId, email, sum, isCancel, softwares); Assert.That(() => request.Validate(), Throws.Nothing); Assert.Multiple(() => { Assert.That(request.Id, Is.EqualTo(requestId)); Assert.That(request.WorkerId, Is.EqualTo(workerId)); Assert.That(request.Email, Is.EqualTo(email)); Assert.That(request.Sum, Is.EqualTo(sum)); Assert.That(request.IsCancel, Is.EqualTo(isCancel)); Assert.That(request.Softwares, Is.EquivalentTo(softwares)); }); } private static RequestDataModel CreateDataModel(string? id, string? workerId, string email, double sum, bool isCancel, List? softwares) => new(id, workerId, email, sum, isCancel, softwares); private static List CreateSubDataModel() => [new InstallationRequestDataModel(Guid.NewGuid().ToString(), "SoftwareName", 1, 10)]; }