исправлние в storage тестах

This commit is contained in:
2025-04-05 14:07:48 +04:00
parent 7a0fcca7b1
commit 618bc7f639
16 changed files with 150 additions and 186 deletions

View File

@@ -45,5 +45,8 @@ public class SaleTourDataModel(string saleId, string tourId, int count, double p
if (Count <= 0) if (Count <= 0)
throw new ValidationException("Field Count is less than or equal to 0"); throw new ValidationException("Field Count is less than or equal to 0");
if (Price <= 0)
throw new ValidationException("Field Price is less than or equal to 0");
} }
} }

View File

@@ -18,7 +18,7 @@ public class TourDataModel(string id, string tourName, string tourCountry, doubl
public string TourName { get; private set; } = tourName; public string TourName { get; private set; } = tourName;
public string TourCountry { get; private set; } = tourCountry; public string TourCountry { get; private set; } = tourCountry;
public double Price { get; private set; } = price; public double Price { get; private set; } = price;
public TourType Type { get; private set; } = tourType; public TourType TourType { get; private set; } = tourType;
public void Validate() public void Validate()
{ {
@@ -32,7 +32,7 @@ public class TourDataModel(string id, string tourName, string tourCountry, doubl
throw new ValidationException("Field TourCountry is empty"); throw new ValidationException("Field TourCountry is empty");
if (Price <= 0) if (Price <= 0)
throw new ValidationException("Field Price is less than or equal to 0"); throw new ValidationException("Field Price is less than or equal to 0");
if (Type == TourType.None) if (TourType == TourType.None)
throw new ValidationException("Field Type is empty"); throw new ValidationException("Field Type is empty");
} }
} }

View File

@@ -9,7 +9,7 @@ namespace MagicCarpetContracts.StoragesContracts;
public interface ISalaryStorageContract public interface ISalaryStorageContract
{ {
List<SalaryDataModel> GetList(DateTime startDate, DateTime endDate, string? employeeId = null); List<SalaryDataModel> GetList(DateTime? startDate, DateTime? endDate, string? employeeId = null);
void AddElement(SalaryDataModel salaryDataModel); void AddElement(SalaryDataModel salaryDataModel);
} }

View File

@@ -28,6 +28,7 @@ public class EmployeeStorageContract : IEmployeeStorageContract
}); });
_mapper = new Mapper(config); _mapper = new Mapper(config);
} }
public List<EmployeeDataModel> GetList(bool onlyActive = true, string? postId = null, DateTime? fromBirthDate = null, DateTime? toBirthDate = null, DateTime? fromEmploymentDate = null, DateTime? toEmploymentDate = null) public List<EmployeeDataModel> GetList(bool onlyActive = true, string? postId = null, DateTime? fromBirthDate = null, DateTime? toBirthDate = null, DateTime? fromEmploymentDate = null, DateTime? toEmploymentDate = null)
{ {
try try
@@ -43,11 +44,11 @@ public class EmployeeStorageContract : IEmployeeStorageContract
} }
if (fromBirthDate is not null && toBirthDate is not null) if (fromBirthDate is not null && toBirthDate is not null)
{ {
query = query.Where(x => x.BirthDate >= fromBirthDate && x.BirthDate <= toBirthDate); query = query.Where(x => x.BirthDate >= DateTime.SpecifyKind(fromBirthDate ?? DateTime.UtcNow, DateTimeKind.Utc) && x.BirthDate <= DateTime.SpecifyKind(toBirthDate ?? DateTime.UtcNow, DateTimeKind.Utc));
} }
if (fromEmploymentDate is not null && toEmploymentDate is not null) if (fromEmploymentDate is not null && toEmploymentDate is not null)
{ {
query = query.Where(x => x.EmploymentDate >= fromEmploymentDate && x.EmploymentDate <= toEmploymentDate); query = query.Where(x => x.EmploymentDate >= DateTime.SpecifyKind(fromEmploymentDate ?? DateTime.UtcNow, DateTimeKind.Utc) && x.EmploymentDate <= DateTime.SpecifyKind(toEmploymentDate ?? DateTime.UtcNow, DateTimeKind.Utc));
} }
return [.. JoinPost(query).Select(x => _mapper.Map<EmployeeDataModel>(x))]; return [.. JoinPost(query).Select(x => _mapper.Map<EmployeeDataModel>(x))];
} }
@@ -83,6 +84,7 @@ public class EmployeeStorageContract : IEmployeeStorageContract
throw new StorageException(ex); throw new StorageException(ex);
} }
} }
public EmployeeDataModel? GetElementByEmail(string email) public EmployeeDataModel? GetElementByEmail(string email)
{ {
try try
@@ -155,7 +157,7 @@ public class EmployeeStorageContract : IEmployeeStorageContract
} }
} }
private Employee? GetEmployeeById(string id) => _dbContext.Employees.FirstOrDefault(x => x.Id == id && !x.IsDeleted); private Employee? GetEmployeeById(string id) => AddPost(_dbContext.Employees.FirstOrDefault(x => x.Id == id && !x.IsDeleted));
private IQueryable<Employee> JoinPost(IQueryable<Employee> query) private IQueryable<Employee> JoinPost(IQueryable<Employee> query)
=> query.GroupJoin(_dbContext.Posts.Where(x => x.IsActual), x => x.PostId, y => y.PostId, (x, y) => new { Employee = x, Post = y }) => query.GroupJoin(_dbContext.Posts.Where(x => x.IsActual), x => x.PostId, y => y.PostId, (x, y) => new { Employee = x, Post = y })

View File

@@ -3,6 +3,7 @@ using MagicCarpetContracts.DataModels;
using MagicCarpetContracts.Exceptions; using MagicCarpetContracts.Exceptions;
using MagicCarpetContracts.StoragesContracts; using MagicCarpetContracts.StoragesContracts;
using MagicCarpetDatabase.Models; using MagicCarpetDatabase.Models;
using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -21,6 +22,7 @@ public class SalaryStorageContract : ISalaryStorageContract
_dbContext = dbContext; _dbContext = dbContext;
var config = new MapperConfiguration(cfg => var config = new MapperConfiguration(cfg =>
{ {
cfg.CreateMap<Employee, EmployeeDataModel>();
cfg.CreateMap<Salary, SalaryDataModel>(); cfg.CreateMap<Salary, SalaryDataModel>();
cfg.CreateMap<SalaryDataModel, Salary>() cfg.CreateMap<SalaryDataModel, Salary>()
.ForMember(dest => dest.EmployeeSalary, opt => opt.MapFrom(src => src.Salary)); .ForMember(dest => dest.EmployeeSalary, opt => opt.MapFrom(src => src.Salary));
@@ -28,15 +30,17 @@ public class SalaryStorageContract : ISalaryStorageContract
_mapper = new Mapper(config); _mapper = new Mapper(config);
} }
public List<SalaryDataModel> GetList(DateTime startDate, DateTime endDate, string? employeeId = null) public List<SalaryDataModel> GetList(DateTime? startDate, DateTime? endDate, string? employeeId = null)
{ {
try try
{ {
var query = _dbContext.Salaries.Where(x => x.SalaryDate >= startDate && x.SalaryDate <= endDate); var query = _dbContext.Salaries.Include(d => d.Employee).AsQueryable();
if (employeeId is not null) if (startDate.HasValue)
{ query = query.Where(x => x.SalaryDate >= DateTime.SpecifyKind(startDate ?? DateTime.UtcNow, DateTimeKind.Utc));
if (endDate.HasValue)
query = query.Where(x => x.SalaryDate <= DateTime.SpecifyKind(endDate ?? DateTime.UtcNow, DateTimeKind.Utc));
if (employeeId != null)
query = query.Where(x => x.EmployeeId == employeeId); query = query.Where(x => x.EmployeeId == employeeId);
}
return [.. query.Select(x => _mapper.Map<SalaryDataModel>(x))]; return [.. query.Select(x => _mapper.Map<SalaryDataModel>(x))];
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -22,18 +22,18 @@ public class SaleStorageContract : ISaleStorageContract
_dbContext = dbContext; _dbContext = dbContext;
var config = new MapperConfiguration(cfg => var config = new MapperConfiguration(cfg =>
{ {
cfg.CreateMap<Client, ClientDataModel>(); cfg.CreateMap<Client, ClientDataModel>();
cfg.CreateMap<Tour, TourDataModel>(); cfg.CreateMap<Tour, TourDataModel>();
cfg.CreateMap<Employee, EmployeeDataModel>(); cfg.CreateMap<Employee, EmployeeDataModel>();
cfg.CreateMap<SaleTour, SaleTourDataModel>(); cfg.CreateMap<SaleTour, SaleTourDataModel>();
cfg.CreateMap<SaleTourDataModel, SaleTour>() cfg.CreateMap<SaleTourDataModel, SaleTour>()
.ForMember(x => x.Tour, x => x.Ignore()); .ForMember(x => x.Tour, x => x.Ignore());
cfg.CreateMap<Sale, SaleDataModel>(); cfg.CreateMap<Sale, SaleDataModel>();
cfg.CreateMap<SaleDataModel, Sale>() cfg.CreateMap<SaleDataModel, Sale>()
.ForMember(x => x.IsCancel, x => x.MapFrom(src => false)) .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))
.ForMember(x => x.Employee, x => x.Ignore()) .ForMember(x => x.Employee, x => x.Ignore())
.ForMember(x => x.Client, x => x.Ignore()); .ForMember(x => x.Client, x => x.Ignore());
}); });
_mapper = new Mapper(config); _mapper = new Mapper(config);
} }
@@ -42,23 +42,23 @@ public class SaleStorageContract : ISaleStorageContract
{ {
try try
{ {
var query = _dbContext.Sales.Include(x => x.Client).Include(x => x.Employee).Include(x => x.SaleTours)!.ThenInclude(x => x.Tour).AsQueryable(); var query = _dbContext.Sales
if (startDate is not null && endDate is not null) .Include(r => r.Employee)
{ .Include(r => r.Client)
query = query.Where(x => x.SaleDate >= startDate && x.SaleDate < endDate); .Include(r => r.SaleTours)!
} .ThenInclude(d => d.Tour)
if (employeeId is not null) .AsQueryable();
{ if (startDate.HasValue)
query = query.Where(x => x.SaleDate >= DateTime.SpecifyKind(startDate ?? DateTime.UtcNow, DateTimeKind.Utc));
if (endDate.HasValue)
query = query.Where(x => x.SaleDate <= DateTime.SpecifyKind(endDate ?? DateTime.UtcNow, DateTimeKind.Utc));
if (employeeId != null)
query = query.Where(x => x.EmployeeId == employeeId); query = query.Where(x => x.EmployeeId == employeeId);
} if (clientId != null)
if (clientId is not null)
{
query = query.Where(x => x.ClientId == clientId); query = query.Where(x => x.ClientId == clientId);
} if (tourId != null)
if (tourId is not null)
{
query = query.Where(x => x.SaleTours!.Any(y => y.TourId == tourId)); query = query.Where(x => x.SaleTours!.Any(y => y.TourId == tourId));
} var s = query.ToList();
return [.. query.Select(x => _mapper.Map<SaleDataModel>(x))]; return [.. query.Select(x => _mapper.Map<SaleDataModel>(x))];
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -23,13 +23,13 @@ public class TourStorageContract : ITourStorageContract
_dbContext = dbContext; _dbContext = dbContext;
var config = new MapperConfiguration(cfg => var config = new MapperConfiguration(cfg =>
{ {
cfg.CreateMap<Tour, TourDataModel>() cfg.CreateMap<Tour, TourDataModel>();
.ConstructUsing(src => new TourDataModel(src.Id, src.TourName, src.TourCountry, src.Price, src.Type));
cfg.CreateMap<TourDataModel, Tour>(); cfg.CreateMap<TourDataModel, Tour>();
cfg.CreateMap<TourHistory, TourHistoryDataModel>(); cfg.CreateMap<TourHistory, TourHistoryDataModel>();
}); });
_mapper = new Mapper(config); _mapper = new Mapper(config);
} }
public List<TourDataModel> GetList() public List<TourDataModel> GetList()
{ {
try try
@@ -129,7 +129,7 @@ public class TourStorageContract : ITourStorageContract
throw; throw;
} }
} }
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(); _dbContext.ChangeTracker.Clear();
throw new ElementExistsException("TourName", tourDataModel.TourName); throw new ElementExistsException("TourName", tourDataModel.TourName);

View File

@@ -15,7 +15,7 @@ public class Tour
public required string TourName { get; set; } public required string TourName { get; set; }
public string? TourCountry { get; set; } public string? TourCountry { get; set; }
public double Price { get; set; } public double Price { get; set; }
public required TourType Type { get; set; } public required TourType TourType { get; set; }
[ForeignKey("TourId")] [ForeignKey("TourId")]
public List<SaleTour>? SaleTours { get; set; } public List<SaleTour>? SaleTours { get; set; }
[ForeignKey("TourId")] [ForeignKey("TourId")]

View File

@@ -249,7 +249,7 @@ internal class TourBusinessLogicContractTests
.Callback((TourDataModel x) => .Callback((TourDataModel x) =>
{ {
flag = x.Id == record.Id && x.TourName == record.TourName && x.TourCountry == record.TourCountry flag = x.Id == record.Id && x.TourName == record.TourName && x.TourCountry == record.TourCountry
&& x.Price == record.Price && x.Type == record.Type; && x.Price == record.Price && x.TourType == record.TourType;
}); });
//Act //Act
_tourBusinessLogicContract.InsertTour(record); _tourBusinessLogicContract.InsertTour(record);
@@ -304,7 +304,7 @@ internal class TourBusinessLogicContractTests
.Callback((TourDataModel x) => .Callback((TourDataModel x) =>
{ {
flag = x.Id == record.Id && x.TourName == record.TourName && x.TourCountry == record.TourCountry flag = x.Id == record.Id && x.TourName == record.TourName && x.TourCountry == record.TourCountry
&& x.Price == record.Price && x.Type == record.Type; && x.Price == record.Price && x.TourType == record.TourType;
}); });
//Act //Act
_tourBusinessLogicContract.UpdateTour(record); _tourBusinessLogicContract.UpdateTour(record);

View File

@@ -75,7 +75,7 @@ internal class TourDataModelTests
Assert.That(tour.TourName, Is.EqualTo(tourName)); Assert.That(tour.TourName, Is.EqualTo(tourName));
Assert.That(tour.TourCountry, Is.EqualTo(tourCountry)); Assert.That(tour.TourCountry, Is.EqualTo(tourCountry));
Assert.That(tour.Price, Is.EqualTo(price)); Assert.That(tour.Price, Is.EqualTo(price));
Assert.That(tour.Type, Is.EqualTo(tourType)); Assert.That(tour.TourType, Is.EqualTo(tourType));
}); });
} }

View File

@@ -28,9 +28,9 @@ internal static class MagicCarpetDbContextExtensions
return post; return post;
} }
public static Tour InsertTourToDatabaseAndReturn(this MagicCarpetDbContext dbContext, string? id = null, string tourName = "test", TourType tourType = TourType.Beach, double price = 1) public static Tour InsertTourToDatabaseAndReturn(this MagicCarpetDbContext dbContext, string? id = null, string tourName = "test", string tourCountry = "country", TourType tourType = TourType.Beach, double price = 1)
{ {
var tour = new Tour() { Id = id ?? Guid.NewGuid().ToString(), TourName = tourName, Type = tourType, Price = price }; var tour = new Tour() { Id = id ?? Guid.NewGuid().ToString(), TourName = tourName, TourCountry = tourCountry, TourType = tourType, Price = price };
dbContext.Tours.Add(tour); dbContext.Tours.Add(tour);
dbContext.SaveChanges(); dbContext.SaveChanges();
return tour; return tour;
@@ -52,14 +52,14 @@ internal static class MagicCarpetDbContextExtensions
return salary; return salary;
} }
public static Sale InsertSaleToDatabaseAndReturn(this MagicCarpetDbContext dbContext, string employeeId, string? clientId = null, DateTime? saleDate = null, double sum = 1, DiscountType discountType = DiscountType.OnSale, double discount = 0, bool isCancel = false, List<(string, int, double)>? tours = null) public static Sale InsertSaleToDatabaseAndReturn(this MagicCarpetDbContext dbContext, string employeeId, string? clientId = null, DateTime? saleDate = null, double sum = 1, DiscountType discountType = DiscountType.None, double discount = 0, bool isCancel = false, List<(string, int, double)>? tours = null)
{ {
var sale = new Sale() { EmployeeId = employeeId, ClientId = clientId, SaleDate = saleDate ?? DateTime.UtcNow, Sum = sum, DiscountType = discountType, Discount = discount, IsCancel = isCancel, SaleTours = [] }; var sale = new Sale() { EmployeeId = employeeId, ClientId = clientId, SaleDate = saleDate ?? DateTime.UtcNow, Sum = sum, DiscountType = discountType, Discount = discount, IsCancel = isCancel, SaleTours = [] };
if (tours is not null) if (tours is not null)
{ {
foreach (var elem in tours) foreach (var elem in tours)
{ {
sale.SaleTours.Add(new SaleTour { TourId = elem.Item1, SaleId = sale.Id, Count = elem.Item2, Price = elem.Item3 }); sale.SaleTours.Add(new SaleTour { TourId = elem.Item1, SaleId = sale.Id, Count = elem.Item2, Price = elem.Item3 });
} }
} }
dbContext.Sales.Add(sale); dbContext.Sales.Add(sale);

View File

@@ -2,6 +2,7 @@
using MagicCarpetContracts.Exceptions; using MagicCarpetContracts.Exceptions;
using MagicCarpetDatabase.Implementations; using MagicCarpetDatabase.Implementations;
using MagicCarpetDatabase.Models; using MagicCarpetDatabase.Models;
using MagicCarpetTests.Infrastructure;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -25,19 +26,19 @@ class EmployeeStorageContractTests : BaseStorageContractTest
[TearDown] [TearDown]
public void TearDown() public void TearDown()
{ {
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Employees\"CASCADE; "); MagicCarpetDbContext.RemoveEmployeesFromDatabase();
} }
[Test] [Test]
public void Try_GetList_WhenHaveRecords_Test() public void Try_GetList_WhenHaveRecords_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com"); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com");
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com"); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com");
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com"); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com");
var list = _employeeStorageContract.GetList(); var list = _employeeStorageContract.GetList();
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3)); Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(), employee); AssertElement(list.First(x => x.Id == employee.Id), employee);
} }
[Test] [Test]
@@ -52,9 +53,9 @@ class EmployeeStorageContractTests : BaseStorageContractTest
public void Try_GetList_ByPostId_Test() public void Try_GetList_ByPostId_Test()
{ {
var postId = Guid.NewGuid().ToString(); var postId = Guid.NewGuid().ToString();
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", postId); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", postId);
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com", postId); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2", "abc@gmail.com", postId);
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com"); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3", "abc@gmail.com");
var list = _employeeStorageContract.GetList(postId: postId); var list = _employeeStorageContract.GetList(postId: postId);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(2)); Assert.That(list, Has.Count.EqualTo(2));
@@ -64,10 +65,10 @@ class EmployeeStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByBirthDate_Test() public void Try_GetList_ByBirthDate_Test()
{ {
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", birthDate: DateTime.UtcNow.AddYears(-25)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); 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, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(2)); Assert.That(list, Has.Count.EqualTo(2));
@@ -76,10 +77,10 @@ class EmployeeStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByEmploymentDate_Test() public void Try_GetList_ByEmploymentDate_Test()
{ {
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", employmentDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); 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, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(2)); Assert.That(list, Has.Count.EqualTo(2));
@@ -89,12 +90,11 @@ class EmployeeStorageContractTests : BaseStorageContractTest
public void Try_GetList_ByAllParameters_Test() public void Try_GetList_ByAllParameters_Test()
{ {
var postId = Guid.NewGuid().ToString(); var postId = Guid.NewGuid().ToString();
InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1", "abc@gmail.com", postId, birthDate: DateTime.UtcNow.AddYears(-25), employmentDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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)); MagicCarpetDbContext.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), 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));
fromEmploymentDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-1), toEmploymentDate: DateTime.UtcNow.AddDays(1).AddMinutes(1));
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(1)); Assert.That(list, Has.Count.EqualTo(1));
} }
@@ -102,7 +102,7 @@ class EmployeeStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetElementById_WhenHaveRecord_Test() public void Try_GetElementById_WhenHaveRecord_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString()); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString());
AssertElement(_employeeStorageContract.GetElementById(employee.Id), employee); AssertElement(_employeeStorageContract.GetElementById(employee.Id), employee);
} }
@@ -115,7 +115,7 @@ class EmployeeStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetElementByFIO_WhenHaveRecord_Test() public void Try_GetElementByFIO_WhenHaveRecord_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString()); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString());
AssertElement(_employeeStorageContract.GetElementByFIO(employee.FIO), employee); AssertElement(_employeeStorageContract.GetElementByFIO(employee.FIO), employee);
} }
@@ -130,14 +130,14 @@ class EmployeeStorageContractTests : BaseStorageContractTest
{ {
var employee = CreateModel(Guid.NewGuid().ToString()); var employee = CreateModel(Guid.NewGuid().ToString());
_employeeStorageContract.AddElement(employee); _employeeStorageContract.AddElement(employee);
AssertElement(GetEmployeeFromDatabase(employee.Id), employee); AssertElement(MagicCarpetDbContext.GetEmployeeFromDatabaseById(employee.Id), employee);
} }
[Test] [Test]
public void Try_AddElement_WhenHaveRecordWithSameId_Test() public void Try_AddElement_WhenHaveRecordWithSameId_Test()
{ {
var employee = CreateModel(Guid.NewGuid().ToString()); var employee = CreateModel(Guid.NewGuid().ToString());
InsertEmployeeToDatabaseAndReturn(employee.Id); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(employee.Id);
Assert.That(() => _employeeStorageContract.AddElement(employee), Throws.TypeOf<ElementExistsException>()); Assert.That(() => _employeeStorageContract.AddElement(employee), Throws.TypeOf<ElementExistsException>());
} }
@@ -145,9 +145,9 @@ class EmployeeStorageContractTests : BaseStorageContractTest
public void Try_UpdElement_Test() public void Try_UpdElement_Test()
{ {
var employee = CreateModel(Guid.NewGuid().ToString(), "New Fio"); var employee = CreateModel(Guid.NewGuid().ToString(), "New Fio");
InsertEmployeeToDatabaseAndReturn(employee.Id); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(employee.Id);
_employeeStorageContract.UpdElement(employee); _employeeStorageContract.UpdElement(employee);
AssertElement(GetEmployeeFromDatabase(employee.Id), employee); AssertElement(MagicCarpetDbContext.GetEmployeeFromDatabaseById(employee.Id), employee);
} }
[Test] [Test]
@@ -160,16 +160,16 @@ class EmployeeStorageContractTests : BaseStorageContractTest
public void Try_UpdElement_WhenNoRecordWasDeleted_Test() public void Try_UpdElement_WhenNoRecordWasDeleted_Test()
{ {
var employee = CreateModel(Guid.NewGuid().ToString()); var employee = CreateModel(Guid.NewGuid().ToString());
InsertEmployeeToDatabaseAndReturn(employee.Id, isDeleted: true); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(employee.Id, isDeleted: true);
Assert.That(() => _employeeStorageContract.UpdElement(employee), Throws.TypeOf<ElementNotFoundException>()); Assert.That(() => _employeeStorageContract.UpdElement(employee), Throws.TypeOf<ElementNotFoundException>());
} }
[Test] [Test]
public void Try_DelElement_Test() public void Try_DelElement_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString()); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(Guid.NewGuid().ToString());
_employeeStorageContract.DelElement(employee.Id); _employeeStorageContract.DelElement(employee.Id);
var element = GetEmployeeFromDatabase(employee.Id); var element = MagicCarpetDbContext.GetEmployeeFromDatabaseById(employee.Id);
Assert.That(element, Is.Not.Null); Assert.That(element, Is.Not.Null);
Assert.That(element.IsDeleted); Assert.That(element.IsDeleted);
} }
@@ -184,18 +184,10 @@ class EmployeeStorageContractTests : BaseStorageContractTest
public void Try_DelElement_WhenNoRecordWasDeleted_Test() public void Try_DelElement_WhenNoRecordWasDeleted_Test()
{ {
var employee = CreateModel(Guid.NewGuid().ToString()); var employee = CreateModel(Guid.NewGuid().ToString());
InsertEmployeeToDatabaseAndReturn(employee.Id, isDeleted: true); MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(employee.Id, isDeleted: true);
Assert.That(() => _employeeStorageContract.DelElement(employee.Id), Throws.TypeOf<ElementNotFoundException>()); Assert.That(() => _employeeStorageContract.DelElement(employee.Id), Throws.TypeOf<ElementNotFoundException>());
} }
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, 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;
}
private static void AssertElement(EmployeeDataModel? actual, Employee expected) private static void AssertElement(EmployeeDataModel? actual, Employee expected)
{ {
Assert.That(actual, Is.Not.Null); Assert.That(actual, Is.Not.Null);
@@ -212,9 +204,7 @@ class EmployeeStorageContractTests : BaseStorageContractTest
} }
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) => 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); 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);
private static void AssertElement(Employee? actual, EmployeeDataModel expected) private static void AssertElement(Employee? actual, EmployeeDataModel expected)
{ {

View File

@@ -1,6 +1,7 @@
using MagicCarpetContracts.DataModels; using MagicCarpetContracts.DataModels;
using MagicCarpetDatabase.Implementations; using MagicCarpetDatabase.Implementations;
using MagicCarpetDatabase.Models; using MagicCarpetDatabase.Models;
using MagicCarpetTests.Infrastructure;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -20,26 +21,26 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
public void SetUp() public void SetUp()
{ {
_salaryStorageContract = new SalaryStorageContract(MagicCarpetDbContext); _salaryStorageContract = new SalaryStorageContract(MagicCarpetDbContext);
_employee = InsertEmployeeToDatabaseAndReturn(); _employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn();
} }
[TearDown] [TearDown]
public void TearDown() public void TearDown()
{ {
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Salaries\" CASCADE;"); MagicCarpetDbContext.RemoveSalariesFromDatabase();
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Employees\" CASCADE;"); MagicCarpetDbContext.RemoveEmployeesFromDatabase();
} }
[Test] [Test]
public void Try_GetList_WhenHaveRecords_Test() public void Try_GetList_WhenHaveRecords_Test()
{ {
var salary = InsertSalaryToDatabaseAndReturn(_employee.Id, employeeSalary: 100); var salary = MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, employeeSalary: 100);
InsertSalaryToDatabaseAndReturn(_employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id);
InsertSalaryToDatabaseAndReturn(_employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id);
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-10), DateTime.UtcNow.AddDays(10)); var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-10), DateTime.UtcNow.AddDays(10));
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3)); Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(), salary); AssertElement(list.Single(x => x.Salary == salary.EmployeeSalary), salary);
} }
[Test] [Test]
@@ -53,12 +54,12 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_OnlyInDatePeriod_Test() public void Try_GetList_OnlyInDatePeriod_Test()
{ {
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-5));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(5));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1)); var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1));
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.Multiple(() => Assert.Multiple(() =>
@@ -70,10 +71,10 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByEmployee_Test() public void Try_GetList_ByEmployee_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn("name 2"); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn("name 2");
InsertSalaryToDatabaseAndReturn(_employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id);
InsertSalaryToDatabaseAndReturn(_employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id);
InsertSalaryToDatabaseAndReturn(employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id);
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1), _employee.Id); var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1), _employee.Id);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.Multiple(() => Assert.Multiple(() =>
@@ -86,13 +87,13 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetList_ByEmployeeOnlyInDatePeriod_Test() public void Try_GetList_ByEmployeeOnlyInDatePeriod_Test()
{ {
var employee = InsertEmployeeToDatabaseAndReturn("name 2"); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 2");
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(_employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1), _employee.Id); var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-1), DateTime.UtcNow.AddDays(1), _employee.Id);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.Multiple(() => Assert.Multiple(() =>
@@ -107,23 +108,7 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
{ {
var salary = CreateModel(_employee.Id); var salary = CreateModel(_employee.Id);
_salaryStorageContract.AddElement(salary); _salaryStorageContract.AddElement(salary);
AssertElement(GetSalaryFromDatabaseByEmployeeId(_employee.Id), salary); AssertElement(MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(_employee.Id).First(), salary);
}
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, Email = employeeEmail, IsDeleted = false };
MagicCarpetDbContext.Employees.Add(employee);
MagicCarpetDbContext.SaveChanges();
return employee;
}
private Salary InsertSalaryToDatabaseAndReturn(string employeeId, double employeeSalary = 1, DateTime? salaryDate = null)
{
var salary = new Salary() { EmployeeId = employeeId, EmployeeSalary = employeeSalary, SalaryDate = salaryDate ?? DateTime.UtcNow };
MagicCarpetDbContext.Salaries.Add(salary);
MagicCarpetDbContext.SaveChanges();
return salary;
} }
private static void AssertElement(SalaryDataModel? actual, Salary expected) private static void AssertElement(SalaryDataModel? actual, Salary expected)
@@ -139,8 +124,6 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
private static SalaryDataModel CreateModel(string employeeId, double employeeSalary = 1, DateTime? salaryDate = null) private static SalaryDataModel CreateModel(string employeeId, double employeeSalary = 1, DateTime? salaryDate = null)
=> new(employeeId, salaryDate ?? DateTime.UtcNow, employeeSalary); => new(employeeId, salaryDate ?? DateTime.UtcNow, employeeSalary);
private Salary? GetSalaryFromDatabaseByEmployeeId(string id) => MagicCarpetDbContext.Salaries.FirstOrDefault(x => x.EmployeeId == id);
private static void AssertElement(Salary? actual, SalaryDataModel expected) private static void AssertElement(Salary? actual, SalaryDataModel expected)
{ {
Assert.That(actual, Is.Not.Null); Assert.That(actual, Is.Not.Null);

View File

@@ -1,4 +1,4 @@
using MagicCarpetContracts.DataModels;  using MagicCarpetContracts.DataModels;
using MagicCarpetContracts.Enums; using MagicCarpetContracts.Enums;
using MagicCarpetContracts.Exceptions; using MagicCarpetContracts.Exceptions;
using MagicCarpetDatabase.Implementations; using MagicCarpetDatabase.Implementations;

View File

@@ -3,6 +3,7 @@ using MagicCarpetContracts.Enums;
using MagicCarpetContracts.Exceptions; using MagicCarpetContracts.Exceptions;
using MagicCarpetDatabase.Implementations; using MagicCarpetDatabase.Implementations;
using MagicCarpetDatabase.Models; using MagicCarpetDatabase.Models;
using MagicCarpetTests.Infrastructure;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Moq; using Moq;
using System; using System;
@@ -28,15 +29,15 @@ internal class TourStorageContractTests : BaseStorageContractTest
[TearDown] [TearDown]
public void TearDown() public void TearDown()
{ {
MagicCarpetDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Tours\" CASCADE;"); MagicCarpetDbContext.RemoveToursFromDatabase();
} }
[Test] [Test]
public void Try_GetList_WhenHaveRecords_Test() public void Try_GetList_WhenHaveRecords_Test()
{ {
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 2"); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 2");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 3"); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 3");
var list = _tourStorageContract.GetList(); var list = _tourStorageContract.GetList();
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3)); Assert.That(list, Has.Count.EqualTo(3));
@@ -54,10 +55,10 @@ internal class TourStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetHistoryByTourId_WhenHaveRecords_Test() public void Try_GetHistoryByTourId_WhenHaveRecords_Test()
{ {
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1");
InsertTourHistoryToDatabaseAndReturn(tour.Id, 20, DateTime.UtcNow.AddDays(-1)); MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tour.Id, 20, DateTime.UtcNow.AddDays(-1));
InsertTourHistoryToDatabaseAndReturn(tour.Id, 30, DateTime.UtcNow.AddMinutes(-10)); MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tour.Id, 30, DateTime.UtcNow.AddMinutes(-10));
InsertTourHistoryToDatabaseAndReturn(tour.Id, 40, DateTime.UtcNow.AddDays(1)); MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tour.Id, 40, DateTime.UtcNow.AddDays(1));
var list = _tourStorageContract.GetHistoryByTourId(tour.Id); var list = _tourStorageContract.GetHistoryByTourId(tour.Id);
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3)); Assert.That(list, Has.Count.EqualTo(3));
@@ -66,10 +67,10 @@ internal class TourStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetHistoryByTourId_WhenNoRecords_Test() public void Try_GetHistoryByTourId_WhenNoRecords_Test()
{ {
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1"); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1");
InsertTourHistoryToDatabaseAndReturn(tour.Id, 20, DateTime.UtcNow.AddDays(-1)); MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tour.Id, 20, DateTime.UtcNow.AddDays(-1));
InsertTourHistoryToDatabaseAndReturn(tour.Id, 30, DateTime.UtcNow.AddMinutes(-10)); MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tour.Id, 30, DateTime.UtcNow.AddMinutes(-10));
InsertTourHistoryToDatabaseAndReturn(tour.Id, 40, DateTime.UtcNow.AddDays(1)); MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tour.Id, 40, DateTime.UtcNow.AddDays(1));
var list = _tourStorageContract.GetHistoryByTourId(Guid.NewGuid().ToString()); var list = _tourStorageContract.GetHistoryByTourId(Guid.NewGuid().ToString());
Assert.That(list, Is.Not.Null); Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(0)); Assert.That(list, Has.Count.EqualTo(0));
@@ -78,28 +79,28 @@ internal class TourStorageContractTests : BaseStorageContractTest
[Test] [Test]
public void Try_GetElementById_WhenHaveRecord_Test() public void Try_GetElementById_WhenHaveRecord_Test()
{ {
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
AssertElement(_tourStorageContract.GetElementById(tour.Id), tour); AssertElement(_tourStorageContract.GetElementById(tour.Id), tour);
} }
[Test] [Test]
public void Try_GetElementById_WhenNoRecord_Test() public void Try_GetElementById_WhenNoRecord_Test()
{ {
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
Assert.That(() => _tourStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null); Assert.That(() => _tourStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
} }
[Test] [Test]
public void Try_GetElementByName_WhenHaveRecord_Test() public void Try_GetElementByName_WhenHaveRecord_Test()
{ {
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
AssertElement(_tourStorageContract.GetElementByName(tour.TourName), tour); AssertElement(_tourStorageContract.GetElementByName(tour.TourName), tour);
} }
[Test] [Test]
public void Try_GetElementByName_WhenNoRecord_Test() public void Try_GetElementByName_WhenNoRecord_Test()
{ {
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
Assert.That(() => _tourStorageContract.GetElementByName("name"), Is.Null); Assert.That(() => _tourStorageContract.GetElementByName("name"), Is.Null);
} }
@@ -108,14 +109,14 @@ internal class TourStorageContractTests : BaseStorageContractTest
{ {
var tour = CreateModel(Guid.NewGuid().ToString()); var tour = CreateModel(Guid.NewGuid().ToString());
_tourStorageContract.AddElement(tour); _tourStorageContract.AddElement(tour);
AssertElement(GetTourFromDatabaseById(tour.Id), tour); AssertElement(MagicCarpetDbContext.GetTourFromDatabaseById(tour.Id), tour);
} }
[Test] [Test]
public void Try_AddElement_WhenHaveRecordWithSameId_Test() public void Try_AddElement_WhenHaveRecordWithSameId_Test()
{ {
var tour = CreateModel(Guid.NewGuid().ToString()); var tour = CreateModel(Guid.NewGuid().ToString());
InsertTourToDatabaseAndReturn(tour.Id, tourName: "name unique"); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tour.Id, tourName: "name unique");
Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf<ElementExistsException>()); Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf<ElementExistsException>());
} }
@@ -123,17 +124,17 @@ internal class TourStorageContractTests : BaseStorageContractTest
public void Try_AddElement_WhenHaveRecordWithSameName_Test() public void Try_AddElement_WhenHaveRecordWithSameName_Test()
{ {
var tour = CreateModel(Guid.NewGuid().ToString(), "name unique"); var tour = CreateModel(Guid.NewGuid().ToString(), "name unique");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tourName: tour.TourName); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tourName: tour.TourName);
Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf<ElementExistsException>()); Assert.That(() => _tourStorageContract.AddElement(tour), Throws.TypeOf<ElementExistsException>());
} }
[Test] [Test]
public void Try_UpdElement_Test() public void Try_UpdElement_Test()
{ {
var tour = CreateModel(Guid.NewGuid().ToString(), "new name", "country"); var tour = CreateModel(Guid.NewGuid().ToString(), "new name", tourType: TourType.Beach);
InsertTourToDatabaseAndReturn(tour.Id); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tour.Id);
_tourStorageContract.UpdElement(tour); _tourStorageContract.UpdElement(tour);
AssertElement(GetTourFromDatabaseById(tour.Id), tour); AssertElement(MagicCarpetDbContext.GetTourFromDatabaseById(tour.Id), tour);
} }
[Test] [Test]
@@ -146,17 +147,17 @@ internal class TourStorageContractTests : BaseStorageContractTest
public void Try_UpdElement_WhenHaveRecordWithSameName_Test() public void Try_UpdElement_WhenHaveRecordWithSameName_Test()
{ {
var tour = CreateModel(Guid.NewGuid().ToString(), "name unique"); var tour = CreateModel(Guid.NewGuid().ToString(), "name unique");
InsertTourToDatabaseAndReturn(tour.Id, tourName: "name"); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tour.Id, tourName: "name");
InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString(), tourName: tour.TourName); MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourName: tour.TourName);
Assert.That(() => _tourStorageContract.UpdElement(tour), Throws.TypeOf<ElementExistsException>()); Assert.That(() => _tourStorageContract.UpdElement(tour), Throws.TypeOf<ElementExistsException>());
} }
[Test] [Test]
public void Try_DelElement_Test() public void Try_DelElement_Test()
{ {
var tour = InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString()); var tour = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(Guid.NewGuid().ToString());
_tourStorageContract.DelElement(tour.Id); _tourStorageContract.DelElement(tour.Id);
var element = GetTourFromDatabaseById(tour.Id); var element = MagicCarpetDbContext.GetTourFromDatabaseById(tour.Id);
Assert.That(element, Is.Null); Assert.That(element, Is.Null);
} }
@@ -165,23 +166,6 @@ internal class TourStorageContractTests : BaseStorageContractTest
{ {
Assert.That(() => _tourStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>()); Assert.That(() => _tourStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>());
} }
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, 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) private static void AssertElement(TourDataModel? actual, Tour expected)
{ {
Assert.That(actual, Is.Not.Null); Assert.That(actual, Is.Not.Null);
@@ -190,15 +174,13 @@ internal class TourStorageContractTests : BaseStorageContractTest
Assert.That(actual.Id, Is.EqualTo(expected.Id)); Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.TourName, Is.EqualTo(expected.TourName)); Assert.That(actual.TourName, Is.EqualTo(expected.TourName));
Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry)); Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry));
Assert.That(actual.Type, Is.EqualTo(expected.Type)); Assert.That(actual.TourType, Is.EqualTo(expected.TourType));
Assert.That(actual.Price, Is.EqualTo(expected.Price)); Assert.That(actual.Price, Is.EqualTo(expected.Price));
}); });
} }
private static TourDataModel CreateModel(string id, string tourName = "test", string tourCountry = "country", TourType type = TourType.Beach, double price = 1) private static TourDataModel CreateModel(string id, string tourName = "test", string tourCountry = "country", TourType tourType = TourType.Ski, double price = 1)
=> new(id, tourName, tourCountry, price, type); => new(id, tourName,tourCountry, price, tourType);
private Tour? GetTourFromDatabaseById(string id) => MagicCarpetDbContext.Tours.FirstOrDefault(x => x.Id == id);
private static void AssertElement(Tour? actual, TourDataModel expected) private static void AssertElement(Tour? actual, TourDataModel expected)
{ {
@@ -208,7 +190,7 @@ internal class TourStorageContractTests : BaseStorageContractTest
Assert.That(actual.Id, Is.EqualTo(expected.Id)); Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.TourName, Is.EqualTo(expected.TourName)); Assert.That(actual.TourName, Is.EqualTo(expected.TourName));
Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry)); Assert.That(actual.TourCountry, Is.EqualTo(expected.TourCountry));
Assert.That(actual.Type, Is.EqualTo(expected.Type)); Assert.That(actual.TourType, Is.EqualTo(expected.TourType));
Assert.That(actual.Price, Is.EqualTo(expected.Price)); Assert.That(actual.Price, Is.EqualTo(expected.Price));
}); });
} }

View File

@@ -354,7 +354,7 @@ internal class TourControllerTests : BaseWebApiControllerTest
{ {
Assert.That(actual.Id, Is.EqualTo(expected.Id)); Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.TourName, Is.EqualTo(expected.TourName)); Assert.That(actual.TourName, Is.EqualTo(expected.TourName));
Assert.That(actual.TourType, Is.EqualTo(expected.Type.ToString())); Assert.That(actual.TourType, Is.EqualTo(expected.TourType.ToString()));
Assert.That(actual.Price, Is.EqualTo(expected.Price)); Assert.That(actual.Price, Is.EqualTo(expected.Price));
}); });
} }
@@ -386,7 +386,7 @@ internal class TourControllerTests : BaseWebApiControllerTest
{ {
Assert.That(actual.Id, Is.EqualTo(expected.Id)); Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.TourName, Is.EqualTo(expected.TourName)); Assert.That(actual.TourName, Is.EqualTo(expected.TourName));
Assert.That(actual.Type.ToString(), Is.EqualTo(expected.TourType)); Assert.That(actual.TourType.ToString(), Is.EqualTo(expected.TourType));
Assert.That(actual.Price, Is.EqualTo(expected.Price)); Assert.That(actual.Price, Is.EqualTo(expected.Price));
}); });
} }