diff --git a/MagicCarpetProject/MagicCarpetTests/BusinessLogicContractsTests/TourBusinessLogicContractTests.cs b/MagicCarpetProject/MagicCarpetTests/BusinessLogicContractsTests/TourBusinessLogicContractTests.cs index c02d853..fc373d8 100644 --- a/MagicCarpetProject/MagicCarpetTests/BusinessLogicContractsTests/TourBusinessLogicContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/BusinessLogicContractsTests/TourBusinessLogicContractTests.cs @@ -39,9 +39,9 @@ internal class TourBusinessLogicContractTests //Arrange var listOriginal = new List() { - new(Guid.NewGuid().ToString(), "name 1", "country1", 15.5, TourType.Ski, [],[]), - new(Guid.NewGuid().ToString(), "name 2", "country2", 10.1, TourType.Sightseeing,[],[]), - new(Guid.NewGuid().ToString(), "name 3", "country3", 13.9, TourType.Beach,[],[]), + new(Guid.NewGuid().ToString(), "name 1", "country1", 15.5, TourType.Ski), + new(Guid.NewGuid().ToString(), "name 2", "country2", 10.1, TourType.Sightseeing), + new(Guid.NewGuid().ToString(), "name 3", "country3", 13.9, TourType.Beach), }; _tourStorageContract.Setup(x => x.GetList()).Returns(listOriginal); //Act @@ -155,7 +155,7 @@ internal class TourBusinessLogicContractTests { //Arrange var id = Guid.NewGuid().ToString(); - var record = new TourDataModel(id, "name", "country", 10, TourType.Ski, [], []); + var record = new TourDataModel(id, "name", "country", 10, TourType.Ski); _tourStorageContract.Setup(x => x.GetElementById(id)).Returns(record); //Act var element = _tourBusinessLogicContract.GetTourByData(id); @@ -170,7 +170,7 @@ internal class TourBusinessLogicContractTests { //Arrange var name = "name"; - var record = new TourDataModel(Guid.NewGuid().ToString(), name, "country", 10, TourType.Ski, [], []); + var record = new TourDataModel(Guid.NewGuid().ToString(), name, "country", 10, TourType.Ski); _tourStorageContract.Setup(x => x.GetElementByName(name)).Returns(record); //Act var element = _tourBusinessLogicContract.GetTourByData(name); @@ -184,7 +184,7 @@ internal class TourBusinessLogicContractTests { //Arrange var country = "country"; - var record = new TourDataModel(Guid.NewGuid().ToString(), "name", country, 10, TourType.Ski, [], []); + var record = new TourDataModel(Guid.NewGuid().ToString(), "name", country, 10, TourType.Ski); _tourStorageContract.Setup(x => x.GetElementByName(country)).Returns(record); //Act var element = _tourBusinessLogicContract.GetTourByData(country); @@ -245,9 +245,7 @@ internal class TourBusinessLogicContractTests { //Arrange var flag = false; - var record = new TourDataModel(Guid.NewGuid().ToString(), "name","country",10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]); - _agencyStorageContract.Setup(x => x.CheckComponents(It.IsAny())).Returns(true); + var record = new TourDataModel(Guid.NewGuid().ToString(), "name","country",10, TourType.Ski); _tourStorageContract.Setup(x => x.AddElement(It.IsAny())) .Callback((TourDataModel x) => { @@ -257,7 +255,6 @@ internal class TourBusinessLogicContractTests //Act _tourBusinessLogicContract.InsertTour(record); //Assert - _agencyStorageContract.Verify(x => x.CheckComponents(It.IsAny()), Times.Once); _tourStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); Assert.That(flag); } @@ -268,8 +265,7 @@ internal class TourBusinessLogicContractTests //Arrange _tourStorageContract.Setup(x => x.AddElement(It.IsAny())).Throws(new ElementExistsException("Data", "Data")); //Act&Assert - Assert.That(() => _tourBusinessLogicContract.InsertTour(new(Guid.NewGuid().ToString(), "name","country",10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf()); + Assert.That(() => _tourBusinessLogicContract.InsertTour(new(Guid.NewGuid().ToString(), "name","country",10, TourType.Ski)), Throws.TypeOf()); _tourStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Once); } @@ -285,7 +281,7 @@ internal class TourBusinessLogicContractTests public void InsertTour_InvalidRecord_ThrowException_Test() { //Act&Assert - Assert.That(() => _tourBusinessLogicContract.InsertTour(new TourDataModel("id", "name", "country", 10, TourType.Ski, [], [])), Throws.TypeOf()); + Assert.That(() => _tourBusinessLogicContract.InsertTour(new TourDataModel("id", "name", "country", 10, TourType.Ski)), Throws.TypeOf()); _tourStorageContract.Verify(x => x.AddElement(It.IsAny()), Times.Never); } @@ -293,8 +289,7 @@ internal class TourBusinessLogicContractTests public void InsertTour_StorageThrowError_ThrowException_Test() { //Arrange - Assert.That(() => _tourBusinessLogicContract.InsertTour(new TourDataModel(Guid.NewGuid().ToString(), "name","country", 10, TourType.Ski, - [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf()); + Assert.That(() => _tourBusinessLogicContract.InsertTour(new TourDataModel(Guid.NewGuid().ToString(), "name","country", 10, TourType.Ski)), Throws.TypeOf()); //Act&Assert _tourStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); } @@ -303,8 +298,7 @@ internal class TourBusinessLogicContractTests public void InsertFurniture_InsufficientError_ThrowException_Test() { //Arrange - Assert.That(() => _tourBusinessLogicContract.InsertTour(new TourDataModel(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])),Throws.TypeOf()); + Assert.That(() => _tourBusinessLogicContract.InsertTour(new TourDataModel(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski)),Throws.TypeOf()); //Act&Assert _tourStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); } @@ -314,8 +308,7 @@ internal class TourBusinessLogicContractTests { //Arrange var flag = false; - var record = new TourDataModel(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)]); + var record = new TourDataModel(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski); _tourStorageContract.Setup(x => x.UpdElement(It.IsAny())) .Callback((TourDataModel x) => { @@ -335,8 +328,7 @@ internal class TourBusinessLogicContractTests //Arrange _tourStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new ElementNotFoundException("")); //Act&Assert - Assert.That(() => _tourBusinessLogicContract.UpdateTour(new(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf()); + Assert.That(() => _tourBusinessLogicContract.UpdateTour(new(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski)), Throws.TypeOf()); _tourStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } @@ -346,8 +338,7 @@ internal class TourBusinessLogicContractTests //Arrange _tourStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new ElementExistsException("Data", "Data")); //Act&Assert - Assert.That(() => _tourBusinessLogicContract.UpdateTour(new(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf ()); + Assert.That(() => _tourBusinessLogicContract.UpdateTour(new(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski)), Throws.TypeOf ()); _tourStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } @@ -363,8 +354,7 @@ internal class TourBusinessLogicContractTests public void UpdateTour_InvalidRecord_ThrowException_Test() { //Act&Assert - Assert.That(() => _tourBusinessLogicContract.UpdateTour(new TourDataModel("id", "name", "country", 10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf()); + Assert.That(() => _tourBusinessLogicContract.UpdateTour(new TourDataModel("id", "name", "country", 10, TourType.Ski)), Throws.TypeOf()); _tourStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Never); } @@ -374,8 +364,7 @@ internal class TourBusinessLogicContractTests //Arrange _tourStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new StorageException(new InvalidOperationException())); //Act&Assert - Assert.That(() => _tourBusinessLogicContract.UpdateTour(new(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski, [new TourSuppliesDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)], - [new TourAgencyDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5)])), Throws.TypeOf()); + Assert.That(() => _tourBusinessLogicContract.UpdateTour(new(Guid.NewGuid().ToString(), "name", "country", 10, TourType.Ski)), Throws.TypeOf()); _tourStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } diff --git a/MagicCarpetProject/MagicCarpetTests/DataModelTests/TourDataModelTests.cs b/MagicCarpetProject/MagicCarpetTests/DataModelTests/TourDataModelTests.cs index 40dc4fe..8971464 100644 --- a/MagicCarpetProject/MagicCarpetTests/DataModelTests/TourDataModelTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/DataModelTests/TourDataModelTests.cs @@ -15,78 +15,49 @@ internal class TourDataModelTests [Test] public void IdIsNullOrEmptyTest() { - var cocktail = CreateDataModel(null, "name", "country", 10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); - Assert.That(() => cocktail.Validate(), Throws.TypeOf()); - cocktail = CreateDataModel(string.Empty, "name", "country", 10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); - Assert.That(() => cocktail.Validate(), Throws.TypeOf()); + var tour = CreateDataModel(null, "name", "country", 10.5, TourType.Beach); + Assert.That(() => tour.Validate(), Throws.TypeOf()); + tour = CreateDataModel(string.Empty, "name", "country", 10.5, TourType.Beach); + Assert.That(() => tour.Validate(), Throws.TypeOf()); } [Test] public void IdIsNotGuidTest() { - var cocktail = CreateDataModel("id", "name", "country", 10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); - Assert.That(() => cocktail.Validate(), Throws.TypeOf()); + var tour = CreateDataModel("id", "name", "country", 10.5, TourType.Beach); + Assert.That(() => tour.Validate(), Throws.TypeOf()); } [Test] public void TourNameIsNullOrEmptyTest() { - var cocktail = CreateDataModel(Guid.NewGuid().ToString(), null, "country", 10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); + var cocktail = CreateDataModel(Guid.NewGuid().ToString(), null, "country", 10.5, TourType.Beach); Assert.That(() => cocktail.Validate(), Throws.TypeOf()); - cocktail = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "country", 10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); + cocktail = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "country", 10.5, TourType.Beach); Assert.That(() => cocktail.Validate(), Throws.TypeOf()); } public void TourCountryIsNullOrEmptyTest() { - var cocktail = CreateDataModel(Guid.NewGuid().ToString(), "name", null, 10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); + var cocktail = CreateDataModel(Guid.NewGuid().ToString(), "name", null, 10.5, TourType.Beach); Assert.That(() => cocktail.Validate(), Throws.TypeOf()); - cocktail = CreateDataModel(Guid.NewGuid().ToString(), "name", string.Empty, 10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); + cocktail = CreateDataModel(Guid.NewGuid().ToString(), "name", string.Empty, 10.5, TourType.Beach); Assert.That(() => cocktail.Validate(), Throws.TypeOf()); } [Test] public void PriceIsLessOrZeroTest() { - var cocktail = CreateDataModel(Guid.NewGuid().ToString(), null, null, 0, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); - Assert.That(() => cocktail.Validate(), Throws.TypeOf()); - cocktail = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, string.Empty, -10.5, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); - Assert.That(() => cocktail.Validate(), Throws.TypeOf()); + var tour = CreateDataModel(Guid.NewGuid().ToString(), null, null, 0, TourType.Beach); + Assert.That(() => tour.Validate(), Throws.TypeOf()); + tour = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, string.Empty, -10.5, TourType.Beach); + Assert.That(() => tour.Validate(), Throws.TypeOf()); } [Test] public void TourTypeIsNoneTest() { - var cocktail = CreateDataModel(Guid.NewGuid().ToString(), null, null, 0, TourType.Beach, - CreateSuppliesDataModel(), CreateAgencyDataModel()); - Assert.That(() => cocktail.Validate(), Throws.TypeOf()); - } - [Test] - public void SuppliesIsEmptyOrNullTest() - { - var model = CreateDataModel(Guid.NewGuid().ToString(), "name", "country", 10.5, TourType.Beach, [], CreateAgencyDataModel()); - Assert.That(() => model.Validate(), Throws.TypeOf()); - - model = CreateDataModel(Guid.NewGuid().ToString(), "name", "country", 10.5, TourType.Beach, null, CreateAgencyDataModel()); - Assert.That(() => model.Validate(), Throws.TypeOf()); - } - - [Test] - public void AgencyIsEmptyOrNullTest() - { - var model = CreateDataModel(Guid.NewGuid().ToString(), "name", "country", 10.5, TourType.Beach, CreateSuppliesDataModel(), []); - Assert.That(() => model.Validate(), Throws.TypeOf()); - - model = CreateDataModel(Guid.NewGuid().ToString(), "name", "country", 10.5, TourType.Beach, CreateSuppliesDataModel(), null); - Assert.That(() => model.Validate(), Throws.TypeOf()); + var tour = CreateDataModel(Guid.NewGuid().ToString(), null, null, 0, TourType.Beach); + Assert.That(() => tour.Validate(), Throws.TypeOf()); } [Test] @@ -99,7 +70,7 @@ internal class TourDataModelTests var tourType = TourType.Ski; var supplies = CreateSuppliesDataModel(); var agency = CreateAgencyDataModel(); - var tour = CreateDataModel(tourId, tourName, tourCountry, price, tourType, supplies, agency); + var tour = CreateDataModel(tourId, tourName, tourCountry, price, tourType); Assert.That(() => tour.Validate(), Throws.Nothing); Assert.Multiple(() => { @@ -108,14 +79,11 @@ internal class TourDataModelTests Assert.That(tour.TourCountry, Is.EqualTo(tourCountry)); Assert.That(tour.Price, Is.EqualTo(price)); Assert.That(tour.Type, Is.EqualTo(tourType)); - Assert.That(tour.Supplies, Is.EqualTo(supplies)); - Assert.That(tour.Agency, Is.EqualTo(agency)); }); } - private static TourDataModel CreateDataModel(string? id, string? tourName, string? countryName, double price, TourType tourType, - List supplies, List agency) => - new(id, tourName, countryName,price, tourType, supplies, agency); + private static TourDataModel CreateDataModel(string? id, string? tourName, string? countryName, double price, TourType tourType) => + new(id, tourName, countryName,price, tourType); private static List CreateSuppliesDataModel() => [new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 1)]; diff --git a/MagicCarpetProject/MagicCarpetTests/MagicCarpetTests.csproj b/MagicCarpetProject/MagicCarpetTests/MagicCarpetTests.csproj index 26c8651..20cfb9f 100644 --- a/MagicCarpetProject/MagicCarpetTests/MagicCarpetTests.csproj +++ b/MagicCarpetProject/MagicCarpetTests/MagicCarpetTests.csproj @@ -11,6 +11,7 @@ + diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/AgencyStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/AgencyStorageContractTests.cs new file mode 100644 index 0000000..4a1002b --- /dev/null +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/AgencyStorageContractTests.cs @@ -0,0 +1,215 @@ +using MagicCarpetContracts.Exceptions; +using MagicCarpetDatabase.Implementations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using MagicCarpetDatabase.Models; +using MagicCarpetContracts.Enums; +using Microsoft.EntityFrameworkCore; +using MagicCarpetContracts.DataModels; + +namespace MagicCarpetTests.StoragesContractsTests; + +[TestFixture] +internal class AgencyStorageContractTests : BaseStorageContractTest +{ + private AgencyStorageContract _agencyStorageContract; + private Tour _tour; + + [SetUp] + public void SetUp() + { + _agencyStorageContract = new AgencyStorageContract(MagicCarpetDbContext); + _tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name", TourType.Sightseeing); + } + + [TearDown] + public void TearDown() + { + MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Agencies\" CASCADE;"); + MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Tours\" CASCADE;"); + } + + [Test] + public void Try_GetList_WhenHaveRecords_Test() + { + var agency = InsertAgencyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Sightseeing, 5); + InsertAgencyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Sightseeing, 5); + InsertAgencyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Sightseeing, 5); + var list = _agencyStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + AssertElement(list.First(), agency); + } + + [Test] + public void Try_GetList_WhenNoRecords_Test() + { + var list = _agencyStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.Empty); + } + + [Test] + public void Try_GetElementById_WhenHaveRecord_Test() + { + var agency = InsertAgencyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Sightseeing, 5); + var result = _agencyStorageContract.GetElementById(agency.Id); + AssertElement(result, agency); + } + + [Test] + public void Try_GetElementById_WhenNoRecord_Test() + { + Assert.That(() => _agencyStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + } + + [Test] + public void Try_AddElement_WhenValidData_Test() + { + var agency = CreateModel(Guid.NewGuid().ToString(), TourType.Sightseeing, 5, [_tour.Id]); + _agencyStorageContract.AddElement(agency); + var result = GetAgencyFromDatabaseById(agency.Id); + AssertElement(result, agency); + } + + [Test] + public void Try_AddElement_WhenHaveRecordWithSameId_Test() + { + var agency = CreateModel(Guid.NewGuid().ToString(), TourType.Sightseeing, 5, [_tour.Id]); + InsertAgencyToDatabaseAndReturn(agency.Id, TourType.Sightseeing, 5, [(_tour.Id, 3)]); + Assert.That(() => _agencyStorageContract.AddElement(agency), Throws.TypeOf()); + } + + [Test] + public void Try_AddElement_WhenNoHaveTour_Test() + { + var agency = CreateModel(Guid.NewGuid().ToString(), TourType.Sightseeing, 0, [_tour.Id]); + InsertAgencyToDatabaseAndReturn(agency.Id, TourType.Sightseeing, 5, [(_tour.Id, 3)]); + Assert.That(() => _agencyStorageContract.AddElement(agency), Throws.TypeOf()); + } + + [Test] + public void Try_UpdElement_WhenValidData_Test() + { + var agency = CreateModel(Guid.NewGuid().ToString(), TourType.Sightseeing, 5, [_tour.Id]); + InsertAgencyToDatabaseAndReturn(agency.Id, TourType.Ski, 10, null); + _agencyStorageContract.UpdElement(agency); + var result = GetAgencyFromDatabaseById(agency.Id); + AssertElement(result, agency); + } + + [Test] + public void Try_UpdElement_WhenNoRecordWithThisId_Test() + { + var agency = CreateModel(Guid.NewGuid().ToString(), TourType.Sightseeing, 5, [_tour.Id]); + Assert.That(() => _agencyStorageContract.UpdElement(agency), Throws.TypeOf()); + } + + [Test] + public void Try_DelElement_WhenRecordExists_Test() + { + var agency = InsertAgencyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Sightseeing, 5); + _agencyStorageContract.DelElement(agency.Id); + var result = GetAgencyFromDatabaseById(agency.Id); + Assert.That(result, Is.Null); + } + + [Test] + public void Try_DelElement_WhenRecordDoesNotExist_ThrowsElementNotFoundException() + { + Assert.That(() => _agencyStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf()); + } + + private Tour InsertTourToDatabaseAndReturn(string id, string name, TourType type) + { + var tour = new Tour { Id = id, TourName = name, Type = type }; + MagicCarpetDbContext.Tours.Add(tour); + MagicCarpetDbContext.SaveChanges(); + return tour; + } + + private Agency InsertAgencyToDatabaseAndReturn(string id, TourType type, int count, List<(string, int)>? tours = null) + { + var agency = new Agency { Id = id, Type = type, Count = count, Tours = [] }; + if (tours is not null) + { + foreach (var elem in tours) + { + agency.Tours.Add(new TourAgency { AgencyId = agency.Id, TourId = elem.Item1, Count = elem.Item2 }); + } + } + MagicCarpetDbContext.Agencies.Add(agency); + MagicCarpetDbContext.SaveChanges(); + return agency; + } + + private static void AssertElement(AgencyDataModel? actual, Agency expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.Type, Is.EqualTo(expected.Type)); + Assert.That(actual.Count, Is.EqualTo(expected.Count)); + }); + if (expected.Tours is not null) + { + Assert.That(actual.Tours, Is.Not.Null); + Assert.That(actual.Tours, Has.Count.EqualTo(expected.Tours.Count)); + for (int i = 0; i < actual.Tours.Count; ++i) + { + Assert.Multiple(() => + { + Assert.That(actual.Tours[i].TourId, Is.EqualTo(expected.Tours[i].TourId)); + Assert.That(actual.Tours[i].Count, Is.EqualTo(expected.Tours[i].Count)); + }); + } + } + else + { + Assert.That(actual.Tours, Is.Null); + } + } + + private static void AssertElement(Agency? actual, AgencyDataModel expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.Type, Is.EqualTo(expected.Type)); + Assert.That(actual.Count, Is.EqualTo(expected.Count)); + }); + if (expected.Tours is not null) + { + Assert.That(actual.Tours, Is.Not.Null); + Assert.That(actual.Tours, Has.Count.EqualTo(expected.Tours.Count)); + for (int i = 0; i < actual.Tours.Count; ++i) + { + Assert.Multiple(() => + { + Assert.That(actual.Tours[i].TourId, Is.EqualTo(expected.Tours[i].TourId)); + Assert.That(actual.Tours[i].Count, Is.EqualTo(expected.Tours[i].Count)); + }); + } + } + else + { + Assert.That(actual.Tours, Is.Null); + } + } + + private static AgencyDataModel CreateModel(string id, TourType type, int count, List toursIds) + { + var tours = toursIds.Select(x => new TourAgencyDataModel(id, x, 1)).ToList(); + return new(id, type, count, tours); + } + + private Agency? GetAgencyFromDatabaseById(string id) + { + return MagicCarpetDbContext.Agencies.FirstOrDefault(x => x.Id == id); + } +} diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/BaseStorageContractTest.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/BaseStorageContractTest.cs index cb7e27d..93a2d52 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/BaseStorageContractTest.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/BaseStorageContractTest.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace MagicCarpetTests.StoragesContracts; +namespace MagicCarpetTests.StoragesContractsTests; internal abstract class BaseStorageContractTest { diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs index 75d9300..fa3957d 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs @@ -1,7 +1,6 @@ using MagicCarpetContracts.DataModels; using MagicCarpetContracts.Enums; using MagicCarpetContracts.Exceptions; -using MagicCarpetContracts.StoragesContracts; using MagicCarpetDatabase.Implementations; using MagicCarpetDatabase.Models; using Microsoft.EntityFrameworkCore; @@ -11,7 +10,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace MagicCarpetTests.StoragesContracts; +namespace MagicCarpetTests.StoragesContractsTests; [TestFixture] internal class ClientStorageContractTests : BaseStorageContractTest diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs index b681340..81a0dfd 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs @@ -9,7 +9,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace MagicCarpetTests.StoragesContracts; +namespace MagicCarpetTests.StoragesContractsTests; [TestFixture] class EmployeeStorageContractTests : BaseStorageContractTest diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs index 1f2295c..8999f8a 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace MagicCarpetTests.StoragesContracts; +namespace MagicCarpetTests.StoragesContractsTests; [TestFixture] internal class SalaryStorageContractTests : BaseStorageContractTest diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs index 7f9873d..f3dd75b 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs @@ -11,7 +11,7 @@ using System.Text; using System.Threading.Tasks; using static NUnit.Framework.Internal.OSPlatform; -namespace MagicCarpetTests.StoragesContracts; +namespace MagicCarpetTests.StoragesContractsTests; [TestFixture] internal class SaleStorageContractTests : BaseStorageContractTest diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SuppliesStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SuppliesStorageContractTests.cs new file mode 100644 index 0000000..db458ba --- /dev/null +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SuppliesStorageContractTests.cs @@ -0,0 +1,191 @@ +using MagicCarpetContracts.DataModels; +using MagicCarpetContracts.Enums; +using MagicCarpetContracts.Exceptions; +using MagicCarpetDatabase.Implementations; +using MagicCarpetDatabase.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MagicCarpetTests.StoragesContractsTests; + +[TestFixture] +internal class SuppliesStorageContractTests : BaseStorageContractTest +{ + private SuppliesStorageContract _suppliesStorageContract; + private Tour _tour; + + [SetUp] + public void SetUp() + { + _suppliesStorageContract = new SuppliesStorageContract(MagicCarpetDbContext); + _tour = InsertTourToDatabaseAndReturn(); + } + + [TearDown] + public void TearDown() + { + MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Supplieses\" CASCADE;"); + MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Tours\" CASCADE;"); + } + + [Test] + public void Try_GetList_WhenHaveRecords_Test() + { + var supply = InsertSupplyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Ski, 5); + InsertSupplyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Ski, 5); + InsertSupplyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Ski, 5); + var list = _suppliesStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); + AssertElement(list.First(), supply); + } + + [Test] + public void Try_GetList_WhenNoRecords_Test() + { + var list = _suppliesStorageContract.GetList(); + Assert.That(list, Is.Not.Null); + Assert.That(list, Is.Empty); + } + + [Test] + public void Try_GetElementById_WhenHaveRecord_Test() + { + var supply = InsertSupplyToDatabaseAndReturn(Guid.NewGuid().ToString(), TourType.Ski, 5); + AssertElement(_suppliesStorageContract.GetElementById(supply.Id), supply); + } + + [Test] + public void Try_GetElementById_WhenNoRecord_Test() + { + Assert.That(() => _suppliesStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + } + + [Test] + public void Try_AddElement_Test() + { + var supply = CreateModel(Guid.NewGuid().ToString(), TourType.Ski, 5, [_tour.Id]); + _suppliesStorageContract.AddElement(supply); + AssertElement(GetSupplyFromDatabaseById(supply.Id), supply); + } + + [Test] + public void Try_AddElement_WhenHaveRecordWithSameId_Test() + { + var supply = CreateModel(Guid.NewGuid().ToString(), TourType.Ski, 5, [_tour.Id]); + InsertSupplyToDatabaseAndReturn(supply.Id, TourType.Ski, 5, [(_tour.Id, 3)]); + Assert.That(() => _suppliesStorageContract.AddElement(supply), Throws.TypeOf()); + } + + [Test] + public void Try_UpdElement_Test() + { + var supply = CreateModel(Guid.NewGuid().ToString(), TourType.Ski, 5, [_tour.Id]); + InsertSupplyToDatabaseAndReturn(supply.Id, TourType.Ski, 5, null); + _suppliesStorageContract.UpdElement(supply); + AssertElement(GetSupplyFromDatabaseById(supply.Id), supply); + } + + [Test] + public void Try_UpdElement_WhenNoRecordWithThisId_Test() + { + Assert.That(() => _suppliesStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString(), TourType.Ski, 5, [_tour.Id])), Throws.TypeOf()); + } + + private Tour InsertTourToDatabaseAndReturn() + { + var tour = new Tour { Id = Guid.NewGuid().ToString(), TourName = "Test Tour", Type = TourType.Ski }; + MagicCarpetDbContext.Tours.Add(tour); + MagicCarpetDbContext.SaveChanges(); + return tour; + } + + private Supplies InsertSupplyToDatabaseAndReturn(string id, TourType type, int count, List<(string, int)>? tours = null) + { + var supply = new Supplies { Id = id, Type = type, ProductuionDate = DateTime.UtcNow, Count = count, Tours = [] }; + if (tours is not null) + { + foreach (var elem in tours) + { + supply.Tours.Add(new TourSupplies { SuppliesId = supply.Id, TourId = elem.Item1, Count = elem.Item2 }); + } + } + MagicCarpetDbContext.Supplieses.Add(supply); + MagicCarpetDbContext.SaveChanges(); + return supply; + } + + private static void AssertElement(SuppliesDataModel? actual, Supplies expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.Type, Is.EqualTo(expected.Type)); + Assert.That(actual.ProductuionDate, Is.EqualTo(expected.ProductuionDate)); + Assert.That(actual.Count, Is.EqualTo(expected.Count)); + }); + if (expected.Tours is not null) + { + Assert.That(actual.Tours, Is.Not.Null); + Assert.That(actual.Tours, Has.Count.EqualTo(expected.Tours.Count)); + for (int i = 0; i < actual.Tours.Count; ++i) + { + Assert.Multiple(() => + { + Assert.That(actual.Tours[i].TourId, Is.EqualTo(expected.Tours[i].TourId)); + Assert.That(actual.Tours[i].Count, Is.EqualTo(expected.Tours[i].Count)); + }); + } + } + else + { + Assert.That(actual.Tours, Is.Null); + } + } + + private static void AssertElement(Supplies? actual, SuppliesDataModel expected) + { + Assert.That(actual, Is.Not.Null); + Assert.Multiple(() => + { + Assert.That(actual.Id, Is.EqualTo(expected.Id)); + Assert.That(actual.Type, Is.EqualTo(expected.Type)); + Assert.That(actual.ProductuionDate, Is.EqualTo(expected.ProductuionDate)); + Assert.That(actual.Count, Is.EqualTo(expected.Count)); + }); + if (expected.Tours is not null) + { + Assert.That(actual.Tours, Is.Not.Null); + Assert.That(actual.Tours, Has.Count.EqualTo(expected.Tours.Count)); + for (int i = 0; i < actual.Tours.Count; ++i) + { + Assert.Multiple(() => + { + Assert.That(actual.Tours[i].TourId, Is.EqualTo(expected.Tours[i].TourId)); + Assert.That(actual.Tours[i].Count, Is.EqualTo(expected.Tours[i].Count)); + }); + } + } + else + { + Assert.That(actual.Tours, Is.Null); + } + } + + private static SuppliesDataModel CreateModel(string id, TourType type, int count, List toursIds) + { + var tours = toursIds.Select(x => new TourSuppliesDataModel(id, x, 1)).ToList(); + return new(id, type, DateTime.UtcNow, count, tours); + } + + + private Supplies? GetSupplyFromDatabaseById(string id) + { + return MagicCarpetDbContext.Supplieses.FirstOrDefault(x => x.Id == id); + } +} diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs index 3b97dae..c22fe8c 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs @@ -12,7 +12,7 @@ using System.Text; using System.Threading.Tasks; using static NUnit.Framework.Internal.OSPlatform; -namespace MagicCarpetTests.StoragesContracts; +namespace MagicCarpetTests.StoragesContractsTests; [TestFixture] internal class TourStorageContractTests : BaseStorageContractTest