diff --git a/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleDataModel.cs b/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleDataModel.cs index 042764c..ddcb321 100644 --- a/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleDataModel.cs +++ b/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleDataModel.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; namespace MagicCarpetContracts.DataModels; public class SaleDataModel(string id, string employeeId, string? clientId, double sum, DiscountType discountType, - double discount, bool isCancel, List tours) : IValidation + double discount, bool isCancel, List saleTours) : IValidation { public string Id { get; private set; } = id; @@ -28,7 +28,7 @@ public class SaleDataModel(string id, string employeeId, string? clientId, doubl public bool IsCancel { get; private set; } = isCancel; - public List Tours { get; private set; } = tours; + public List Tours { get; private set; } = saleTours; public void Validate() { diff --git a/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleTourDataModel.cs b/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleTourDataModel.cs index 47f68be..86854d7 100644 --- a/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleTourDataModel.cs +++ b/MagicCarpetProject/MagicCarpetContracts/DataModels/SaleTourDataModel.cs @@ -9,11 +9,11 @@ using System.Threading.Tasks; namespace MagicCarpetContracts.DataModels; -public class SaleTourDataModel(string saleId, string cocktailId, int count) : IValidation +public class SaleTourDataModel(string saleId, string tourId, int count) : IValidation { public string SaleId { get; private set; } = saleId; - public string TourId { get; private set; } = cocktailId; + public string TourId { get; private set; } = tourId; public int Count { get; private set; } = count; diff --git a/MagicCarpetProject/MagicCarpetDatabase/Implementations/ClientStorageContarct.cs b/MagicCarpetProject/MagicCarpetDatabase/Implementations/ClientStorageContarct.cs index cc824d5..12d04be 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Implementations/ClientStorageContarct.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Implementations/ClientStorageContarct.cs @@ -22,8 +22,7 @@ internal class ClientStorageContarct : IClientStorageContract _dbContext = magicCarpetDbContext; var config = new MapperConfiguration(cfg => { - cfg.CreateMap(); - cfg.CreateMap(); + cfg.AddMaps(typeof(MagicCarpetDbContext).Assembly); }); _mapper = new Mapper(config); } diff --git a/MagicCarpetProject/MagicCarpetDatabase/Implementations/EmployeeStorageContract.cs b/MagicCarpetProject/MagicCarpetDatabase/Implementations/EmployeeStorageContract.cs index aab05cf..1e7c934 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Implementations/EmployeeStorageContract.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Implementations/EmployeeStorageContract.cs @@ -21,8 +21,7 @@ internal class EmployeeStorageContract : IEmployeeStorageContract _dbContext = dbContext; var config = new MapperConfiguration(cfg => { - cfg.CreateMap(); - cfg.CreateMap(); + cfg.AddMaps(typeof(MagicCarpetDbContext).Assembly); }); _mapper = new Mapper(config); } @@ -94,17 +93,17 @@ internal class EmployeeStorageContract : IEmployeeStorageContract } } - public void AddElement(EmployeeDataModel workerDataModel) + public void AddElement(EmployeeDataModel employeeDataModel) { try { - _dbContext.Employees.Add(_mapper.Map(workerDataModel)); + _dbContext.Employees.Add(_mapper.Map(employeeDataModel)); _dbContext.SaveChanges(); } catch (InvalidOperationException ex) when (ex.TargetSite?.Name == "ThrowIdentityConflict") { _dbContext.ChangeTracker.Clear(); - throw new ElementExistsException("Id", workerDataModel.Id); + throw new ElementExistsException("Id", employeeDataModel.Id); } catch (Exception ex) { @@ -113,12 +112,12 @@ internal class EmployeeStorageContract : IEmployeeStorageContract } } - public void UpdElement(EmployeeDataModel workerDataModel) + public void UpdElement(EmployeeDataModel employeeDataModel) { try { - var element = GetEmployeeById(workerDataModel.Id) ?? throw new ElementNotFoundException(workerDataModel.Id); - _dbContext.Employees.Update(_mapper.Map(workerDataModel, element)); + var element = GetEmployeeById(employeeDataModel.Id) ?? throw new ElementNotFoundException(employeeDataModel.Id); + _dbContext.Employees.Update(_mapper.Map(employeeDataModel, element)); _dbContext.SaveChanges(); } catch (ElementNotFoundException) diff --git a/MagicCarpetProject/MagicCarpetDatabase/Implementations/SaleStorageContract.cs b/MagicCarpetProject/MagicCarpetDatabase/Implementations/SaleStorageContract.cs index 1828355..5943831 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Implementations/SaleStorageContract.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Implementations/SaleStorageContract.cs @@ -26,7 +26,15 @@ internal class SaleStorageContract cfg.CreateMap(); cfg.CreateMap() .ForMember(x => x.IsCancel, x => x.MapFrom(src => false)) - .ForMember(x => x.SaleTours, x => x.MapFrom(src => src.Tours)); + .ForMember(x => x.SaleTours, x => x.MapFrom(src => src.Tours)) + .AfterMap((src, dest) => + { + foreach (var tour in dest.SaleTours) + { + tour.SaleId = dest.Id; + } + }); + }); _mapper = new Mapper(config); } diff --git a/MagicCarpetProject/MagicCarpetDatabase/Implementations/TourStorageContract.cs b/MagicCarpetProject/MagicCarpetDatabase/Implementations/TourStorageContract.cs index 82e0d04..d7f9489 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Implementations/TourStorageContract.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Implementations/TourStorageContract.cs @@ -23,7 +23,8 @@ internal class TourStorageContract : ITourStorageContract _dbContext = dbContext; var config = new MapperConfiguration(cfg => { - cfg.CreateMap(); + cfg.CreateMap() + .ConstructUsing(src => new TourDataModel(src.Id, src.TourName, src.TourCountry, src.Price, src.Type)); cfg.CreateMap(); cfg.CreateMap(); }); @@ -33,8 +34,7 @@ internal class TourStorageContract : ITourStorageContract { try { - var query = _dbContext.Tours.AsQueryable(); - return [.. query.Select(x => _mapper.Map(x))]; + return [.. _dbContext.Tours.Select(x => _mapper.Map(x))]; } catch (Exception ex) { @@ -43,12 +43,11 @@ internal class TourStorageContract : ITourStorageContract } } - public List GetHistoryByTourId(string productId) + public List GetHistoryByTourId(string tourId) { try { - return [.. _dbContext.TourHistories.Where(x => x.TourId == productId).OrderByDescending(x => x.ChangeDate) - .Select(x => _mapper.Map(x))]; + return [.. _dbContext.TourHistories.Where(x => x.TourId == tourId).OrderByDescending(x => x.ChangeDate).Select(x => _mapper.Map(x))]; } catch (Exception ex) { @@ -83,22 +82,22 @@ internal class TourStorageContract : ITourStorageContract } } - public void AddElement(TourDataModel productDataModel) + public void AddElement(TourDataModel tourDataModel) { try { - _dbContext.Tours.Add(_mapper.Map(productDataModel)); + _dbContext.Tours.Add(_mapper.Map(tourDataModel)); _dbContext.SaveChanges(); } catch (InvalidOperationException ex) when (ex.TargetSite?.Name == "ThrowIdentityConflict") { _dbContext.ChangeTracker.Clear(); - throw new ElementExistsException("Id", productDataModel.Id); + throw new ElementExistsException("Id", tourDataModel.Id); } - catch (DbUpdateException ex) when (ex.InnerException is PostgresException { ConstraintName: "IX_Tours_TourName_IsDeleted" }) + catch (DbUpdateException ex) when (ex.InnerException is PostgresException { ConstraintName: "IX_Tours_TourName" }) { _dbContext.ChangeTracker.Clear(); - throw new ElementExistsException("TourName", productDataModel.TourName); + throw new ElementExistsException("TourName", tourDataModel.TourName); } catch (Exception ex) { @@ -107,39 +106,24 @@ internal class TourStorageContract : ITourStorageContract } } - public void UpdElement(TourDataModel productDataModel) + public void UpdElement(TourDataModel tourDataModel) { try { - var transaction = _dbContext.Database.BeginTransaction(); - try - { - var element = GetTourById(productDataModel.Id) ?? throw new ElementNotFoundException(productDataModel.Id); - if (element.Price != productDataModel.Price) - { - _dbContext.TourHistories.Add(new TourHistory() { TourId = element.Id, OldPrice = element.Price }); - _dbContext.SaveChanges(); - } - _dbContext.Tours.Update(_mapper.Map(productDataModel, element)); - _dbContext.SaveChanges(); - transaction.Commit(); - } - catch - { - transaction.Rollback(); - throw; - } + var element = GetTourById(tourDataModel.Id) ?? throw new ElementNotFoundException(tourDataModel.Id); + _dbContext.Tours.Update(_mapper.Map(tourDataModel, element)); + _dbContext.SaveChanges(); } - catch (DbUpdateException ex) when (ex.InnerException is PostgresException { ConstraintName: "IX_Tours_TourName_IsDeleted" }) - { - _dbContext.ChangeTracker.Clear(); - throw new ElementExistsException("TourName", productDataModel.TourName); - } - catch (Exception ex) when (ex is ElementDeletedException || ex is ElementNotFoundException) + catch (ElementNotFoundException) { _dbContext.ChangeTracker.Clear(); throw; } + catch (DbUpdateException ex) when (ex.InnerException is PostgresException { ConstraintName: "IX_Tours_TourName" }) + { + _dbContext.ChangeTracker.Clear(); + throw new ElementExistsException("TourName", tourDataModel.TourName); + } catch (Exception ex) { _dbContext.ChangeTracker.Clear(); @@ -151,9 +135,11 @@ internal class TourStorageContract : ITourStorageContract { try { + var element = GetTourById(id) ?? throw new ElementNotFoundException(id); + _dbContext.Tours.Remove(element); _dbContext.SaveChanges(); } - catch (ElementNotFoundException ex) + catch (ElementNotFoundException) { _dbContext.ChangeTracker.Clear(); throw; @@ -165,5 +151,19 @@ internal class TourStorageContract : ITourStorageContract } } + public void ResElement(string id) + { + try + { + var element = GetTourById(id) ?? throw new ElementNotFoundException(id); + _dbContext.SaveChanges(); + } + catch + { + _dbContext.ChangeTracker.Clear(); + throw; + } + } + private Tour? GetTourById(string id) => _dbContext.Tours.FirstOrDefault(x => x.Id == id); } diff --git a/MagicCarpetProject/MagicCarpetDatabase/MagicCarpetDbContext.cs b/MagicCarpetProject/MagicCarpetDatabase/MagicCarpetDbContext.cs index f8b3dc1..cb0b08c 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/MagicCarpetDbContext.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/MagicCarpetDbContext.cs @@ -25,6 +25,8 @@ internal class MagicCarpetDbContext(IConfigurationDatabase configurationDatabase modelBuilder.Entity().HasIndex(x => x.PhoneNumber).IsUnique(); + modelBuilder.Entity().HasIndex(x => x.TourName).IsUnique(); + modelBuilder.Entity() .HasIndex(e => new { e.PostName, e.IsActual }) .IsUnique() diff --git a/MagicCarpetProject/MagicCarpetDatabase/Models/Employee.cs b/MagicCarpetProject/MagicCarpetDatabase/Models/Employee.cs index 6b1d985..7ea1d27 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Models/Employee.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Models/Employee.cs @@ -16,9 +16,9 @@ internal class Employee public required string FIO { get; set; } - public required string PostId { get; set; } + public string Email { get; set; } - public string? Email { get; set; } + public string PostId { get; set; } public DateTime BirthDate { get; set; } diff --git a/MagicCarpetProject/MagicCarpetDatabase/Models/Salary.cs b/MagicCarpetProject/MagicCarpetDatabase/Models/Salary.cs index 8ed7712..2596602 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Models/Salary.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Models/Salary.cs @@ -11,5 +11,6 @@ internal class Salary public string Id { get; set; } = Guid.NewGuid().ToString(); public required string EmployeeId { get; set; } public DateTime SalaryDate { get; set; } - public double EmployeeSalary { get; set; } + public double EmployeeSalary { get; set; } + public Employee? Employee { get; set; } } diff --git a/MagicCarpetProject/MagicCarpetDatabase/Models/SaleTour.cs b/MagicCarpetProject/MagicCarpetDatabase/Models/SaleTour.cs index a45f946..13c4837 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Models/SaleTour.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Models/SaleTour.cs @@ -13,6 +13,4 @@ internal class SaleTour public required string TourId { get; set; } public int Count { get; set; } - public Sale? Sale { get; set; } - public Tour? Tour { get; set; } } diff --git a/MagicCarpetProject/MagicCarpetDatabase/Models/Tour.cs b/MagicCarpetProject/MagicCarpetDatabase/Models/Tour.cs index c008336..69fbccc 100644 --- a/MagicCarpetProject/MagicCarpetDatabase/Models/Tour.cs +++ b/MagicCarpetProject/MagicCarpetDatabase/Models/Tour.cs @@ -11,11 +11,11 @@ namespace MagicCarpetDatabase.Models; internal class Tour { - public required string Id { get; set; } = Guid.NewGuid().ToString(); + public required string Id { get; set; } public required string TourName { get; set; } public string? TourCountry { get; set; } public double Price { get; set; } - public TourType Type { get; set; } + public required TourType Type { get; set; } [ForeignKey("TourId")] public List? SaleTours { get; set; } [ForeignKey("TourId")] diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs index a7a9d27..75d9300 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/ClientStorageContractTests.cs @@ -156,7 +156,7 @@ internal class ClientStorageContractTests : BaseStorageContractTest { var client = InsertClientToDatabaseAndReturn(Guid.NewGuid().ToString()); var employeeId = Guid.NewGuid().ToString(); - MagicCarpetDbContext.Employees.Add(new Employee() { Id = employeeId, FIO = "test", PostId = Guid.NewGuid().ToString() }); + MagicCarpetDbContext.Employees.Add(new Employee() { Id = employeeId, FIO = "test", PostId = Guid.NewGuid().ToString(), Email = "abc@gmail.com" }); MagicCarpetDbContext.Sales.Add(new Sale() { Id = Guid.NewGuid().ToString(), EmployeeId = employeeId, ClientId = client.Id, Sum = 10, DiscountType = DiscountType.None, Discount = 0 }); MagicCarpetDbContext.Sales.Add(new Sale() { Id = Guid.NewGuid().ToString(), EmployeeId = employeeId, ClientId = client.Id, Sum = 10, DiscountType = DiscountType.None, Discount = 0 }); MagicCarpetDbContext.SaveChanges(); diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs index c7de1e3..b681340 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/EmployeeStorageContractTests.cs @@ -31,9 +31,9 @@ class EmployeeStorageContractTests : BaseStorageContractTest [Test] public void Try_GetList_WhenHaveRecords_Test() { - var employee = InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1"); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2"); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3"); + var employee = InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com"); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com"); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com"); var list = _employeeStorageContract.GetList(); Assert.That(list, Is.Not.Null); Assert.That(list, Has.Count.EqualTo(3)); @@ -52,9 +52,9 @@ class EmployeeStorageContractTests : BaseStorageContractTest public void Try_GetList_ByPostId_Test() { var postId = Guid.NewGuid().ToString(); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", postId); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", postId); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3"); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", postId); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com", postId); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com"); var list = _employeeStorageContract.GetList(postId: postId); Assert.That(list, Is.Not.Null); Assert.That(list, Has.Count.EqualTo(2)); @@ -64,10 +64,10 @@ class EmployeeStorageContractTests : BaseStorageContractTest [Test] public void Try_GetList_ByBirthDate_Test() { - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", birthDate: DateTime.UtcNow.AddYears(-25)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", birthDate: DateTime.UtcNow.AddYears(-21)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", birthDate: DateTime.UtcNow.AddYears(-20)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", birthDate: DateTime.UtcNow.AddYears(-19)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", birthDate: DateTime.UtcNow.AddYears(-25)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com", birthDate: DateTime.UtcNow.AddYears(-21)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com", birthDate: DateTime.UtcNow.AddYears(-20)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", "abc@gmail.com", birthDate: DateTime.UtcNow.AddYears(-19)); var list = _employeeStorageContract.GetList(fromBirthDate: DateTime.UtcNow.AddYears(-21).AddMinutes(-1), toBirthDate: DateTime.UtcNow.AddYears(-20).AddMinutes(1)); Assert.That(list, Is.Not.Null); Assert.That(list, Has.Count.EqualTo(2)); @@ -76,10 +76,10 @@ class EmployeeStorageContractTests : BaseStorageContractTest [Test] public void Try_GetList_ByEmploymentDate_Test() { - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", employmentDate: DateTime.UtcNow.AddDays(-2)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", employmentDate: DateTime.UtcNow.AddDays(-1)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", employmentDate: DateTime.UtcNow.AddDays(1)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", employmentDate: DateTime.UtcNow.AddDays(2)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", employmentDate: DateTime.UtcNow.AddDays(-2)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com", employmentDate: DateTime.UtcNow.AddDays(-1)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com", employmentDate: DateTime.UtcNow.AddDays(1)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", "abc@gmail.com", employmentDate: DateTime.UtcNow.AddDays(2)); var list = _employeeStorageContract.GetList(fromEmploymentDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-1), toEmploymentDate: DateTime.UtcNow.AddDays(1).AddMinutes(1)); Assert.That(list, Is.Not.Null); Assert.That(list, Has.Count.EqualTo(2)); @@ -89,10 +89,10 @@ class EmployeeStorageContractTests : BaseStorageContractTest public void Try_GetList_ByAllParameters_Test() { var postId = Guid.NewGuid().ToString(); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", postId, birthDate: DateTime.UtcNow.AddYears(-25), employmentDate: DateTime.UtcNow.AddDays(-2)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", postId, birthDate: DateTime.UtcNow.AddYears(-22), employmentDate: DateTime.UtcNow.AddDays(-1)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", postId, birthDate: DateTime.UtcNow.AddYears(-21), employmentDate: DateTime.UtcNow.AddDays(-1)); - InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", birthDate: DateTime.UtcNow.AddYears(-20), employmentDate: DateTime.UtcNow.AddDays(1)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", postId, birthDate: DateTime.UtcNow.AddYears(-25), employmentDate: DateTime.UtcNow.AddDays(-2)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com", postId, birthDate: DateTime.UtcNow.AddYears(-22), employmentDate: DateTime.UtcNow.AddDays(-1)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com", postId, birthDate: DateTime.UtcNow.AddYears(-21), employmentDate: DateTime.UtcNow.AddDays(-1)); + InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4", "abc@gmail.com", birthDate: DateTime.UtcNow.AddYears(-20), employmentDate: DateTime.UtcNow.AddDays(1)); var list = _employeeStorageContract.GetList(postId: postId, fromBirthDate: DateTime.UtcNow.AddYears(-21).AddMinutes(-1), toBirthDate: DateTime.UtcNow.AddYears(-20).AddMinutes(1), fromEmploymentDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-1), toEmploymentDate: DateTime.UtcNow.AddDays(1).AddMinutes(1)); Assert.That(list, Is.Not.Null); @@ -188,9 +188,9 @@ class EmployeeStorageContractTests : BaseStorageContractTest Assert.That(() => _employeeStorageContract.DelElement(employee.Id), Throws.TypeOf()); } - private Employee InsertEmployeeToDatabaseAndReturn(string id, string fio = "test", string? email = null,string ? postId = null, DateTime? birthDate = null, DateTime? employmentDate = null, bool isDeleted = false) + private Employee InsertEmployeeToDatabaseAndReturn(string id, string fio = "test", string email = "abc@mail.ru",string ? postId = null, DateTime? birthDate = null, DateTime? employmentDate = null, bool isDeleted = false) { - var employee = new Employee() { Id = id, FIO = fio, PostId = postId ?? Guid.NewGuid().ToString(), Email = email, BirthDate = birthDate ?? DateTime.UtcNow.AddYears(-20), EmploymentDate = employmentDate ?? DateTime.UtcNow, IsDeleted = isDeleted }; + var employee = new Employee() { Id = id, FIO = fio, Email = email, PostId = postId ?? Guid.NewGuid().ToString(), BirthDate = birthDate ?? DateTime.UtcNow.AddYears(-20), EmploymentDate = employmentDate ?? DateTime.UtcNow, IsDeleted = isDeleted }; MagicCarpetDbContext.Employees.Add(employee); MagicCarpetDbContext.SaveChanges(); return employee; @@ -211,8 +211,8 @@ class EmployeeStorageContractTests : BaseStorageContractTest }); } - private static EmployeeDataModel CreateModel(string id, string fio = "fio", string? postId = null, DateTime? birthDate = null, DateTime? employmentDate = null, string email = "email", bool isDeleted = false) => - new(id, fio, postId ?? Guid.NewGuid().ToString(), email, birthDate ?? DateTime.UtcNow.AddYears(-20), employmentDate ?? DateTime.UtcNow, isDeleted); + private static EmployeeDataModel CreateModel(string id, string fio = "fio", string email = "abc@mail.ru", string? postId = null, DateTime? birthDate = null, DateTime? employmentDate = null, bool isDeleted = false) => + new(id, fio, email, postId ?? Guid.NewGuid().ToString(), birthDate ?? DateTime.UtcNow.AddYears(-20), employmentDate ?? DateTime.UtcNow, isDeleted); private Employee? GetEmployeeFromDatabase(string id) => MagicCarpetDbContext.Employees.FirstOrDefault(x => x.Id == id); diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs index 8920b2c..1f2295c 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SalaryStorageContractTests.cs @@ -110,9 +110,9 @@ internal class SalaryStorageContractTests : BaseStorageContractTest AssertElement(GetSalaryFromDatabaseByEmployeeId(_employee.Id), salary); } - private Employee InsertEmployeeToDatabaseAndReturn(string employeeFIO = "fio") + private Employee InsertEmployeeToDatabaseAndReturn(string employeeFIO = "fio", string employeeEmail = "abc@mail.ru") { - var employee = new Employee() { Id = Guid.NewGuid().ToString(), PostId = Guid.NewGuid().ToString(), FIO = employeeFIO, IsDeleted = false }; + var employee = new Employee() { Id = Guid.NewGuid().ToString(), PostId = Guid.NewGuid().ToString(), FIO = employeeFIO, Email = employeeEmail, IsDeleted = false }; MagicCarpetDbContext.Employees.Add(employee); MagicCarpetDbContext.SaveChanges(); return employee; diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs index 1263731..7f9873d 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/SaleStorageContractTests.cs @@ -24,7 +24,7 @@ internal class SaleStorageContractTests : BaseStorageContractTest [SetUp] public void SetUp() { - _saleStorageContract = new SaleStorageContract(MagicCarpetDbContext);; + _saleStorageContract = new SaleStorageContract(MagicCarpetDbContext); _client = InsertClientToDatabaseAndReturn(); _employee = InsertEmployeeToDatabaseAndReturn(); _tour = InsertTourToDatabaseAndReturn(); @@ -201,15 +201,15 @@ internal class SaleStorageContractTests : BaseStorageContractTest return client; } - private Employee InsertEmployeeToDatabaseAndReturn(string fio = "test") + private Employee InsertEmployeeToDatabaseAndReturn(string fio = "test", string employeeEmail = "abc@gmail.com") { - var employee = new Employee() { Id = Guid.NewGuid().ToString(), FIO = fio, PostId = Guid.NewGuid().ToString() }; + var employee = new Employee() { Id = Guid.NewGuid().ToString(), FIO = fio, Email = employeeEmail, PostId = Guid.NewGuid().ToString() }; MagicCarpetDbContext.Employees.Add(employee); MagicCarpetDbContext.SaveChanges(); return employee; } - private Tour InsertTourToDatabaseAndReturn(string tourName = "test", TourType tourType = TourType.Beach, double price = 1, bool isDeleted = false) + private Tour InsertTourToDatabaseAndReturn(string tourName = "test", TourType tourType = TourType.Sightseeing, double price = 1) { var tour = new Tour() { Id = Guid.NewGuid().ToString(), TourName = tourName, Type = tourType, Price = price }; MagicCarpetDbContext.Tours.Add(tour); diff --git a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs index b9dd394..3b97dae 100644 --- a/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs +++ b/MagicCarpetProject/MagicCarpetTests/StoragesContractsTests/TourStorageContractTests.cs @@ -4,6 +4,7 @@ using MagicCarpetContracts.Exceptions; using MagicCarpetDatabase.Implementations; using MagicCarpetDatabase.Models; using Microsoft.EntityFrameworkCore; +using Moq; using System; using System.Collections.Generic; using System.Linq; @@ -33,13 +34,13 @@ internal class TourStorageContractTests : BaseStorageContractTest [Test] public void Try_GetList_WhenHaveRecords_Test() { - var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(),"name 1"); + var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 2"); InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 3"); var list = _tourStorageContract.GetList(); Assert.That(list, Is.Not.Null); Assert.That(list, Has.Count.EqualTo(3)); - AssertElement(list.First(), tour); + AssertElement(list.First(x => x.Id == tour.Id), tour); } [Test] @@ -53,49 +54,59 @@ internal class TourStorageContractTests : BaseStorageContractTest [Test] public void Try_GetHistoryByTourId_WhenHaveRecords_Test() { - var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); - AssertElement(_tourStorageContract.GetElementById(tour.Id), tour); + var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); + InsertTourHistoryToDatabaseAndReturn(tour.Id, 20, DateTime.UtcNow.AddDays(-1)); + InsertTourHistoryToDatabaseAndReturn(tour.Id, 30, DateTime.UtcNow.AddMinutes(-10)); + InsertTourHistoryToDatabaseAndReturn(tour.Id, 40, DateTime.UtcNow.AddDays(1)); + var list = _tourStorageContract.GetHistoryByTourId(tour.Id); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(3)); } [Test] public void Try_GetHistoryByTourId_WhenNoRecords_Test() { - InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); - Assert.That(() => _tourStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); + var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); + InsertTourHistoryToDatabaseAndReturn(tour.Id, 20, DateTime.UtcNow.AddDays(-1)); + InsertTourHistoryToDatabaseAndReturn(tour.Id, 30, DateTime.UtcNow.AddMinutes(-10)); + InsertTourHistoryToDatabaseAndReturn(tour.Id, 40, DateTime.UtcNow.AddDays(1)); + var list = _tourStorageContract.GetHistoryByTourId(Guid.NewGuid().ToString()); + Assert.That(list, Is.Not.Null); + Assert.That(list, Has.Count.EqualTo(0)); } [Test] public void Try_GetElementById_WhenHaveRecord_Test() { - var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1"); + var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); AssertElement(_tourStorageContract.GetElementById(tour.Id), tour); } [Test] public void Try_GetElementById_WhenNoRecord_Test() { - InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1"); + InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); Assert.That(() => _tourStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); } [Test] public void Try_GetElementByName_WhenHaveRecord_Test() { - var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1"); + var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); AssertElement(_tourStorageContract.GetElementByName(tour.TourName), tour); } [Test] public void Try_GetElementByName_WhenNoRecord_Test() { - InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name1"); + InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); Assert.That(() => _tourStorageContract.GetElementByName("name"), Is.Null); } [Test] public void Try_AddElement_Test() { - var tour = CreateModel(Guid.NewGuid().ToString(), "tour1"); + var tour = CreateModel(Guid.NewGuid().ToString()); _tourStorageContract.AddElement(tour); AssertElement(GetTourFromDatabaseById(tour.Id), tour); } @@ -103,33 +114,24 @@ internal class TourStorageContractTests : BaseStorageContractTest [Test] public void Try_AddElement_WhenHaveRecordWithSameId_Test() { - var tour = CreateModel(Guid.NewGuid().ToString(), "Name"); - InsertTourToDatabaseAndReturn(tour.Id); + var tour = CreateModel(Guid.NewGuid().ToString()); + InsertTourToDatabaseAndReturn(tour.Id, tourName: "name unique"); Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf()); } [Test] public void Try_AddElement_WhenHaveRecordWithSameName_Test() { - var tour = CreateModel(Guid.NewGuid().ToString(), "Name"); - InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tour.TourName); + var tour = CreateModel(Guid.NewGuid().ToString(), "name unique"); + InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tourName: tour.TourName); Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf()); } [Test] public void Try_UpdElement_Test() { - var tour = CreateModel(Guid.NewGuid().ToString(), "Name"); - InsertTourToDatabaseAndReturn(tour.Id, tourName: tour.TourName); - _tourStorageContract.UpdElement(tour); - AssertElement(GetTourFromDatabaseById(tour.Id), tour); - } - - [Test] - public void Try_UpdElement_WhenNoChangeName_Test() - { - var tour = CreateModel(Guid.NewGuid().ToString(), "Name"); - InsertTourToDatabaseAndReturn(tour.Id, tour.TourName); + var tour = CreateModel(Guid.NewGuid().ToString(), "new name", "country"); + InsertTourToDatabaseAndReturn(tour.Id); _tourStorageContract.UpdElement(tour); AssertElement(GetTourFromDatabaseById(tour.Id), tour); } @@ -143,9 +145,9 @@ internal class TourStorageContractTests : BaseStorageContractTest [Test] public void Try_UpdElement_WhenHaveRecordWithSameName_Test() { - var tour = CreateModel(Guid.NewGuid().ToString(), "Duplicate Name"); - InsertTourToDatabaseAndReturn(tour.Id, "Old Name"); - InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tour.TourName); + var tour = CreateModel(Guid.NewGuid().ToString(), "name unique"); + InsertTourToDatabaseAndReturn(tour.Id, tourName: "name"); + InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tourName: tour.TourName); Assert.That(() => _tourStorageContract.UpdElement(tour), Throws.TypeOf()); } @@ -164,14 +166,22 @@ internal class TourStorageContractTests : BaseStorageContractTest Assert.That(() => _tourStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf()); } - private Tour InsertTourToDatabaseAndReturn(string id, string tourName = "test") + private Tour InsertTourToDatabaseAndReturn(string id, string tourName = "test", string tourCountry = "country", TourType tourType = TourType.Beach, double price = 1) { - var tour = new Tour { Id = id, TourName = tourName }; + var tour = new Tour() { Id = id, TourName = tourName, TourCountry = tourCountry, Type = tourType, Price = price }; MagicCarpetDbContext.Tours.Add(tour); MagicCarpetDbContext.SaveChanges(); return tour; } + private TourHistory InsertTourHistoryToDatabaseAndReturn(string tourId, double price, DateTime changeDate) + { + var tourHistory = new TourHistory() { Id = Guid.NewGuid().ToString(), TourId = tourId, OldPrice = price, ChangeDate = changeDate }; + MagicCarpetDbContext.TourHistories.Add(tourHistory); + MagicCarpetDbContext.SaveChanges(); + return tourHistory; + } + private static void AssertElement(TourDataModel? actual, Tour expected) { Assert.That(actual, Is.Not.Null); @@ -180,13 +190,13 @@ internal class TourStorageContractTests : BaseStorageContractTest Assert.That(actual.Id, Is.EqualTo(expected.Id)); Assert.That(actual.TourName, Is.EqualTo(expected.TourName)); Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry)); - Assert.That(actual.Price, Is.EqualTo(expected.Price)); Assert.That(actual.Type, Is.EqualTo(expected.Type)); + Assert.That(actual.Price, Is.EqualTo(expected.Price)); }); } - private static TourDataModel CreateModel(string id, string tourName = "test", string tourCountry = "country", double price = 1, TourType tourType = TourType.Sightseeing) - => new(id, tourName, tourCountry, price, tourType); + private static TourDataModel CreateModel(string id, string tourName = "test", string tourCountry = "country", TourType type = TourType.Beach, double price = 1) + => new(id, tourName, tourCountry, price, type); private Tour? GetTourFromDatabaseById(string id) => MagicCarpetDbContext.Tours.FirstOrDefault(x => x.Id == id); @@ -198,8 +208,8 @@ internal class TourStorageContractTests : BaseStorageContractTest Assert.That(actual.Id, Is.EqualTo(expected.Id)); Assert.That(actual.TourName, Is.EqualTo(expected.TourName)); Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry)); - Assert.That(actual.Price, Is.EqualTo(expected.Price)); Assert.That(actual.Type, Is.EqualTo(expected.Type)); + Assert.That(actual.Price, Is.EqualTo(expected.Price)); }); } -} +} \ No newline at end of file