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", false, CreateSubDataModel() , DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void IdIsNotGuidTest() { var request = CreateDataModel("id", Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void WorkerIdIsNullOrEmptyTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), null, "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void WorkerIdIsNotGuidTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), "workerId", "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void EmailIsInvalidTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "invalid_email", false, CreateSubDataModel(), DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "@", false, CreateSubDataModel(), DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void SoftwaresIsNullOrEmptyTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, null, DateTime.UtcNow); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, new List(), DateTime.UtcNow); 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, isCancel, softwares, DateTime.UtcNow); 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, bool isCancel, List? softwares, DateTime requestDate) => new(id, workerId, email, isCancel, softwares, requestDate ); private static List CreateSubDataModel() => [new InstallationRequestDataModel(Guid.NewGuid().ToString(), "SoftwareName", 1, 10)]; }