using ElectricalRepairServiceContract.DataModels; using ElectricalRepairServiceContract.Enums; using ElectricalRepairServiceContract.Exceptions; using NUnit.Framework; using System; using System.Collections.Generic; namespace ElectricalRepairServiceTests.DataModelsTests { [TestFixture] internal class RequestDataModelTest { [Test] public void IdIsNullOrEmptyTest() { var request = CreateDataModel(null, RequestType.Repair, "Description", 1000, DateTime.Now, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(string.Empty, RequestType.Repair, "Description", 1000, DateTime.Now, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void IdIsNotGuidTest() { var request = CreateDataModel("invalid-id", RequestType.Repair, "Description", 1000, DateTime.Now, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void EmploeeIdIsNullOrEmptyTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), RequestType.Repair, "Description", 1000, DateTime.Now, null, Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); request = CreateDataModel(Guid.NewGuid().ToString(), RequestType.Repair, "Description", 1000, DateTime.Now, string.Empty, Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void EmploeeIdIsNotGuidTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), RequestType.Repair, "Description", 1000, DateTime.Now, "invalid-id", Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void ClientIdIsNotGuidTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), RequestType.Repair, "Description", 1000, DateTime.Now, Guid.NewGuid().ToString(), "invalid-client-id", new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void CostIsNegativeTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), RequestType.Repair, "Description", -1000, DateTime.Now, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void DescriptionIsEmptyTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), RequestType.Repair, string.Empty, 1000, DateTime.Now, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void DetailsUseIsEmptyTest() { var request = CreateDataModel(Guid.NewGuid().ToString(), RequestType.Repair, "Description", 1000, DateTime.Now, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), new List()); Assert.That(() => request.Validate(), Throws.TypeOf()); } [Test] public void AllFieldsCorrectTest() { var id = Guid.NewGuid().ToString(); var requestType = RequestType.Repair; var description = "Valid description"; var cost = 1500; var dateComplete = DateTime.Now; var emploeeId = Guid.NewGuid().ToString(); var clientId = Guid.NewGuid().ToString(); var detailsUses = new List { new DetailsUseDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10) }; var request = CreateDataModel(id, requestType, description, cost, dateComplete, emploeeId, clientId, detailsUses); Assert.That(request.Id, Is.EqualTo(id)); Assert.That(request.RequestType, Is.EqualTo(requestType)); Assert.That(request.Description, Is.EqualTo(description)); Assert.That(request.Cost, Is.EqualTo(cost)); Assert.That(request.DateComplete, Is.EqualTo(dateComplete)); Assert.That(request.EmploeeId, Is.EqualTo(emploeeId)); Assert.That(request.ClientId, Is.EqualTo(clientId)); Assert.That(request.DetailsUse, Is.EqualTo(detailsUses)); } private RequestDataModel CreateDataModel(string id, RequestType requestType, string? description, int cost, DateTime dateComplete, string emploeeId, string? clientId, List? detailsUses) => new RequestDataModel(id, requestType, description, cost, dateComplete, emploeeId, clientId, detailsUses); } }