lab_4 complete
This commit is contained in:
@@ -57,22 +57,17 @@ internal class SalaryBusinessLogicContract(ISalaryStorageContract salaryStorageC
|
||||
{
|
||||
_logger.LogInformation("CalculateSalaryByMounth: {date}", date);
|
||||
var startDate = new DateTime(date.Year, date.Month, 1);
|
||||
var finishDate = new DateTime(date.Year, date.Month,
|
||||
DateTime.DaysInMonth(date.Year, date.Month));
|
||||
var workers = _workerStorageContract.GetList() ?? throw new
|
||||
NullListException();
|
||||
var finishDate = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));
|
||||
var workers = _workerStorageContract.GetList() ?? throw new NullListException();
|
||||
foreach (var worker in workers)
|
||||
{
|
||||
var requests = _requestStorageContract.GetList(startDate,
|
||||
finishDate, workerId: worker.Id)?.Sum(x => x.Sum) ??
|
||||
throw new NullListException();
|
||||
var post = _postStorageContract.GetElementById(worker.PostId)
|
||||
??
|
||||
throw new NullListException();
|
||||
var requests = _requestStorageContract.GetList(startDate, finishDate, workerId: worker.Id)?.Sum(x => x.Sum) ??
|
||||
throw new NullListException();
|
||||
var post = _postStorageContract.GetElementById(worker.PostId) ??
|
||||
throw new NullListException();
|
||||
var salary = post.Salary + requests * 0.1;
|
||||
_logger.LogDebug("The employee {workerId} was paid a salary of { salary} ", worker.Id, salary);
|
||||
_salaryStorageContract.AddElement(new
|
||||
SalaryDataModel(worker.Id, finishDate, salary));
|
||||
_logger.LogDebug("The employee {workerId} was paid a salary of {salary}", worker.Id, salary);
|
||||
_salaryStorageContract.AddElement(new SalaryDataModel(worker.Id, finishDate, salary));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts;
|
||||
|
||||
public interface ISalaryAdapter
|
||||
{
|
||||
SalaryOperationResponse GetListByPeriod(DateTime fromDate, DateTime toDate);
|
||||
SalaryOperationResponse GetListByPeriodByWorker(DateTime fromDate, DateTime toDate, string workerId);
|
||||
SalaryOperationResponse CalculateSalary(DateTime date);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts;
|
||||
|
||||
public interface IWorkerAdapter
|
||||
{
|
||||
WorkerOperationResponse GetList(bool includeDeleted);
|
||||
WorkerOperationResponse GetPostList(string id, bool includeDeleted);
|
||||
WorkerOperationResponse GetListByBirthDate(DateTime fromDate, DateTime toDate, bool includeDeleted);
|
||||
WorkerOperationResponse GetListByEmploymentDate(DateTime fromDate, DateTime
|
||||
toDate, bool includeDeleted);
|
||||
WorkerOperationResponse GetElement(string data);
|
||||
WorkerOperationResponse RegisterWorker(WorkerBindingModel workerModel);
|
||||
WorkerOperationResponse ChangeWorkerInfo(WorkerBindingModel workerModel);
|
||||
WorkerOperationResponse RemoveWorker(string id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
|
||||
public class SalaryOperationResponse : OperationResponse
|
||||
{
|
||||
public static SalaryOperationResponse OK(List<SalaryViewModel> data) => OK<SalaryOperationResponse, List<SalaryViewModel>>(data);
|
||||
public static SalaryOperationResponse NoContent() => NoContent<SalaryOperationResponse>();
|
||||
public static SalaryOperationResponse NotFound(string message) => NotFound<SalaryOperationResponse>(message);
|
||||
public static SalaryOperationResponse BadRequest(string message) => BadRequest<SalaryOperationResponse>(message);
|
||||
public static SalaryOperationResponse InternalServerError(string message) => InternalServerError<SalaryOperationResponse>(message);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
public class WorkerOperationResponse : OperationResponse
|
||||
{
|
||||
public static WorkerOperationResponse OK(List<WorkerViewModel> data) =>
|
||||
OK<WorkerOperationResponse, List<WorkerViewModel>>(data);
|
||||
public static WorkerOperationResponse OK(WorkerViewModel data) =>
|
||||
OK<WorkerOperationResponse, WorkerViewModel>(data);
|
||||
public static WorkerOperationResponse NoContent() =>
|
||||
NoContent<WorkerOperationResponse>();
|
||||
public static WorkerOperationResponse NotFound(string message) =>
|
||||
NotFound<WorkerOperationResponse>(message);
|
||||
public static WorkerOperationResponse BadRequest(string message) =>
|
||||
BadRequest<WorkerOperationResponse>(message);
|
||||
public static WorkerOperationResponse InternalServerError(string message)
|
||||
=> InternalServerError<WorkerOperationResponse>(message);
|
||||
}
|
||||
@@ -5,7 +5,6 @@ namespace SmallSoftwareContracts.BindingModels;
|
||||
public class RequestBindingModel
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? WorkerId { get; set; }
|
||||
public string? Email { get; set; }
|
||||
public string? WorkerId { get; set; }
|
||||
public List<InstallationRequestBindingModel>? Softwares { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.BindingModels;
|
||||
public class WorkerBindingModel
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? FIO { get; set; }
|
||||
public string? PostId { get; set; }
|
||||
public DateTime BirthDate { get; set; }
|
||||
public DateTime EmploymentDate { get; set; }
|
||||
}
|
||||
@@ -12,10 +12,7 @@ public interface IRequestBusinessLogicContract
|
||||
|
||||
List<RequestDataModel> GetAllRequestsByPeriod(DateTime fromDate, DateTime toDate);
|
||||
List<RequestDataModel> GetAllRequestsByWorkerByPeriod(string workerId, DateTime fromDate, DateTime toDate);
|
||||
|
||||
List<RequestDataModel> GetAllRequestsBySoftwareByPeriod(string softwareId, DateTime fromDate, DateTime toDate);
|
||||
|
||||
|
||||
RequestDataModel GetRequestByData(string data);
|
||||
void InsertRequest(RequestDataModel requestDataModel);
|
||||
void CancelRequest(string id);
|
||||
|
||||
@@ -13,12 +13,13 @@ public class RequestDataModel : IValidation
|
||||
private readonly WorkerDataModel? _worker;
|
||||
public string Id { get; private set; }
|
||||
public string WorkerId { get; private set; }
|
||||
public DateTime RequestDate { get; private set; } = DateTime.UtcNow;
|
||||
public string Email { get; private set; }
|
||||
public double Sum { get; private set; }
|
||||
public bool IsCancel { get; private set; }
|
||||
public List<InstallationRequestDataModel>? Softwares { get; private set; }
|
||||
public string WorkerFIO => _worker?.FIO ?? string.Empty;
|
||||
public RequestDataModel(string id, string workerId, string email, bool isCancel, List<InstallationRequestDataModel> installationRequests)
|
||||
public RequestDataModel(string id, string workerId, string email, bool isCancel, List<InstallationRequestDataModel> installationRequests, DateTime requestDate)
|
||||
{
|
||||
Id = id;
|
||||
WorkerId = workerId;
|
||||
@@ -27,26 +28,29 @@ public class RequestDataModel : IValidation
|
||||
Softwares = installationRequests;
|
||||
Sum = Softwares?.Sum(x => x.Price * x.Count) ?? 0;
|
||||
}
|
||||
public RequestDataModel(string id, string workerId, string email, double sum, bool isCancel,
|
||||
List<InstallationRequestDataModel> installationRequests, WorkerDataModel worker) : this(id, workerId, email,isCancel, installationRequests )
|
||||
|
||||
public RequestDataModel(string id, string workerId, string email, double sum, bool isCancel,
|
||||
List<InstallationRequestDataModel> installationRequests, WorkerDataModel worker, DateTime requestDate)
|
||||
: this(id, workerId, email, isCancel, installationRequests, requestDate)
|
||||
{
|
||||
Sum = sum;
|
||||
_worker = worker;
|
||||
}
|
||||
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (Id.IsEmpty())
|
||||
throw new ValidationException("Field Id is empty");
|
||||
if (!Id.IsGuid())
|
||||
throw new ValidationException("The value in the field Id is not a unique identifier");
|
||||
if (WorkerId.IsEmpty())
|
||||
if (WorkerId.IsEmpty())
|
||||
throw new ValidationException("Field WorkerId is empty");
|
||||
if (!WorkerId.IsGuid())
|
||||
throw new ValidationException("The value in the field WorkerId is not a unique identifier");
|
||||
if (Sum <= 0)
|
||||
throw new ValidationException("Field Sum is less than or equal to 0");
|
||||
if ((Softwares?.Count ?? 0) == 0)
|
||||
if (Sum <= 0)
|
||||
throw new ValidationException("Field Sum is less than or equal to 0");
|
||||
if ((Softwares?.Count ?? 0) == 0)
|
||||
throw new ValidationException("The request must include products");
|
||||
if (!Regex.IsMatch(Email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$"))
|
||||
{
|
||||
|
||||
@@ -1,20 +1,23 @@
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.Extensions;
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.DataModels;
|
||||
|
||||
public class SalaryDataModel(string workerId, DateTime salaryDate, double
|
||||
workerSalary) : IValidation
|
||||
{
|
||||
private readonly WorkerDataModel? _worker;
|
||||
public string WorkerId { get; private set; } = workerId;
|
||||
public DateTime SalaryDate { get; private set; } = salaryDate;
|
||||
public double Salary { get; private set; } = workerSalary;
|
||||
public string WorkerFIO => _worker?.FIO ?? string.Empty;
|
||||
|
||||
public SalaryDataModel(string workerId, DateTime salaryDate, double workerSalary, WorkerDataModel worker) : this(workerId, salaryDate, workerSalary)
|
||||
{
|
||||
_worker = worker;
|
||||
}
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (WorkerId.IsEmpty())
|
||||
|
||||
@@ -7,12 +7,26 @@ namespace SmallSoftwareContracts.DataModels;
|
||||
public class WorkerDataModel(string id, string fio, string postId, DateTime
|
||||
birthDate, DateTime employmentDate, bool isDeleted) : IValidation
|
||||
{
|
||||
private readonly PostDataModel? _post;
|
||||
public string Id { get; private set; } = id;
|
||||
public string FIO { get; private set; } = fio;
|
||||
public string PostId { get; private set; } = postId;
|
||||
public DateTime BirthDate { get; private set; } = birthDate;
|
||||
public DateTime EmploymentDate { get; private set; } = employmentDate;
|
||||
public bool IsDeleted { get; private set; } = isDeleted;
|
||||
public string PostName => _post?.PostName ?? string.Empty;
|
||||
|
||||
public WorkerDataModel(string id, string fio, string postId,
|
||||
DateTime birthDate, DateTime employmentDate, bool isDeleted, PostDataModel post) :
|
||||
this(id, fio, postId, birthDate, employmentDate, isDeleted)
|
||||
{
|
||||
_post = post;
|
||||
}
|
||||
public WorkerDataModel(string id, string fio, string postId,
|
||||
DateTime birthDate, DateTime employmentDate) : this(id, fio, postId, birthDate, employmentDate, false)
|
||||
{ }
|
||||
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (Id.IsEmpty())
|
||||
|
||||
@@ -6,6 +6,7 @@ public class RequestViewModel
|
||||
public required string Id { get; set; }
|
||||
public required string WorkerId { get; set; }
|
||||
public required string WorkerFIO { get; set; }
|
||||
public DateTime RequestDate { get; set; }
|
||||
public double Sum { get; set; }
|
||||
public bool IsCancel { get; set; }
|
||||
public required List<InstallationRequestViewModel> Softwares { get; set; }
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.ViewModels;
|
||||
|
||||
public class SalaryViewModel
|
||||
{
|
||||
public required string WorkerId { get; set; }
|
||||
public required string WorkerFIO { get; set; }
|
||||
public DateTime SalaryDate { get; set; }
|
||||
public double Salary { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.ViewModels;
|
||||
|
||||
public class WorkerViewModel
|
||||
{
|
||||
public required string Id { get; set; }
|
||||
public required string FIO { get; set; }
|
||||
public required string PostId { get; set; }
|
||||
public required string PostName { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
public DateTime BirthDate { get; set; }
|
||||
public DateTime EmploymentDate { get; set; }
|
||||
}
|
||||
@@ -28,8 +28,8 @@ internal class RequestStorageContract : IRequestStorageContract
|
||||
.ForMember(x => x.IsCancel, x => x.MapFrom(src => false))
|
||||
.ForMember(x => x.InstallationRequests, x => x.MapFrom(src => src.Softwares))
|
||||
.ForMember(x => x.Worker, x => x.Ignore())
|
||||
|
||||
;
|
||||
.ForMember(dest => dest.RequestDate, opt => opt.MapFrom(src => src.RequestDate))
|
||||
.ForMember(dest => dest.RequestDate, opt => opt.MapFrom(src => src.RequestDate));
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
@@ -47,7 +47,6 @@ internal class RequestStorageContract : IRequestStorageContract
|
||||
{
|
||||
query = query.Where(x => x.InstallationRequests!.Any(y => y.SoftwareId == softwareId));
|
||||
}
|
||||
|
||||
return [.. query.Select(x => _mapper.Map<RequestDataModel>(x))];
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -110,5 +109,10 @@ internal class RequestStorageContract : IRequestStorageContract
|
||||
}
|
||||
}
|
||||
|
||||
private Request? GetRequestById(string id) => _dbContext.Requests.Include(x => x.Worker).Include(x => x.InstallationRequests).ThenInclude(x => x.Software).FirstOrDefault(x => x.Id == id);
|
||||
private Request? GetRequestById(string id) =>
|
||||
_dbContext.Requests
|
||||
.Include(x => x.Worker)
|
||||
.Include(x => x.InstallationRequests)!
|
||||
.ThenInclude(x => x.Software)
|
||||
.FirstOrDefault(x => x.Id == id);
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using AutoMapper;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.StoragesContracts;
|
||||
@@ -15,20 +16,18 @@ internal class SalaryStorageContract : ISalaryStorageContract
|
||||
_dbContext = dbContext;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<Worker, WorkerDataModel>();
|
||||
cfg.CreateMap<Salary, SalaryDataModel>();
|
||||
cfg.CreateMap<SalaryDataModel, Salary>()
|
||||
.ForMember(dest => dest.WorkerSalary, opt =>
|
||||
opt.MapFrom(src => src.Salary));
|
||||
.ForMember(dest => dest.WorkerSalary, opt => opt.MapFrom(src => src.Salary));
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
public List<SalaryDataModel> GetList(DateTime startDate, DateTime endDate,
|
||||
string? workerId = null)
|
||||
public List<SalaryDataModel> GetList(DateTime startDate, DateTime endDate, string? workerId = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var query = _dbContext.Salaries.Where(x => x.SalaryDate >=
|
||||
startDate && x.SalaryDate <= endDate);
|
||||
var query = _dbContext.Salaries.Include(x => x.Worker).Where(x => x.SalaryDate >= startDate && x.SalaryDate <= endDate);
|
||||
if (workerId is not null)
|
||||
{
|
||||
query = query.Where(x => x.WorkerId == workerId);
|
||||
|
||||
@@ -11,7 +11,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareDatabase.Implementations;
|
||||
|
||||
internal class WorkerStorageContract : IWorkerStorageContract
|
||||
internal class WorkerStorageContract : IWorkerStorageContract
|
||||
{
|
||||
private readonly SmallSoftwareDbContext _dbContext;
|
||||
private readonly Mapper _mapper;
|
||||
@@ -20,13 +20,18 @@ internal class WorkerStorageContract : IWorkerStorageContract
|
||||
_dbContext = dbContext;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.AddMaps(typeof(Worker).Assembly);
|
||||
cfg.CreateMap<Post, PostDataModel>()
|
||||
.ForMember(x => x.Id, x => x.MapFrom(src =>
|
||||
src.PostId));
|
||||
cfg.CreateMap<Worker, WorkerDataModel>();
|
||||
cfg.CreateMap<WorkerDataModel, Worker>()
|
||||
.ForMember(x => x.Post, x => x.Ignore());
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
public List<WorkerDataModel> GetList(bool onlyActive = true, string? postId
|
||||
= null, DateTime? fromBirthDate = null, DateTime? toBirthDate = null, DateTime?
|
||||
fromEmploymentDate = null, DateTime? toEmploymentDate = null)
|
||||
= null, DateTime? fromBirthDate = null, DateTime? toBirthDate = null, DateTime?
|
||||
fromEmploymentDate = null, DateTime? toEmploymentDate = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -50,7 +55,7 @@ internal class WorkerStorageContract : IWorkerStorageContract
|
||||
query = query.Where(x => x.EmploymentDate >=
|
||||
fromEmploymentDate && x.EmploymentDate <= toEmploymentDate);
|
||||
}
|
||||
return [.. query.Select(x => _mapper.Map<WorkerDataModel>(x))];
|
||||
return [.. JoinPost(query).Select(x => _mapper.Map<WorkerDataModel>(x))];
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -69,14 +74,13 @@ internal class WorkerStorageContract : IWorkerStorageContract
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw new StorageException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
public WorkerDataModel? GetElementByFIO(string fio)
|
||||
{
|
||||
try
|
||||
{
|
||||
return
|
||||
_mapper.Map<WorkerDataModel>(_dbContext.Workers.FirstOrDefault(x => x.FIO ==
|
||||
fio));
|
||||
{
|
||||
return
|
||||
_mapper.Map<WorkerDataModel>(AddPost(_dbContext.Workers.FirstOrDefault(x => x.FIO == fio && !x.IsDeleted)));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -129,12 +133,12 @@ internal class WorkerStorageContract : IWorkerStorageContract
|
||||
{
|
||||
var element = GetWorkerById(id) ?? throw new
|
||||
ElementNotFoundException(id);
|
||||
element.IsDeleted = true;
|
||||
element.IsDeleted = true;
|
||||
_dbContext.SaveChanges();
|
||||
}
|
||||
catch (ElementNotFoundException)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw;
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -144,5 +148,13 @@ internal class WorkerStorageContract : IWorkerStorageContract
|
||||
}
|
||||
}
|
||||
private Worker? GetWorkerById(string id) =>
|
||||
_dbContext.Workers.FirstOrDefault(x => x.Id == id && !x.IsDeleted);
|
||||
}
|
||||
AddPost(_dbContext.Workers.FirstOrDefault(x => x.Id == id && !x.IsDeleted));
|
||||
private IQueryable<Worker> JoinPost(IQueryable<Worker> query)
|
||||
=> query.GroupJoin(_dbContext.Posts.Where(x => x.IsActual), x =>
|
||||
x.PostId, y => y.PostId, (x, y) => new { Worker = x, Post = y })
|
||||
.SelectMany(xy => xy.Post.DefaultIfEmpty(), (x, y) =>
|
||||
x.Worker.AddPost(y));
|
||||
private Worker? AddPost(Worker? worker)
|
||||
=> worker?.AddPost(_dbContext.Posts.FirstOrDefault(x => x.PostId ==
|
||||
worker.PostId && x.IsActual));
|
||||
}
|
||||
@@ -1,9 +1,4 @@
|
||||
using SmallSoftwareContracts.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using SmallSoftwareContracts.Enums;
|
||||
|
||||
namespace SmallSoftwareDatabase.Models;
|
||||
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace SmallSoftwareDatabase.Models;
|
||||
|
||||
internal class Request
|
||||
{
|
||||
public string Id { get; set; } = Guid.NewGuid().ToString();
|
||||
public required string WorkerId { get; set; }
|
||||
public required string Email { get; set; }
|
||||
public required string WorkerId { get; set; }
|
||||
public DateTime RequestDate { get; set; }
|
||||
public required string Email { get; set; }
|
||||
public double Sum { get; set; }
|
||||
public bool IsCancel { get; set; }
|
||||
public Worker? Worker { get; set; }
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareDatabase.Models;
|
||||
namespace SmallSoftwareDatabase.Models;
|
||||
|
||||
internal class Salary
|
||||
{
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
using AutoMapper;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace SmallSoftwareDatabase.Models;
|
||||
[AutoMap(typeof(WorkerDataModel), ReverseMap = true)]
|
||||
internal class Worker
|
||||
@@ -17,10 +11,16 @@ internal class Worker
|
||||
public DateTime BirthDate { get; set; }
|
||||
public DateTime EmploymentDate { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
[NotMapped]
|
||||
public Post? Post { get; set; }
|
||||
[ForeignKey("WorkerId")]
|
||||
public List<Salary>? Salaries { get; set; }
|
||||
[ForeignKey("WorkerId")]
|
||||
public List<Request>? Requests { get; set; }
|
||||
public Worker AddPost(Post? post)
|
||||
{
|
||||
Post = post;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,9 +9,17 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareDatabase;
|
||||
|
||||
internal class SmallSoftwareDbContext(IConfigurationDatabase configurationDatabase) : DbContext
|
||||
internal class SmallSoftwareDbContext : DbContext
|
||||
{
|
||||
private readonly IConfigurationDatabase? _configurationDatabase = configurationDatabase;
|
||||
private readonly IConfigurationDatabase? _configurationDatabase;
|
||||
|
||||
public SmallSoftwareDbContext(IConfigurationDatabase configurationDatabase)
|
||||
{
|
||||
_configurationDatabase = configurationDatabase;
|
||||
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
|
||||
AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
|
||||
}
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
optionsBuilder.UseNpgsql(_configurationDatabase?.ConnectionString, o => o.SetPostgresVersion(12, 2));
|
||||
|
||||
@@ -34,8 +34,8 @@ internal class RequestBusinessLogicContractTests
|
||||
var date = DateTime.UtcNow;
|
||||
var listOriginal = new List<RequestDataModel>()
|
||||
{
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)]),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, []),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)], DateTime.UtcNow),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [], DateTime.UtcNow), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [], DateTime.UtcNow),
|
||||
};
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(),
|
||||
It.IsAny<DateTime?>(), It.IsAny<string>(), It.IsAny<string>())).Returns(listOriginal);
|
||||
@@ -112,8 +112,8 @@ internal class RequestBusinessLogicContractTests
|
||||
var workerId = Guid.NewGuid().ToString();
|
||||
var listOriginal = new List<RequestDataModel>()
|
||||
{
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)]),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), false, []),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)], DateTime.UtcNow),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), false, [], DateTime.UtcNow), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), false, [], DateTime.UtcNow),
|
||||
};
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(),
|
||||
It.IsAny<DateTime?>(), It.IsAny<string>(),
|
||||
@@ -229,9 +229,9 @@ internal class RequestBusinessLogicContractTests
|
||||
var softwareId = Guid.NewGuid().ToString();
|
||||
var listOriginal = new List<RequestDataModel>()
|
||||
{
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, []),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, []),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)], DateTime.UtcNow),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [], DateTime.UtcNow),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@mail.ru", false, [], DateTime.UtcNow),
|
||||
};
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime?>(),
|
||||
It.IsAny<DateTime?>(), It.IsAny<string>(),
|
||||
@@ -343,7 +343,7 @@ internal class RequestBusinessLogicContractTests
|
||||
{
|
||||
//Arrange
|
||||
var id = Guid.NewGuid().ToString();
|
||||
var record = new RequestDataModel(id, Guid.NewGuid().ToString(), "test@mail.ru", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]);
|
||||
var record = new RequestDataModel(id, Guid.NewGuid().ToString(), "test@mail.ru", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)], DateTime.UtcNow);
|
||||
_requestStorageContract.Setup(x =>
|
||||
x.GetElementById(id)).Returns(record);
|
||||
//Act
|
||||
@@ -405,7 +405,7 @@ internal class RequestBusinessLogicContractTests
|
||||
//Arrange
|
||||
var flag = false;
|
||||
var record = new RequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "valid.email@example.com", false,
|
||||
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]);
|
||||
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)], DateTime.UtcNow);
|
||||
_requestStorageContract.Setup(x => x.AddElement(It.IsAny<RequestDataModel>()))
|
||||
.Callback((RequestDataModel x) =>
|
||||
{
|
||||
@@ -435,7 +435,7 @@ internal class RequestBusinessLogicContractTests
|
||||
//Act&Assert
|
||||
Assert.That(() =>
|
||||
_requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false,
|
||||
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)])), Throws.TypeOf<ElementExistsException>());
|
||||
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)], DateTime.UtcNow)), Throws.TypeOf<ElementExistsException>());
|
||||
_requestStorageContract.Verify(x => x.AddElement(It.IsAny<RequestDataModel>()), Times.Once);
|
||||
}
|
||||
[Test]
|
||||
@@ -451,7 +451,7 @@ internal class RequestBusinessLogicContractTests
|
||||
public void InsertRequest_InvalidRecord_ThrowException_Test()
|
||||
{
|
||||
//Act&Assert
|
||||
Assert.That(() => _requestBusinessLogicContract.InsertRequest(new RequestDataModel("id", Guid.NewGuid().ToString(), "test@mail.ru", false, [])), Throws.TypeOf<ValidationException>());
|
||||
Assert.That(() => _requestBusinessLogicContract.InsertRequest(new RequestDataModel("id", Guid.NewGuid().ToString(), "test@mail.ru", false, [], DateTime.UtcNow)), Throws.TypeOf<ValidationException>());
|
||||
_requestStorageContract.Verify(x =>
|
||||
x.AddElement(It.IsAny<RequestDataModel>()), Times.Never);
|
||||
}
|
||||
@@ -464,7 +464,7 @@ internal class RequestBusinessLogicContractTests
|
||||
InvalidOperationException()));
|
||||
//Act&Assert
|
||||
Assert.That(() =>
|
||||
_requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)])), Throws.TypeOf<StorageException>());
|
||||
_requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)], DateTime.UtcNow)), Throws.TypeOf<StorageException>());
|
||||
_requestStorageContract.Verify(x =>
|
||||
x.AddElement(It.IsAny<RequestDataModel>()), Times.Once);
|
||||
}
|
||||
|
||||
@@ -250,15 +250,15 @@ internal class SalaryBusinessLogicContractTests
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(),
|
||||
It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Returns([new RequestDataModel(Guid.NewGuid().ToString(),
|
||||
worker1Id, Guid.NewGuid().ToString(), false, []),
|
||||
worker1Id, Guid.NewGuid().ToString(), false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker1Id, Guid.NewGuid().ToString(),
|
||||
false, []),
|
||||
false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker2Id, Guid.NewGuid().ToString(),
|
||||
false, []),
|
||||
false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker3Id, Guid.NewGuid().ToString(),
|
||||
false, []),
|
||||
false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker3Id, Guid.NewGuid().ToString(),
|
||||
false, [])]);
|
||||
false, [], DateTime.UtcNow)]);
|
||||
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
|
||||
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
|
||||
PostType.SoftInstaller, 2000));
|
||||
@@ -329,7 +329,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
|
||||
var workerId = Guid.NewGuid().ToString();
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(),
|
||||
It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), false, [])]);
|
||||
.Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), false, [], DateTime.UtcNow)]);
|
||||
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
|
||||
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
|
||||
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
|
||||
@@ -349,7 +349,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(),
|
||||
It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Returns([new RequestDataModel(Guid.NewGuid().ToString(),
|
||||
workerId, Guid.NewGuid().ToString(), false, [])]);
|
||||
workerId, Guid.NewGuid().ToString(), false, [], DateTime.UtcNow)]);
|
||||
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
|
||||
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
|
||||
PostType.SoftInstaller, 2000));
|
||||
@@ -390,7 +390,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(),
|
||||
It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Returns([new RequestDataModel(Guid.NewGuid().ToString(),
|
||||
workerId, Guid.NewGuid().ToString(), false, [])]);
|
||||
workerId, Guid.NewGuid().ToString(), false, [], DateTime.UtcNow)]);
|
||||
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
|
||||
.Throws(new StorageException(new
|
||||
InvalidOperationException()));
|
||||
@@ -412,7 +412,7 @@ Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
|
||||
var workerId = Guid.NewGuid().ToString();
|
||||
_requestStorageContract.Setup(x => x.GetList(It.IsAny<DateTime>(),
|
||||
It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>()))
|
||||
.Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), false, [])]);
|
||||
.Returns([new RequestDataModel(Guid.NewGuid().ToString(), workerId, Guid.NewGuid().ToString(), false, [], DateTime.UtcNow)]);
|
||||
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
|
||||
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
|
||||
PostType.SoftInstaller, 2000));
|
||||
|
||||
@@ -9,44 +9,44 @@ internal class RequestDataModelTests
|
||||
[Test]
|
||||
public void IdIsNullOrEmptyTest()
|
||||
{
|
||||
var request = CreateDataModel(null, Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel());
|
||||
var request = CreateDataModel(null, Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel() , DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
|
||||
request = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel());
|
||||
request = CreateDataModel(string.Empty, Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IdIsNotGuidTest()
|
||||
{
|
||||
var request = CreateDataModel("id", Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel());
|
||||
var request = CreateDataModel("id", Guid.NewGuid().ToString(), "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WorkerIdIsNullOrEmptyTest()
|
||||
{
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), null, "test@example.com", false, CreateSubDataModel());
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), null, "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "test@example.com", false, CreateSubDataModel());
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), string.Empty, "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WorkerIdIsNotGuidTest()
|
||||
{
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), "workerId", "test@example.com", false, CreateSubDataModel());
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), "workerId", "test@example.com", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void EmailIsInvalidTest()
|
||||
{
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "invalid_email", false, CreateSubDataModel());
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "invalid_email", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "@", false, CreateSubDataModel());
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "@", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
@@ -54,10 +54,10 @@ internal class RequestDataModelTests
|
||||
[Test]
|
||||
public void SoftwaresIsNullOrEmptyTest()
|
||||
{
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, null);
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, null, DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, new List<InstallationRequestDataModel>());
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", false, new List<InstallationRequestDataModel>(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ internal class RequestDataModelTests
|
||||
var isCancel = true;
|
||||
var softwares = CreateSubDataModel();
|
||||
|
||||
var request = CreateDataModel(requestId, workerId, email, isCancel, softwares);
|
||||
var request = CreateDataModel(requestId, workerId, email, isCancel, softwares, DateTime.UtcNow);
|
||||
|
||||
Assert.That(() => request.Validate(), Throws.Nothing);
|
||||
Assert.Multiple(() =>
|
||||
@@ -85,8 +85,8 @@ internal class RequestDataModelTests
|
||||
});
|
||||
}
|
||||
|
||||
private static RequestDataModel CreateDataModel(string? id, string? workerId, string email, bool isCancel, List<InstallationRequestDataModel>? softwares) =>
|
||||
new(id, workerId, email, isCancel, softwares);
|
||||
private static RequestDataModel CreateDataModel(string? id, string? workerId, string email, bool isCancel, List<InstallationRequestDataModel>? softwares, DateTime requestDate) =>
|
||||
new(id, workerId, email, isCancel, softwares, requestDate );
|
||||
|
||||
private static List<InstallationRequestDataModel> CreateSubDataModel() =>
|
||||
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), "SoftwareName", 1, 10)];
|
||||
|
||||
@@ -78,51 +78,47 @@ internal static class SmallSoftwareDbContextExtensions
|
||||
dbContext.SaveChanges();
|
||||
return softwareHistory;
|
||||
}
|
||||
public static Salary InsertSalaryToDatabaseAndReturn(this
|
||||
SmallSoftwareDbContext dbContext, string workerId, double workerSalary = 1,
|
||||
DateTime? salaryDate = null)
|
||||
public static Salary InsertSalaryToDatabaseAndReturn(this SmallSoftwareDbContext dbContext, string workerId, double workerSalary = 1, DateTime? salaryDate = null)
|
||||
{
|
||||
var salary = new Salary()
|
||||
{
|
||||
WorkerId = workerId,
|
||||
WorkerSalary =
|
||||
workerSalary,
|
||||
SalaryDate = salaryDate ?? DateTime.UtcNow
|
||||
};
|
||||
var salary = new Salary() { WorkerId = workerId, WorkerSalary = workerSalary, SalaryDate = salaryDate ?? DateTime.UtcNow };
|
||||
dbContext.Salaries.Add(salary);
|
||||
dbContext.SaveChanges();
|
||||
return salary;
|
||||
}
|
||||
|
||||
public static Request InsertRequestToDatabaseAndReturn(this SmallSoftwareDbContext
|
||||
dbContext, string workerId, string email = "test@mail.ru", double sum = 1, bool isCancel = false, List<(string, int, double)>? softwares = null)
|
||||
public static Request InsertRequestToDatabaseAndReturn(this SmallSoftwareDbContext dbContext,
|
||||
string workerId, string email = "test@mail.ru", double sum = 1, bool isCancel = false,
|
||||
List<(string, int, double)>? softwares = null, DateTime? requestDate = null)
|
||||
{
|
||||
var Request = new Request()
|
||||
var request = new Request()
|
||||
{
|
||||
WorkerId = workerId,
|
||||
Email = email,
|
||||
Sum = sum,
|
||||
IsCancel = isCancel,
|
||||
RequestDate = (requestDate ?? DateTime.UtcNow).ToUniversalTime(),
|
||||
InstallationRequests = []
|
||||
};
|
||||
|
||||
if (softwares is not null)
|
||||
{
|
||||
foreach (var elem in softwares)
|
||||
{
|
||||
var software = dbContext.Softwares.Find(elem.Item1);
|
||||
Request.InstallationRequests.Add(new InstallationRequest
|
||||
var software = dbContext.Softwares.Find(elem.Item1);
|
||||
request.InstallationRequests.Add(new InstallationRequest
|
||||
{
|
||||
SoftwareId = elem.Item1,
|
||||
Software = software!,
|
||||
RequestId = Request.Id,
|
||||
RequestId = request.Id,
|
||||
Count = elem.Item2,
|
||||
Price = elem.Item3
|
||||
});
|
||||
}
|
||||
}
|
||||
dbContext.Requests.Add(Request);
|
||||
|
||||
dbContext.Requests.Add(request);
|
||||
dbContext.SaveChanges();
|
||||
return Request;
|
||||
return request;
|
||||
}
|
||||
|
||||
public static Worker InsertWorkerToDatabaseAndReturn(this SmallSoftwareDbContext dbContext,
|
||||
|
||||
@@ -34,8 +34,8 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 5, 1.2)]);
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 5, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 10, softwares: [(_software.Id, 10, 1.2)]);
|
||||
var list = _requesttStorageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
@@ -52,10 +52,10 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetList_ByPeriod_Test()
|
||||
{
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
var list = _requesttStorageContract.GetList(startDate:
|
||||
DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1));
|
||||
Assert.That(list, Is.Not.Null);
|
||||
@@ -66,11 +66,11 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
var worker = InsertWorkerToDatabaseAndReturn("Other worker");
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
||||
[(_software.Id, 1, 1.2)]);
|
||||
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
||||
[(_software.Id, 1, 1.2)]);
|
||||
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares:
|
||||
[(_software.Id, 1, 1.2)]);
|
||||
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
var list = _requesttStorageContract.GetList(workerId: _worker.Id);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(2));
|
||||
@@ -82,9 +82,9 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
var software = InsertSoftwareToDatabaseAndReturn("Other name");
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
||||
[(_software.Id, 5, 1.2)]);
|
||||
[(_software.Id, 5, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
||||
[(_software.Id, 1, 1.2), (software.Id, 4, 1.2)]);
|
||||
[(_software.Id, 1, 1.2), (software.Id, 4, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares:
|
||||
[(software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares:
|
||||
@@ -100,13 +100,13 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
var worker = InsertWorkerToDatabaseAndReturn("Other worker");
|
||||
var software = InsertSoftwareToDatabaseAndReturn("Other name");
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, softwares: [(software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, softwares: [(software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
var list = _requesttStorageContract.GetList(startDate:
|
||||
DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1), workerId:
|
||||
_worker.Id, softwareId: _software.Id);
|
||||
@@ -117,14 +117,14 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
softwares: [(_software.Id, 1, 1.2)]);
|
||||
softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
AssertElement(_requesttStorageContract.GetElementById(request.Id), request);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenNoRecord_Test()
|
||||
{
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
||||
[(_software.Id, 1, 1.2)]);
|
||||
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
Assert.That(() =>
|
||||
_requesttStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
||||
}
|
||||
@@ -138,17 +138,17 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_AddElement_Test()
|
||||
{
|
||||
var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id,"", 0, false, [_software.Id]);
|
||||
var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id,"", 0, false, [_software.Id], DateTime.UtcNow);
|
||||
_requesttStorageContract.AddElement(request);
|
||||
AssertElement(GetRequestFromDatabaseById(request.Id), request);
|
||||
}
|
||||
[Test]
|
||||
public void Try_AddElement_WhenIsDeletedIsTrue_Test()
|
||||
{
|
||||
var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id, "test@mail.ru", 1, true, [_software.Id]);
|
||||
var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id, "test@mail.ru", 1, true, [_software.Id], DateTime.UtcNow);
|
||||
Assert.That(() => _requesttStorageContract.AddElement(request),Throws.Nothing);
|
||||
AssertElement(GetRequestFromDatabaseById(request.Id), CreateModel(request.Id,
|
||||
_worker.Id, "test@mail.ru", 1, false, [_software.Id]));
|
||||
_worker.Id, "test@mail.ru", 1, false, [_software.Id], DateTime.UtcNow));
|
||||
}
|
||||
[Test]
|
||||
public void Try_DelElement_Test()
|
||||
@@ -250,10 +250,10 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
Assert.That(actual.Softwares, Is.Null);
|
||||
}
|
||||
}
|
||||
private static RequestDataModel CreateModel(string id, string workerId, string email, double sum, bool isCancel, List<string> softwareIds)
|
||||
private static RequestDataModel CreateModel(string id, string workerId, string email, double sum, bool isCancel, List<string> softwareIds, DateTime requestDate)
|
||||
{
|
||||
var installationRequests = softwareIds.Select(x => new InstallationRequestDataModel(x, id, 1, 1.1)).ToList();
|
||||
return new(id, workerId, email, isCancel, installationRequests);
|
||||
return new(id, workerId, email, isCancel, installationRequests, requestDate);
|
||||
}
|
||||
private Request? GetRequestFromDatabaseById(string id) =>
|
||||
SmallSoftwareDbContext.Requests.Include(x => x.InstallationRequests).FirstOrDefault(x => x.Id == id);
|
||||
@@ -269,8 +269,7 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
if (expected.Softwares is not null)
|
||||
{
|
||||
Assert.That(actual.InstallationRequests, Is.Not.Null);
|
||||
Assert.That(actual.InstallationRequests,
|
||||
Has.Count.EqualTo(expected.Softwares.Count));
|
||||
Assert.That(actual.InstallationRequests, Has.Count.EqualTo(expected.Softwares.Count));
|
||||
for (int i = 0; i < actual.InstallationRequests.Count; ++i)
|
||||
{
|
||||
Assert.Multiple(() =>
|
||||
|
||||
@@ -32,7 +32,7 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var salary = SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, workerSalary: 100);
|
||||
var salary = SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, workerSalary: 1);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
||||
|
||||
@@ -27,18 +27,17 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
|
||||
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
||||
}
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var worker =
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1");
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2");
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3");
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1");
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2");
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3");
|
||||
var list = _workerStorageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(3));
|
||||
AssertElement(list.First(), worker);
|
||||
AssertElement(list.First(x => x.FIO == worker.FIO), worker);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetList_WhenNoRecords_Test()
|
||||
|
||||
@@ -40,6 +40,8 @@ internal class RequestControllerTests : BaseWebApiControllerTest
|
||||
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<RequestViewModel>>(response);
|
||||
@@ -125,12 +127,14 @@ internal class RequestControllerTests : BaseWebApiControllerTest
|
||||
{
|
||||
//Arrange
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, softwareName: "Other name");
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(_softwareId, 1, 1.1), (software.Id, 4, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(software.Id, 10, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(software.Id, 1, 1.1), (_softwareId, 1, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(_softwareId, 1, 1.1), (software.Id, 4, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(software.Id, 10, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(software.Id, 1, 1.1), (_softwareId, 1, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getsoftwarerecords?id={_softwareId}&fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<RequestViewModel>>(response);
|
||||
@@ -150,6 +154,8 @@ internal class RequestControllerTests : BaseWebApiControllerTest
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getsoftwarerecords?id={software.Id}&fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<RequestViewModel>>(response);
|
||||
|
||||
@@ -0,0 +1,253 @@
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System;
|
||||
using System.Net;
|
||||
|
||||
namespace SmallSoftwareTests.WebApiControllersApi;
|
||||
[TestFixture]
|
||||
internal class SalaryControllerTests : BaseWebApiControllerTest
|
||||
{
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.RemovePostsFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveRequestsFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveSalariesFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "Иванов И.И.");
|
||||
var salary = SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, workerSalary: 100);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_OnlyInDatePeriod_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(-5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getworkerrecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_ByWorker_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker1 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
var worker2 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker1.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker1.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker2.Id);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getworkerrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={worker1.Id}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
Assert.That(data.All(x => x.WorkerId == worker1.Id));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_ByWorker_OnlyInDatePeriod_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker1 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
var worker2 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker1.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker1.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker2.Id, salaryDate: DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker1.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker2.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker1.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getworkerrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={worker1.Id}");
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
Assert.That(data.All(x => x.WorkerId == worker1.Id));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_ByWorker_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getworkerrecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&id={worker.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_ByWorker_WhenIdIsNotGuid_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/salaries/getworkerrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id=id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Calculate_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: post.PostId);
|
||||
var manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer.Id, softwareName: "test", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, email: "ntrrvj@mail.ru", sum: 1, false, softwares: [(software.Id, 10, 1.0)]);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
var salaries = SmallSoftwareDbContext.GetSalariesFromDatabaseByWorkerId(worker.Id);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(salaries, Has.Length.EqualTo(1));
|
||||
Assert.That(salaries.First().WorkerSalary, Is.EqualTo(10.1d));
|
||||
Assert.That(salaries.First().SalaryDate.Month, Is.EqualTo(DateTime.UtcNow.Month));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Calculate_WithoutWorkers_ShouldSuccess_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
var salaries = SmallSoftwareDbContext.Salaries.ToArray();
|
||||
Assert.That(salaries, Has.Length.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Calculate_WithoutRequestsByWorker_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(salary: 111);
|
||||
var worker1 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: post.PostId);
|
||||
var worker2 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: post.PostId);
|
||||
var manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer.Id,
|
||||
softwareName: "test", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker1.Id, email: "neeeeevj@mail.ru",sum: 2, softwares: [(software.Id, 10, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker2.Id, email: "oiuy@mail.ru", sum: 2, softwares: [(software.Id, 10, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
var salary1 = SmallSoftwareDbContext.GetSalariesFromDatabaseByWorkerId(worker1.Id).First().WorkerSalary;
|
||||
var salary2 = SmallSoftwareDbContext.GetSalariesFromDatabaseByWorkerId(worker2.Id).First().WorkerSalary;
|
||||
Assert.That(salary1, Is.EqualTo(salary2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Calculate_PostNotFound_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: Guid.NewGuid().ToString());
|
||||
var manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer.Id,
|
||||
softwareName: "test", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, email: "nvbvbvj@mail.ru", sum: 2, softwares: [(software.Id, 10, 1.1)], requestDate: DateTime.UtcNow);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, email: "qqq@mail.ru", sum: 2, softwares: [(software.Id, 10, 1.1)], requestDate: DateTime.UtcNow);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
|
||||
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
private static void AssertElement(SalaryViewModel? actual, Salary expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.WorkerFIO, Is.EqualTo(expected.Worker!.FIO));
|
||||
Assert.That(actual.Salary, Is.EqualTo(expected.WorkerSalary));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,682 @@
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareTests.WebApiControllersApi;
|
||||
|
||||
|
||||
[TestFixture]
|
||||
internal class WorkerControllerTests : BaseWebApiControllerTest
|
||||
{
|
||||
private Post _post;
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
}
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.RemovePostsFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio:
|
||||
"fio 1", postId: _post.PostId)
|
||||
.AddPost(_post);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
|
||||
postId: _post.PostId);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
|
||||
postId: _post.PostId);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync("/api/workers/getrecords");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
});
|
||||
AssertElement(data.First(x => x.Id == worker.Id), worker);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync("/api/workers/getrecords");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_OnlyActual_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
|
||||
postId: _post.PostId, isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
|
||||
postId: _post.PostId, isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
|
||||
postId: _post.PostId, isDeleted: false);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync("/api/workers/getrecords?includeDeleted=false");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
Assert.That(data.All(x => !x.IsDeleted));
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_IncludeNoActual_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
|
||||
postId: _post.PostId, isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
|
||||
postId: _post.PostId, isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
|
||||
postId: _post.PostId, isDeleted: false);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync("/api/workers/getrecords?includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
Assert.That(data.Any(x => x.IsDeleted));
|
||||
Assert.That(data.Any(x => !x.IsDeleted));
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_ByPostId_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
|
||||
postId: _post.PostId);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
|
||||
postId: _post.PostId);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
|
||||
postId: _post.PostId, isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4");
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getpostrecords?id={_post.PostId}&includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
Assert.That(data.All(x => x.PostId == _post.PostId));
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_ByPostId_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
|
||||
postId: _post.PostId);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4");
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getpostrecords?id={Guid.NewGuid()}&includeDeleted = true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetList_ByPostId_WhenIdIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getpostrecords?id=id&includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_ByBirthDate_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
|
||||
birthDate: DateTime.UtcNow.AddYears(-25));
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
|
||||
birthDate: DateTime.UtcNow.AddYears(-21));
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
|
||||
birthDate: DateTime.UtcNow.AddYears(-20), isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4",
|
||||
birthDate: DateTime.UtcNow.AddYears(-19));
|
||||
//Act
|
||||
var fromDate = DateTime.UtcNow.AddYears(-21).AddMinutes(-1).ToString("o");
|
||||
var toDate = DateTime.UtcNow.AddYears(-20).AddMinutes(1).ToString("o");
|
||||
var response = await HttpClient
|
||||
.GetAsync($"/api/workers/getbirthdaterecords?fromDate={fromDate}&toDate={toDate}&includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetList_ByBirthDate_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getbirthdaterecords?fromDate={DateTime.UtcNow.
|
||||
AddMinutes(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddMinutes(-
|
||||
1):MM/dd/yyyy HH:mm:ss}&includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_ByEmploymentDate_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
|
||||
employmentDate: DateTime.UtcNow.AddDays(-2));
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
|
||||
employmentDate: DateTime.UtcNow.AddDays(-1));
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
|
||||
employmentDate: DateTime.UtcNow.AddDays(1), isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4",
|
||||
employmentDate: DateTime.UtcNow.AddDays(2));
|
||||
//Act
|
||||
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getemploymentrecords?fromDate={DateTime.UtcNow
|
||||
.AddDays(-1).AddMinutes(-1):o}&toDate={DateTime.UtcNow
|
||||
.AddDays(1).AddMinutes(1):o}&includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetList_ByEmploymentDate_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getemploymentrecords?fromDate={DateTime.UtcNow
|
||||
.AddMinutes(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddMinutes(-
|
||||
1):MM/dd/yyyy HH:mm:ss}&includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker =
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId:
|
||||
_post.PostId).AddPost(_post);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getrecord/{worker.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await
|
||||
GetModelFromResponseAsync<WorkerViewModel>(response), worker);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getrecord/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetElement_ById_WhenRecordWasDeleted_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker =
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: _post.PostId,
|
||||
isDeleted: true);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getrecord/{worker.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ByFIO_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker =
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId:
|
||||
_post.PostId).AddPost(_post);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getrecord/{worker.FIO}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await
|
||||
GetModelFromResponseAsync<WorkerViewModel>(response), worker);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ByFIO_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getrecord/New%20Fio");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetElement_ByFIO_WhenRecordWasDeleted_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker =
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: _post.PostId,
|
||||
isDeleted: true);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/workers/getrecord/{worker.FIO}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
var workerModel = CreateModel(_post.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(workerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NoContent));
|
||||
AssertElement(SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!
|
||||
), workerModel);
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenHaveRecordWithSameId_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerModel = CreateModel(_post.Id);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(workerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerModelWithIdIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id = "Id",
|
||||
FIO = "fio",
|
||||
BirthDate = DateTime.UtcNow.AddYears(-22),
|
||||
EmploymentDate =
|
||||
DateTime.UtcNow.AddDays(-5),
|
||||
PostId = _post.Id
|
||||
};
|
||||
var workerModelWithFioIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
FIO = string.Empty,
|
||||
BirthDate =
|
||||
DateTime.UtcNow.AddYears(-22),
|
||||
EmploymentDate = DateTime.UtcNow.AddDays(-5),
|
||||
PostId = _post.Id
|
||||
};
|
||||
var workerModelWithPostIdIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
FIO = "fio",
|
||||
BirthDate = DateTime.UtcNow.AddYears(-
|
||||
22),
|
||||
EmploymentDate = DateTime.UtcNow.AddDays(-5),
|
||||
PostId = "Id"
|
||||
};
|
||||
var workerModelWithBirthDateIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
FIO = "fio",
|
||||
BirthDate = DateTime.UtcNow.AddYears(-
|
||||
15),
|
||||
EmploymentDate = DateTime.UtcNow.AddDays(-5),
|
||||
PostId = _post.Id
|
||||
};
|
||||
//Act
|
||||
var responseWithIdIncorrect = await
|
||||
HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(workerModelWithIdIncorrect));
|
||||
var responseWithFioIncorrect = await
|
||||
HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(workerModelWithFioIncorrect));
|
||||
var responseWithPostIdIncorrect = await
|
||||
HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(workerModelWithPostIdIncorrect));
|
||||
var responseWithBirthDateIncorrect = await
|
||||
HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(workerModelWithBirthDateIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithFioIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Fio is incorrect");
|
||||
Assert.That(responseWithPostIdIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "PostId is incorrect");
|
||||
Assert.That(responseWithBirthDateIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "BirthDate is incorrect");
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(string.Empty));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/workers/register",
|
||||
MakeContent(new { Data = "test", Position = 10 }));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerModel = CreateModel(_post.Id);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(workerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NoContent));
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
AssertElement(SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!), workerModel);
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerModel = CreateModel(_post.Id, fio: "new fio");
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(workerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenRecordWasDeleted_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerModel = CreateModel(_post.Id, fio: "new fio");
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id,
|
||||
isDeleted: true);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(workerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerModelWithIdIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id = "Id",
|
||||
FIO = "fio",
|
||||
BirthDate = DateTime.UtcNow.AddYears(-22),
|
||||
EmploymentDate =
|
||||
DateTime.UtcNow.AddDays(-5),
|
||||
PostId = _post.Id
|
||||
};
|
||||
var workerModelWithFioIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
FIO = string.Empty,
|
||||
BirthDate =
|
||||
DateTime.UtcNow.AddYears(-22),
|
||||
EmploymentDate = DateTime.UtcNow.AddDays(-5),
|
||||
PostId = _post.Id
|
||||
};
|
||||
var workerModelWithPostIdIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
FIO = "fio",
|
||||
BirthDate = DateTime.UtcNow.AddYears(-
|
||||
22),
|
||||
EmploymentDate = DateTime.UtcNow.AddDays(-5),
|
||||
PostId = "Id"
|
||||
};
|
||||
var workerModelWithBirthDateIncorrect = new WorkerBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
FIO = "fio",
|
||||
BirthDate = DateTime.UtcNow.AddYears(-
|
||||
15),
|
||||
EmploymentDate = DateTime.UtcNow.AddDays(-5),
|
||||
PostId = _post.Id
|
||||
};
|
||||
//Act
|
||||
var responseWithIdIncorrect = await
|
||||
HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(workerModelWithIdIncorrect));
|
||||
var responseWithFioIncorrect = await
|
||||
HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(workerModelWithFioIncorrect));
|
||||
var responseWithPostIdIncorrect = await
|
||||
HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(workerModelWithPostIdIncorrect));
|
||||
var responseWithBirthDateIncorrect = await
|
||||
HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(workerModelWithBirthDateIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithFioIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Fio is incorrect");
|
||||
Assert.That(responseWithPostIdIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "PostId is incorrect");
|
||||
Assert.That(responseWithBirthDateIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "BirthDate is incorrect");
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(string.Empty));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
|
||||
MakeContent(new { Data = "test", Position = 10 }));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Delete_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerId = Guid.NewGuid().ToString();
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerId);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/workers/delete/{workerId}");
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NoContent));
|
||||
Assert.That(SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerId)!.IsDeleted);
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/workers/delete/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Delete_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/workers/delete/id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Delete_WhenRecordWasDeleted_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerId =
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(isDeleted: true).Id;
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/workers/delete/{workerId}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
private static void AssertElement(WorkerViewModel? actual, Worker expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.PostId, Is.EqualTo(expected.PostId));
|
||||
Assert.That(actual.PostName,
|
||||
Is.EqualTo(expected.Post!.PostName));
|
||||
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
|
||||
Assert.That(actual.BirthDate.ToString(),
|
||||
Is.EqualTo(expected.BirthDate.ToString()));
|
||||
Assert.That(actual.EmploymentDate.ToString(),
|
||||
Is.EqualTo(expected.EmploymentDate.ToString()));
|
||||
Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted));
|
||||
});
|
||||
}
|
||||
private static WorkerBindingModel CreateModel(string postId, string? id =
|
||||
null, string fio = "fio", DateTime? birthDate = null, DateTime? employmentDate =
|
||||
null)
|
||||
{
|
||||
return new()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
FIO = fio,
|
||||
BirthDate = birthDate ?? DateTime.UtcNow.AddYears(-22),
|
||||
EmploymentDate = employmentDate ?? DateTime.UtcNow.AddDays(-
|
||||
5),
|
||||
PostId = postId
|
||||
};
|
||||
}
|
||||
private static void AssertElement(Worker? actual, WorkerBindingModel
|
||||
expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.PostId, Is.EqualTo(expected.PostId));
|
||||
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
|
||||
Assert.That(actual.BirthDate.ToString(), Is.EqualTo(expected.BirthDate.ToString()));
|
||||
Assert.That(actual.EmploymentDate.ToString(), Is.EqualTo(expected.EmploymentDate.ToString()));
|
||||
Assert.That(!actual.IsDeleted);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
using AutoMapper;
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Adapters;
|
||||
|
||||
public class SalaryAdapter : ISalaryAdapter
|
||||
{
|
||||
private readonly ISalaryBusinessLogicContract _salaryBusinessLogicContract;
|
||||
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly Mapper _mapper;
|
||||
|
||||
public SalaryAdapter(ISalaryBusinessLogicContract salaryBusinessLogicContract, ILogger<SalaryAdapter> logger)
|
||||
{
|
||||
_salaryBusinessLogicContract = salaryBusinessLogicContract;
|
||||
_logger = logger;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<SalaryDataModel, SalaryViewModel>();
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
|
||||
public SalaryOperationResponse GetListByPeriod(DateTime fromDate, DateTime toDate)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SalaryOperationResponse.OK([.. _salaryBusinessLogicContract.GetAllSalariesByPeriod(fromDate, toDate).Select(x => _mapper.Map<SalaryViewModel>(x))]);
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return SalaryOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (IncorrectDatesException ex)
|
||||
{
|
||||
_logger.LogError(ex, "IncorrectDatesException");
|
||||
return SalaryOperationResponse.BadRequest($"Incorrect dates: {ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return SalaryOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SalaryOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SalaryOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SalaryOperationResponse GetListByPeriodByWorker(DateTime fromDate, DateTime toDate, string workerId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SalaryOperationResponse.OK([.. _salaryBusinessLogicContract.GetAllSalariesByPeriodByWorker(fromDate, toDate, workerId).Select(x => _mapper.Map<SalaryViewModel>(x))]);
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return SalaryOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (IncorrectDatesException ex)
|
||||
{
|
||||
_logger.LogError(ex, "IncorrectDatesException");
|
||||
return SalaryOperationResponse.BadRequest($"Incorrect dates: {ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return SalaryOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SalaryOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SalaryOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SalaryOperationResponse CalculateSalary(DateTime date)
|
||||
{
|
||||
try
|
||||
{
|
||||
_salaryBusinessLogicContract.CalculateSalaryByMonth(date);
|
||||
return SalaryOperationResponse.NoContent();
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return SalaryOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SalaryOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SalaryOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,299 @@
|
||||
using AutoMapper;
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
namespace SmallSoftwareWebApi.Adapters;
|
||||
|
||||
|
||||
public class WorkerAdapter : IWorkerAdapter
|
||||
{
|
||||
private readonly IWorkerBusinessLogicContract _workerBusinessLogicContract;
|
||||
private readonly ILogger _logger;
|
||||
private readonly Mapper _mapper;
|
||||
public WorkerAdapter(IWorkerBusinessLogicContract
|
||||
workerBusinessLogicContract, ILogger<WorkerAdapter> logger)
|
||||
{
|
||||
_workerBusinessLogicContract = workerBusinessLogicContract;
|
||||
_logger = logger;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<WorkerBindingModel, WorkerDataModel>();
|
||||
cfg.CreateMap<WorkerDataModel, WorkerViewModel>();
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
public WorkerOperationResponse GetList(bool includeDeleted)
|
||||
{
|
||||
try
|
||||
{
|
||||
return WorkerOperationResponse.OK([.. _workerBusinessLogicContract.GetAllWorkers(!includeDeleted)
|
||||
.Select(x => _mapper.Map<WorkerViewModel>(x))]);
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return WorkerOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return WorkerOperationResponse
|
||||
.InternalServerError($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public WorkerOperationResponse GetPostList(string id, bool includeDeleted)
|
||||
{
|
||||
try
|
||||
{
|
||||
return WorkerOperationResponse.OK([..
|
||||
_workerBusinessLogicContract.GetAllWorkersByPost(id, !includeDeleted).Select(x => _mapper.Map<WorkerViewModel>(x))]);
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return WorkerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return WorkerOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return WorkerOperationResponse
|
||||
.InternalServerError($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public WorkerOperationResponse GetListByBirthDate(DateTime fromDate,
|
||||
DateTime toDate, bool includeDeleted)
|
||||
{
|
||||
try
|
||||
{
|
||||
return WorkerOperationResponse.OK([..
|
||||
_workerBusinessLogicContract.GetAllWorkersByBirthDate(fromDate, toDate,
|
||||
!includeDeleted).Select(x => _mapper.Map<WorkerViewModel>(x))]);
|
||||
}
|
||||
catch (IncorrectDatesException ex)
|
||||
{
|
||||
_logger.LogError(ex, "IncorrectDatesException");
|
||||
return WorkerOperationResponse.BadRequest($"Incorrect dates: { ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return WorkerOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return WorkerOperationResponse
|
||||
.InternalServerError($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public WorkerOperationResponse GetListByEmploymentDate(DateTime fromDate,
|
||||
DateTime toDate, bool includeDeleted)
|
||||
{
|
||||
try
|
||||
{
|
||||
return WorkerOperationResponse.OK([..
|
||||
_workerBusinessLogicContract.GetAllWorkersByEmploymentDate(fromDate, toDate,
|
||||
!includeDeleted).Select(x => _mapper.Map<WorkerViewModel>(x))]);
|
||||
}
|
||||
catch (IncorrectDatesException ex)
|
||||
{
|
||||
_logger.LogError(ex, "IncorrectDatesException");
|
||||
return WorkerOperationResponse.BadRequest($"Incorrect dates: { ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return WorkerOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return WorkerOperationResponse
|
||||
.InternalServerError($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public WorkerOperationResponse GetElement(string data)
|
||||
{
|
||||
try
|
||||
{
|
||||
return
|
||||
WorkerOperationResponse.OK(_mapper.Map<WorkerViewModel>(_workerBusinessLogicContract.GetWorkerByData(data)));
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return WorkerOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return WorkerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return WorkerOperationResponse.NotFound($"Not found element by data { data}");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return WorkerOperationResponse
|
||||
.InternalServerError($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public WorkerOperationResponse RegisterWorker(WorkerBindingModel
|
||||
workerModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_workerBusinessLogicContract.InsertWorker(_mapper.Map<WorkerDataModel>(workerModel));
|
||||
return WorkerOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return WorkerOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return WorkerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message}");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return WorkerOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
|
||||
return WorkerOperationResponse
|
||||
.BadRequest($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public WorkerOperationResponse ChangeWorkerInfo(WorkerBindingModel
|
||||
workerModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_workerBusinessLogicContract.UpdateWorker(_mapper.Map<WorkerDataModel>(workerModel));
|
||||
return WorkerOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return WorkerOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return WorkerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return WorkerOperationResponse.BadRequest($"Not found element by Id { workerModel.Id}");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return WorkerOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return WorkerOperationResponse
|
||||
.BadRequest($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public WorkerOperationResponse RemoveWorker(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
_workerBusinessLogicContract.DeleteWorker(id);
|
||||
return WorkerOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return WorkerOperationResponse.BadRequest("Id is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return WorkerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return WorkerOperationResponse.BadRequest($"Not found element by id: { id}");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return WorkerOperationResponse
|
||||
.BadRequest($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
WorkerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
|
||||
namespace SmallSoftwareWebApi.Controllers;
|
||||
|
||||
|
||||
[Authorize]
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
[Produces("application/json")]
|
||||
public class SalariesController(ISalaryAdapter adapter) : ControllerBase
|
||||
{
|
||||
private readonly ISalaryAdapter _adapter = adapter;
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult GetRecords(DateTime fromDate, DateTime toDate)
|
||||
{
|
||||
return _adapter.GetListByPeriod(fromDate, toDate).GetResponse(Request, Response);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult GetWorkerRecords(string id, DateTime fromDate, DateTime toDate)
|
||||
{
|
||||
return _adapter.GetListByPeriodByWorker(fromDate, toDate, id).GetResponse(Request, Response);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult Calculate(DateTime date)
|
||||
{
|
||||
try
|
||||
{
|
||||
return _adapter.CalculateSalary(date).GetResponse(Request, Response);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return StatusCode(500, "Internal error");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Controllers;
|
||||
|
||||
|
||||
[Authorize]
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
[Produces("application/json")]
|
||||
public class WorkersController(IWorkerAdapter adapter) : ControllerBase
|
||||
{
|
||||
private readonly IWorkerAdapter _adapter = adapter;
|
||||
[HttpGet]
|
||||
public IActionResult GetRecords(bool includeDeleted = false)
|
||||
{
|
||||
return _adapter.GetList(includeDeleted).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult GetPostRecords(string id, bool includeDeleted = false)
|
||||
{
|
||||
return _adapter.GetPostList(id, includeDeleted).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult GetBirthDateRecords(DateTime fromDate, DateTime toDate, bool includeDeleted = false)
|
||||
{
|
||||
return _adapter.GetListByBirthDate(fromDate, toDate,
|
||||
includeDeleted).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult GetEmploymentRecords(DateTime fromDate, DateTime
|
||||
toDate, bool includeDeleted = false)
|
||||
{
|
||||
return _adapter.GetListByEmploymentDate(fromDate, toDate,
|
||||
includeDeleted).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet("{data}")]
|
||||
public IActionResult GetRecord(string data)
|
||||
{
|
||||
return _adapter.GetElement(data).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPost]
|
||||
public IActionResult Register([FromBody] WorkerBindingModel model)
|
||||
{
|
||||
return _adapter.RegisterWorker(model).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPut]
|
||||
public IActionResult ChangeInfo([FromBody] WorkerBindingModel model)
|
||||
{
|
||||
return _adapter.ChangeWorkerInfo(model).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpDelete("{id}")]
|
||||
public IActionResult Delete(string id)
|
||||
{
|
||||
return _adapter.RemoveWorker(id).GetResponse(Request, Response);
|
||||
}
|
||||
}
|
||||
@@ -68,6 +68,8 @@ builder.Services.AddTransient<IManufacturerAdapter, ManufacturerAdapter>();
|
||||
builder.Services.AddTransient<IPostAdapter, PostAdapter>();
|
||||
builder.Services.AddTransient<ISoftwareAdapter, SoftwareAdapter>();
|
||||
builder.Services.AddTransient<IRequestAdapter, RequestAdapter>();
|
||||
builder.Services.AddTransient<IWorkerAdapter, WorkerAdapter>();
|
||||
builder.Services.AddTransient<ISalaryAdapter, SalaryAdapter>();
|
||||
|
||||
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
|
||||
builder.Services.AddOpenApi();
|
||||
|
||||
Reference in New Issue
Block a user