Compare commits
5 Commits
Task_3_Sto
...
Task_4_Api
| Author | SHA1 | Date | |
|---|---|---|---|
| fddb9c9d83 | |||
| 5e249e488c | |||
| bd0c52b9f1 | |||
| e1e8d23bd0 | |||
| d3bf4eec43 |
@@ -20,12 +20,10 @@ postStorageContract, ILogger logger) : IPostBusinessLogicContract
|
||||
private readonly ILogger _logger = logger;
|
||||
private readonly IPostStorageContract _postStorageContract =
|
||||
postStorageContract;
|
||||
public List<PostDataModel> GetAllPosts(bool onlyActive = true)
|
||||
public List<PostDataModel> GetAllPosts()
|
||||
{
|
||||
_logger.LogInformation("GetAllPosts params: {onlyActive}",
|
||||
onlyActive);
|
||||
return _postStorageContract.GetList() ?? throw new
|
||||
NullListException();
|
||||
_logger.LogInformation("GetAllPosts");
|
||||
return _postStorageContract.GetList() ?? throw new NullListException();
|
||||
}
|
||||
public List<PostDataModel> GetAllDataOfPost(string postId)
|
||||
{
|
||||
|
||||
@@ -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) ??
|
||||
var requests = _requestStorageContract.GetList(startDate, finishDate, workerId: worker.Id)?.Sum(x => x.Sum) ??
|
||||
throw new NullListException();
|
||||
var post = _postStorageContract.GetElementById(worker.PostId)
|
||||
??
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<InternalsVisibleTo Include="SmallSoftwareTests" />
|
||||
<InternalsVisibleTo Include="SmallSoftwareWebApi" />
|
||||
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
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 IManufacturerAdapter
|
||||
{
|
||||
ManufacturerOperationResponse GetList();
|
||||
ManufacturerOperationResponse GetElement(string data);
|
||||
ManufacturerOperationResponse RegisterManufacturer(ManufacturerBindingModel manufacturerModel);
|
||||
ManufacturerOperationResponse ChangeManufacturerInfo(ManufacturerBindingModel manufacturerModel);
|
||||
ManufacturerOperationResponse RemoveManufacturer(string id);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts;
|
||||
|
||||
public interface IPostAdapter
|
||||
{
|
||||
PostOperationResponse GetList();
|
||||
PostOperationResponse GetHistory(string id);
|
||||
PostOperationResponse GetElement(string data);
|
||||
PostOperationResponse RegisterPost(PostBindingModel postModel);
|
||||
PostOperationResponse ChangePostInfo(PostBindingModel postModel);
|
||||
PostOperationResponse RemovePost(string id);
|
||||
PostOperationResponse RestorePost(string id);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
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 IRequestAdapter
|
||||
{
|
||||
|
||||
RequestOperationResponse GetList(DateTime fromDate, DateTime toDate);
|
||||
RequestOperationResponse GetWorkerList(string id, DateTime fromDate, DateTime
|
||||
toDate);
|
||||
RequestOperationResponse GetSoftwareList(string id, DateTime fromDate, DateTime
|
||||
toDate);
|
||||
RequestOperationResponse GetElement(string id);
|
||||
RequestOperationResponse MakeRequest(RequestBindingModel saleModel);
|
||||
RequestOperationResponse CancelRequest(string id);
|
||||
}
|
||||
@@ -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,18 @@
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts;
|
||||
|
||||
public interface ISoftwareAdapter
|
||||
{
|
||||
SoftwareOperationResponse GetList(bool includeDeleted);
|
||||
SoftwareOperationResponse GetManufacturerList(string id, bool
|
||||
includeDeleted);
|
||||
SoftwareOperationResponse GetHistory(string id);
|
||||
SoftwareOperationResponse GetElement(string data);
|
||||
SoftwareOperationResponse RegisterSoftware(SoftwareBindingModel productModel);
|
||||
SoftwareOperationResponse ChangeSoftwareInfo(SoftwareBindingModel
|
||||
productModel);
|
||||
SoftwareOperationResponse RemoveSoftware(string id);
|
||||
|
||||
}
|
||||
@@ -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,25 @@
|
||||
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 ManufacturerOperationResponse : OperationResponse
|
||||
{
|
||||
public static ManufacturerOperationResponse OK(List<ManufacturerViewModel>
|
||||
data) => OK<ManufacturerOperationResponse, List<ManufacturerViewModel>>(data);
|
||||
public static ManufacturerOperationResponse OK(ManufacturerViewModel data)
|
||||
=> OK<ManufacturerOperationResponse, ManufacturerViewModel>(data);
|
||||
public static ManufacturerOperationResponse NoContent() =>
|
||||
NoContent<ManufacturerOperationResponse>();
|
||||
public static ManufacturerOperationResponse NotFound(string message) =>
|
||||
NotFound<ManufacturerOperationResponse>(message);
|
||||
public static ManufacturerOperationResponse BadRequest(string message) =>
|
||||
BadRequest<ManufacturerOperationResponse>(message);
|
||||
public static ManufacturerOperationResponse InternalServerError(string
|
||||
message) => InternalServerError<ManufacturerOperationResponse>(message);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
|
||||
public class PostOperationResponse : OperationResponse
|
||||
{
|
||||
public static PostOperationResponse OK(List<PostViewModel> data) =>
|
||||
OK<PostOperationResponse, List<PostViewModel>>(data);
|
||||
public static PostOperationResponse OK(PostViewModel data) =>
|
||||
OK<PostOperationResponse, PostViewModel>(data);
|
||||
public static PostOperationResponse NoContent() =>
|
||||
NoContent<PostOperationResponse>();
|
||||
public static PostOperationResponse NotFound(string message) =>
|
||||
NotFound<PostOperationResponse>(message);
|
||||
public static PostOperationResponse BadRequest(string message) =>
|
||||
BadRequest<PostOperationResponse>(message);
|
||||
public static PostOperationResponse InternalServerError(string message) =>
|
||||
InternalServerError<PostOperationResponse>(message);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
public class RequestOperationResponse : OperationResponse
|
||||
{
|
||||
public static RequestOperationResponse OK(List<RequestViewModel> data) =>
|
||||
OK<RequestOperationResponse, List<RequestViewModel>>(data);
|
||||
public static RequestOperationResponse OK(RequestViewModel data) =>
|
||||
OK<RequestOperationResponse, RequestViewModel>(data);
|
||||
public static RequestOperationResponse NoContent() =>
|
||||
NoContent<RequestOperationResponse>();
|
||||
public static RequestOperationResponse NotFound(string message) =>
|
||||
NotFound<RequestOperationResponse>(message);
|
||||
public static RequestOperationResponse BadRequest(string message) =>
|
||||
BadRequest<RequestOperationResponse>(message);
|
||||
public static RequestOperationResponse InternalServerError(string message) =>
|
||||
InternalServerError<RequestOperationResponse>(message);
|
||||
}
|
||||
@@ -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,22 @@
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
|
||||
namespace SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
|
||||
public class SoftwareOperationResponse : OperationResponse
|
||||
{
|
||||
public static SoftwareOperationResponse OK(List<SoftwareViewModel> data) =>
|
||||
OK<SoftwareOperationResponse, List<SoftwareViewModel>>(data);
|
||||
public static SoftwareOperationResponse OK(List<SoftwareHistoryViewModel>
|
||||
data) => OK<SoftwareOperationResponse, List<SoftwareHistoryViewModel>>(data);
|
||||
public static SoftwareOperationResponse OK(SoftwareViewModel data) =>
|
||||
OK<SoftwareOperationResponse, SoftwareViewModel>(data);
|
||||
public static SoftwareOperationResponse NoContent() =>
|
||||
NoContent<SoftwareOperationResponse>();
|
||||
public static SoftwareOperationResponse NotFound(string message) =>
|
||||
NotFound<SoftwareOperationResponse>(message);
|
||||
public static SoftwareOperationResponse BadRequest(string message) =>
|
||||
BadRequest<SoftwareOperationResponse>(message);
|
||||
public static SoftwareOperationResponse InternalServerError(string message)
|
||||
=> InternalServerError<SoftwareOperationResponse>(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);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace SmallSoftwareContracts.BindingModels;
|
||||
|
||||
public class InstallationRequestBindingModel
|
||||
|
||||
{
|
||||
|
||||
public string? SoftwareId { get; set; }
|
||||
public string? RequestId { get; set; }
|
||||
public int Count { get; set; }
|
||||
public double Price { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.BindingModels;
|
||||
|
||||
public class ManufacturerBindingModel
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? ManufacturerName { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.BindingModels;
|
||||
|
||||
public class PostBindingModel
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? PostId => Id;
|
||||
public string? PostName { get; set; }
|
||||
public string? PostType { get; set; }
|
||||
public double Salary { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
|
||||
namespace SmallSoftwareContracts.BindingModels;
|
||||
|
||||
public class RequestBindingModel
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? WorkerId { get; set; }
|
||||
public List<InstallationRequestBindingModel>? Softwares { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using SmallSoftwareContracts.Enums;
|
||||
|
||||
namespace SmallSoftwareContracts.BindingModels;
|
||||
|
||||
public class SoftwareBindingModel
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? SoftwareName { get; set; }
|
||||
public string? SoftwareType { get; set; }
|
||||
public string? ManufacturerId { get; set; }
|
||||
public double Price { 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; }
|
||||
}
|
||||
@@ -9,7 +9,7 @@ namespace SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
|
||||
public interface IPostBusinessLogicContract
|
||||
{
|
||||
List<PostDataModel> GetAllPosts(bool onlyActive);
|
||||
List<PostDataModel> GetAllPosts();
|
||||
List<PostDataModel> GetAllDataOfPost(string postId);
|
||||
PostDataModel GetPostByData(string data);
|
||||
void InsertPost(PostDataModel postDataModel);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -6,10 +6,20 @@ namespace SmallSoftwareContracts.DataModels;
|
||||
|
||||
public class InstallationRequestDataModel(string softwareId, string requestId, int count, double price) : IValidation
|
||||
{
|
||||
private readonly SoftwareDataModel? _software;
|
||||
|
||||
public string SoftwareId { get; private set; } = softwareId;
|
||||
public string RequestId { get; private set; } = requestId;
|
||||
public int Count { get; private set; } = count;
|
||||
public double Price { get; private set; } = price;
|
||||
|
||||
public string SoftwareName => _software?.SoftwareName ?? string.Empty;
|
||||
public InstallationRequestDataModel(string saleId, string softwareId, int count, double price, SoftwareDataModel software) : this(saleId, softwareId, count, price)
|
||||
{
|
||||
_software = software;
|
||||
}
|
||||
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (SoftwareId.IsEmpty())
|
||||
|
||||
@@ -13,6 +13,9 @@ prevManufacturerName, string? prevPrevManufacturerName) : IValidation
|
||||
prevManufacturerName;
|
||||
public string? PrevPrevManufacturerName { get; private set; } =
|
||||
prevPrevManufacturerName;
|
||||
|
||||
public ManufacturerDataModel(string id, string manufacturerName) : this(id, manufacturerName, null, null){ }
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (Id.IsEmpty())
|
||||
|
||||
@@ -2,19 +2,42 @@
|
||||
using SmallSoftwareContracts.Extensions;
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Xml;
|
||||
|
||||
|
||||
namespace SmallSoftwareContracts.DataModels;
|
||||
|
||||
|
||||
public class RequestDataModel(string id, string workerId, string email, double sum, bool isCancel, List<InstallationRequestDataModel> installationRequests) : IValidation
|
||||
public class RequestDataModel : IValidation
|
||||
{
|
||||
public string Id { get; private set; } = id;
|
||||
public string WorkerId { get; private set; } = workerId;
|
||||
public string Email { get; private set; } = email;
|
||||
public double Sum { get; private set; } = sum;
|
||||
public bool IsCancel { get; private set; } = isCancel;
|
||||
public List<InstallationRequestDataModel> Softwares { get; private set; } = installationRequests;
|
||||
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, DateTime requestDate)
|
||||
{
|
||||
Id = id;
|
||||
WorkerId = workerId;
|
||||
Email = email;
|
||||
IsCancel = isCancel;
|
||||
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, DateTime requestDate)
|
||||
: this(id, workerId, email, isCancel, installationRequests, requestDate)
|
||||
{
|
||||
Sum = sum;
|
||||
_worker = worker;
|
||||
}
|
||||
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (Id.IsEmpty())
|
||||
@@ -25,13 +48,13 @@ public class RequestDataModel(string id, string workerId, string email, double s
|
||||
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 (Email.IsEmpty())
|
||||
throw new ValidationException("Worker Email is empty");
|
||||
if (!Regex.IsMatch(Email, @"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$"))
|
||||
throw new ValidationException("Field Email is not a email");
|
||||
if (Sum <= 0)
|
||||
throw new ValidationException("Field Sum is less than or equal to 0");
|
||||
if ((Softwares?.Count ?? 0) == 0)
|
||||
throw new ValidationException("The sale must include Softwares");
|
||||
throw new ValidationException("The request must include products");
|
||||
if (!Regex.IsMatch(Email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$"))
|
||||
{
|
||||
throw new ValidationException("Invalid email format");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -13,12 +13,28 @@ namespace SmallSoftwareContracts.DataModels;
|
||||
|
||||
public class SoftwareDataModel(string id, string softwareName, SoftwareType softwareType, string manufacturerId, double price, bool isDeleted) : IValidation
|
||||
{
|
||||
private readonly ManufacturerDataModel? _manufacturer;
|
||||
public string Id { get; private set; } = id;
|
||||
public string SoftwareName { get; private set; } = softwareName;
|
||||
public SoftwareType SoftwareType { get; private set; } = softwareType;
|
||||
public string ManufacturerId { get; private set; } = manufacturerId;
|
||||
public double Price { get; private set; } = price;
|
||||
public bool IsDeleted { get; private set; } = isDeleted;
|
||||
public string ManufacturerName => _manufacturer?.ManufacturerName ?? string.Empty;
|
||||
|
||||
public SoftwareDataModel(string id, string softwareName, SoftwareType
|
||||
softwareType, string manufacturerId, double price, bool isDeleted,
|
||||
ManufacturerDataModel manufacturer) : this(id, softwareName, softwareType,
|
||||
manufacturerId, price, isDeleted)
|
||||
{
|
||||
_manufacturer = manufacturer;
|
||||
}
|
||||
public SoftwareDataModel(string id, string softwareName, SoftwareType
|
||||
softwareType, string manufacturerId, double price) : this(id, softwareName,
|
||||
softwareType, manufacturerId, price, false)
|
||||
{ }
|
||||
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (Id.IsEmpty())
|
||||
|
||||
@@ -11,9 +11,19 @@ namespace SmallSoftwareContracts.DataModels;
|
||||
|
||||
public class SoftwareHistoryDataModel(string softwareId, double oldPrice) : IValidation
|
||||
{
|
||||
private readonly SoftwareDataModel? _software;
|
||||
public string SoftwareId { get; private set; } = softwareId;
|
||||
public double OldPrice { get; private set; } = oldPrice;
|
||||
public DateTime ChangeDate { get; private set; } = DateTime.UtcNow;
|
||||
|
||||
public string SoftwareName => _software?.SoftwareName ?? string.Empty;
|
||||
public SoftwareHistoryDataModel(string softwareId, double oldPrice, DateTime
|
||||
changeDate, SoftwareDataModel software) : this(softwareId, oldPrice)
|
||||
{
|
||||
ChangeDate = changeDate;
|
||||
_software = software;
|
||||
}
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
if (SoftwareId.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())
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Net;
|
||||
|
||||
namespace SmallSoftwareContracts.Infrastructure;
|
||||
|
||||
public class OperationResponse
|
||||
{
|
||||
protected HttpStatusCode StatusCode { get; set; }
|
||||
protected object? Result { get; set; }
|
||||
public IActionResult GetResponse(HttpRequest request, HttpResponse
|
||||
response)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(request);
|
||||
ArgumentNullException.ThrowIfNull(response);
|
||||
response.StatusCode = (int)StatusCode;
|
||||
if (Result is null)
|
||||
{
|
||||
return new StatusCodeResult((int)StatusCode);
|
||||
}
|
||||
return new ObjectResult(Result);
|
||||
}
|
||||
protected static TResult OK<TResult, TData>(TData data) where TResult :
|
||||
OperationResponse, new() => new()
|
||||
{
|
||||
StatusCode = HttpStatusCode.OK,
|
||||
Result = data
|
||||
};
|
||||
protected static TResult NoContent<TResult>() where TResult :
|
||||
OperationResponse, new() => new() { StatusCode = HttpStatusCode.NoContent };
|
||||
protected static TResult BadRequest<TResult>(string? errorMessage = null)
|
||||
where TResult : OperationResponse, new() => new()
|
||||
{
|
||||
StatusCode = HttpStatusCode.BadRequest,
|
||||
Result = errorMessage
|
||||
};
|
||||
protected static TResult NotFound<TResult>(string? errorMessage = null)
|
||||
where TResult : OperationResponse, new() => new()
|
||||
{
|
||||
StatusCode = HttpStatusCode.NotFound,
|
||||
Result = errorMessage
|
||||
};
|
||||
protected static TResult InternalServerError<TResult>(string? errorMessage = null) where TResult : OperationResponse, new() => new()
|
||||
{
|
||||
StatusCode = HttpStatusCode.InternalServerError,
|
||||
Result = errorMessage
|
||||
};
|
||||
}
|
||||
@@ -6,4 +6,9 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.3.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -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 InstallationRequestViewModel
|
||||
{
|
||||
public required string SoftwareId { get; set; }
|
||||
public required string SoftwareName { get; set; }
|
||||
public int Count { get; set; }
|
||||
public double Price { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.ViewModels;
|
||||
|
||||
public class ManufacturerViewModel
|
||||
{
|
||||
public required string Id { get; set; }
|
||||
public required string ManufacturerName { get; set; }
|
||||
public string? PrevManufacturerName { get; set; }
|
||||
public string? PrevPrevManufacturerName { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
namespace SmallSoftwareContracts.ViewModels;
|
||||
|
||||
public class PostViewModel
|
||||
{
|
||||
public required string Id { get; set; }
|
||||
public required string PostName { get; set; }
|
||||
public required string PostType { get; set; }
|
||||
public double Salary { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
namespace SmallSoftwareContracts.ViewModels;
|
||||
|
||||
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,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SmallSoftwareContracts.ViewModels;
|
||||
|
||||
public class SoftwareHistoryViewModel
|
||||
{
|
||||
public required string SoftwareName { get; set; }
|
||||
public double OldPrice { get; set; }
|
||||
public DateTime ChangeDate { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace SmallSoftwareContracts.ViewModels;
|
||||
|
||||
public class SoftwareViewModel
|
||||
{
|
||||
public required string Id { get; set; }
|
||||
public required string SoftwareName { get; set; }
|
||||
public required string ManufacturerId { get; set; }
|
||||
public required string ManufacturerName { get; set; }
|
||||
public required string SoftwareType { get; set; }
|
||||
public double Price { get; set; }
|
||||
public bool IsDeleted { 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; }
|
||||
}
|
||||
@@ -24,6 +24,7 @@ internal class PostStorageContract : IPostStorageContract
|
||||
.ForMember(x => x.PostId, x => x.MapFrom(src => src.Id))
|
||||
.ForMember(x => x.IsActual, x => x.MapFrom(src => true))
|
||||
.ForMember(x => x.ChangeDate, x => x.MapFrom(src => DateTime.UtcNow));
|
||||
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
|
||||
@@ -17,12 +17,19 @@ internal class RequestStorageContract : IRequestStorageContract
|
||||
_dbContext = dbContext;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<Manufacturer, ManufacturerDataModel>();
|
||||
cfg.CreateMap<Software, SoftwareDataModel>();
|
||||
cfg.CreateMap<Worker, WorkerDataModel>();
|
||||
cfg.CreateMap<InstallationRequest, InstallationRequestDataModel>();
|
||||
cfg.CreateMap<InstallationRequestDataModel, InstallationRequest>();
|
||||
cfg.CreateMap<InstallationRequestDataModel, InstallationRequest>()
|
||||
.ForMember(x => x.SoftwareId, x => x.MapFrom(src => src.SoftwareId));
|
||||
cfg.CreateMap<Request, RequestDataModel>();
|
||||
cfg.CreateMap<RequestDataModel, Request>()
|
||||
.ForMember(x => x.IsCancel, x => x.MapFrom(src => false))
|
||||
.ForMember(x => x.InstallationRequests, x => x.MapFrom(src => src.Softwares));
|
||||
.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);
|
||||
}
|
||||
@@ -31,7 +38,7 @@ internal class RequestStorageContract : IRequestStorageContract
|
||||
{
|
||||
try
|
||||
{
|
||||
var query = _dbContext.Requests.Include(x => x.InstallationRequests).AsQueryable();
|
||||
var query = _dbContext.Requests.Include(x => x.Worker).Include(x => x.InstallationRequests).AsQueryable();
|
||||
if (workerId is not null)
|
||||
{
|
||||
query = query.Where(x => x.WorkerId == workerId);
|
||||
@@ -40,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)
|
||||
@@ -103,5 +109,10 @@ internal class RequestStorageContract : IRequestStorageContract
|
||||
}
|
||||
}
|
||||
|
||||
private Request? GetRequestById(string id) => _dbContext.Requests.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);
|
||||
|
||||
@@ -17,6 +17,7 @@ internal class SoftwareStorageContract : ISoftwareStorageContract
|
||||
_dbContext = dbContext;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<Manufacturer, ManufacturerDataModel>();
|
||||
cfg.CreateMap<Software, SoftwareDataModel>();
|
||||
cfg.CreateMap<SoftwareDataModel, Software>()
|
||||
.ForMember(x => x.IsDeleted, x => x.MapFrom(src => false));
|
||||
@@ -29,7 +30,7 @@ internal class SoftwareStorageContract : ISoftwareStorageContract
|
||||
{
|
||||
try
|
||||
{
|
||||
var query = _dbContext.Softwares.AsQueryable();
|
||||
var query = _dbContext.Softwares.Include(x => x.Manufacturer).AsQueryable();
|
||||
if (onlyActive)
|
||||
{
|
||||
query = query.Where(x => !x.IsDeleted);
|
||||
@@ -52,7 +53,7 @@ internal class SoftwareStorageContract : ISoftwareStorageContract
|
||||
{
|
||||
try
|
||||
{
|
||||
return [.. _dbContext.SoftwareHistories.Where(x => x.SoftwareId == softwareId)
|
||||
return [.. _dbContext.SoftwareHistories.Include(x => x.Software).Where(x => x.SoftwareId == softwareId)
|
||||
.OrderByDescending(x => x.ChangeDate)
|
||||
.Select(x => _mapper.Map<SoftwareHistoryDataModel>(x))];
|
||||
}
|
||||
@@ -79,7 +80,7 @@ internal class SoftwareStorageContract : ISoftwareStorageContract
|
||||
try
|
||||
{
|
||||
return
|
||||
_mapper.Map<SoftwareDataModel>(_dbContext.Softwares.FirstOrDefault(x =>
|
||||
_mapper.Map<SoftwareDataModel>(_dbContext.Softwares.Include(x => x.Manufacturer).FirstOrDefault(x =>
|
||||
x.SoftwareName == name && !x.IsDeleted));
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -181,6 +182,6 @@ internal class SoftwareStorageContract : ISoftwareStorageContract
|
||||
}
|
||||
}
|
||||
private Software? GetSoftwareById(string id) =>
|
||||
_dbContext.Softwares.FirstOrDefault(x => x.Id == id && !x.IsDeleted);
|
||||
_dbContext.Softwares.Include(x => x.Manufacturer).FirstOrDefault(x => x.Id == id && !x.IsDeleted);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,12 @@ 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);
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
@@ -75,8 +80,7 @@ internal class WorkerStorageContract : IWorkerStorageContract
|
||||
try
|
||||
{
|
||||
return
|
||||
_mapper.Map<WorkerDataModel>(_dbContext.Workers.FirstOrDefault(x => x.FIO ==
|
||||
fio));
|
||||
_mapper.Map<WorkerDataModel>(AddPost(_dbContext.Workers.FirstOrDefault(x => x.FIO == fio && !x.IsDeleted)));
|
||||
}
|
||||
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;
|
||||
|
||||
namespace SmallSoftwareDatabase.Models;
|
||||
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
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;
|
||||
|
||||
@@ -12,6 +6,7 @@ internal class Request
|
||||
{
|
||||
public string Id { get; set; } = Guid.NewGuid().ToString();
|
||||
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; }
|
||||
|
||||
@@ -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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<InternalsVisibleTo Include="SmallSoftwareWebApi" />
|
||||
<InternalsVisibleTo Include="SmallSoftwareTests" />
|
||||
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmallSoftwareBusinessLogic"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmallSoftwareDatabase", "SmallSoftwareDatabase\SmallSoftwareDatabase.csproj", "{59771C74-7A34-4354-949A-F3AA071FBCAA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmallSoftwareWebApi", "SmallSoftwareWebApi\SmallSoftwareWebApi.csproj", "{AC51FBAD-A0B1-40C3-AD75-E29F6E7FD624}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -33,6 +35,10 @@ Global
|
||||
{59771C74-7A34-4354-949A-F3AA071FBCAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{59771C74-7A34-4354-949A-F3AA071FBCAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{59771C74-7A34-4354-949A-F3AA071FBCAA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AC51FBAD-A0B1-40C3-AD75-E29F6E7FD624}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AC51FBAD-A0B1-40C3-AD75-E29F6E7FD624}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AC51FBAD-A0B1-40C3-AD75-E29F6E7FD624}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AC51FBAD-A0B1-40C3-AD75-E29F6E7FD624}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -61,8 +61,8 @@ internal class PostBusinessLogicContractTests
|
||||
_postStorageContract.Setup(x =>
|
||||
x.GetList()).Returns([]);
|
||||
//Act
|
||||
var listOnlyActive = _postBusinessLogicContract.GetAllPosts(true);
|
||||
var listAll = _postBusinessLogicContract.GetAllPosts(false);
|
||||
var listOnlyActive = _postBusinessLogicContract.GetAllPosts();
|
||||
var listAll = _postBusinessLogicContract.GetAllPosts();
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
@@ -79,7 +79,7 @@ internal class PostBusinessLogicContractTests
|
||||
{
|
||||
//Act&Assert
|
||||
Assert.That(() =>
|
||||
_postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()),
|
||||
_postBusinessLogicContract.GetAllPosts(),
|
||||
Throws.TypeOf<NullListException>());
|
||||
_postStorageContract.Verify(x => x.GetList(),
|
||||
Times.Once);
|
||||
@@ -93,7 +93,7 @@ internal class PostBusinessLogicContractTests
|
||||
InvalidOperationException()));
|
||||
//Act&Assert
|
||||
Assert.That(() =>
|
||||
_postBusinessLogicContract.GetAllPosts(It.IsAny<bool>()),
|
||||
_postBusinessLogicContract.GetAllPosts(),
|
||||
Throws.TypeOf<StorageException>());
|
||||
_postStorageContract.Verify(x => x.GetList(),
|
||||
Times.Once);
|
||||
|
||||
@@ -34,8 +34,8 @@ internal class RequestBusinessLogicContractTests
|
||||
var date = DateTime.UtcNow;
|
||||
var listOriginal = new List<RequestDataModel>()
|
||||
{
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)]),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, 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(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(),Guid.NewGuid().ToString(), 5, 10)]),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []), new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, 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(), Guid.NewGuid().ToString(), 10, false, [new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, false, []),
|
||||
new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 10, 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(), Guid.NewGuid().ToString(), 10, 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
|
||||
@@ -404,8 +404,8 @@ internal class RequestBusinessLogicContractTests
|
||||
{
|
||||
//Arrange
|
||||
var flag = false;
|
||||
var record = new RequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "valid.email@example.com", 10, false,
|
||||
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)]);
|
||||
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)], DateTime.UtcNow);
|
||||
_requestStorageContract.Setup(x => x.AddElement(It.IsAny<RequestDataModel>()))
|
||||
.Callback((RequestDataModel x) =>
|
||||
{
|
||||
@@ -434,8 +434,8 @@ internal class RequestBusinessLogicContractTests
|
||||
ElementExistsException("Data", "Data"));
|
||||
//Act&Assert
|
||||
Assert.That(() =>
|
||||
_requestBusinessLogicContract.InsertRequest(new(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10,false,
|
||||
[new InstallationRequestDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), 5, 10)])), Throws.TypeOf<ElementExistsException>());
|
||||
_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<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(), Guid.NewGuid().ToString(), 10, 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", 10, 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);
|
||||
}
|
||||
|
||||
@@ -231,37 +231,7 @@ internal class SalaryBusinessLogicContractTests
|
||||
_salaryStorageContract.Verify(x => x.GetList(It.IsAny<DateTime>(),
|
||||
It.IsAny<DateTime>(), It.IsAny<string>()), Times.Once);
|
||||
}
|
||||
[Test]
|
||||
public void CalculateSalaryByMounth_CalculateSalary_Test()
|
||||
{
|
||||
//Arrange
|
||||
var workerId = Guid.NewGuid().ToString();
|
||||
var requestSum = 200.0;
|
||||
var postSalary = 2000.0;
|
||||
_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(), requestSum, false, [])]);
|
||||
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
|
||||
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
|
||||
PostType.SoftInstaller, postSalary));
|
||||
_workerStorageContract.Setup(x => x.GetList(It.IsAny<bool>(),
|
||||
It.IsAny<string?>(), It.IsAny<DateTime?>(), It.IsAny<DateTime?>(),
|
||||
It.IsAny<DateTime?>(), It.IsAny<DateTime?>()))
|
||||
.Returns([new WorkerDataModel(workerId, "Test",
|
||||
Guid.NewGuid().ToString(), DateTime.UtcNow, DateTime.UtcNow, false)]);
|
||||
var sum = 0.0;
|
||||
var expectedSum = postSalary + requestSum * 0.1;
|
||||
_salaryStorageContract.Setup(x =>
|
||||
x.AddElement(It.IsAny<SalaryDataModel>()))
|
||||
.Callback((SalaryDataModel x) =>
|
||||
{
|
||||
sum = x.Salary;
|
||||
});
|
||||
//Act
|
||||
_salaryBusinessLogicContract.CalculateSalaryByMonth(DateTime.UtcNow);
|
||||
//Assert
|
||||
Assert.That(sum, Is.EqualTo(expectedSum));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CalculateSalaryByMounth_WithSeveralWorkers_Test()
|
||||
{
|
||||
@@ -280,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(), 1, false, []),
|
||||
worker1Id, Guid.NewGuid().ToString(), false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker1Id, Guid.NewGuid().ToString(),
|
||||
1, false, []),
|
||||
false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker2Id, Guid.NewGuid().ToString(),
|
||||
1, false, []),
|
||||
false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker3Id, Guid.NewGuid().ToString(),
|
||||
1, false, []),
|
||||
false, [], DateTime.UtcNow),
|
||||
new RequestDataModel(Guid.NewGuid().ToString(), worker3Id, Guid.NewGuid().ToString(),
|
||||
1, false, [])]);
|
||||
false, [], DateTime.UtcNow)]);
|
||||
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
|
||||
.Returns(new PostDataModel(Guid.NewGuid().ToString(), "name",
|
||||
PostType.SoftInstaller, 2000));
|
||||
@@ -359,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(), 200, 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?>()))
|
||||
@@ -379,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(), 200, 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));
|
||||
@@ -420,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(), 200, false, [])]);
|
||||
workerId, Guid.NewGuid().ToString(), false, [], DateTime.UtcNow)]);
|
||||
_postStorageContract.Setup(x => x.GetElementById(It.IsAny<string>()))
|
||||
.Throws(new StorageException(new
|
||||
InvalidOperationException()));
|
||||
@@ -442,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(), 200, 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,64 +9,55 @@ internal class RequestDataModelTests
|
||||
[Test]
|
||||
public void IdIsNullOrEmptyTest()
|
||||
{
|
||||
var request = CreateDataModel(null, Guid.NewGuid().ToString(), "test@example.com", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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", 10, 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(), "", 10, false, CreateSubDataModel());
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "@", false, CreateSubDataModel(), DateTime.UtcNow);
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SumIsLessOrZeroTest()
|
||||
{
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 0, false, CreateSubDataModel());
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
|
||||
request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", -10, false, CreateSubDataModel());
|
||||
Assert.That(() => request.Validate(), Throws.TypeOf<ValidationException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SoftwaresIsNullOrEmptyTest()
|
||||
{
|
||||
var request = CreateDataModel(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "test@example.com", 10, 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", 10, 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>());
|
||||
}
|
||||
|
||||
@@ -80,7 +71,7 @@ internal class RequestDataModelTests
|
||||
var isCancel = true;
|
||||
var softwares = CreateSubDataModel();
|
||||
|
||||
var request = CreateDataModel(requestId, workerId, email, sum, isCancel, softwares);
|
||||
var request = CreateDataModel(requestId, workerId, email, isCancel, softwares, DateTime.UtcNow);
|
||||
|
||||
Assert.That(() => request.Validate(), Throws.Nothing);
|
||||
Assert.Multiple(() =>
|
||||
@@ -94,8 +85,8 @@ internal class RequestDataModelTests
|
||||
});
|
||||
}
|
||||
|
||||
private static RequestDataModel CreateDataModel(string? id, string? workerId, string email, double sum, bool isCancel, List<InstallationRequestDataModel>? softwares) =>
|
||||
new(id, workerId, email, sum, 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)];
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Mvc.Testing;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
|
||||
namespace SmallSoftwareTests.Infrastructure;
|
||||
|
||||
internal class CustomWebApplicationFactory<TProgram> : WebApplicationFactory<TProgram>
|
||||
where TProgram : class
|
||||
{
|
||||
protected override void ConfigureWebHost(IWebHostBuilder builder)
|
||||
{
|
||||
builder.ConfigureServices(services =>
|
||||
{
|
||||
var databaseConfig = services.SingleOrDefault(x => x.ServiceType == typeof(IConfigurationDatabase));
|
||||
if (databaseConfig is not null)
|
||||
services.Remove(databaseConfig);
|
||||
var loggerFactory = services.SingleOrDefault(x => x.ServiceType == typeof(LoggerFactory));
|
||||
if (loggerFactory is not null)
|
||||
services.Remove(loggerFactory);
|
||||
services.AddSingleton<IConfigurationDatabase, ConfigurationDatabaseTest>();
|
||||
});
|
||||
builder.UseEnvironment("Development");
|
||||
base.ConfigureWebHost(builder);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SmallSoftwareContracts.Enums;
|
||||
using SmallSoftwareDatabase;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using static NUnit.Framework.Internal.OSPlatform;
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
namespace SmallSoftwareTests.Infrastructure;
|
||||
|
||||
internal static class SmallSoftwareDbContextExtensions
|
||||
{
|
||||
public static Manufacturer InsertManufacturerToDatabaseAndReturn(this SmallSoftwareDbContext dbContext,
|
||||
string? id = null, string manufacturerName = "test", string prevManufacturerName = "prev",
|
||||
string prevPrevManufacturerName = "prevPrev")
|
||||
{
|
||||
var manufacturer = new Manufacturer()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
ManufacturerName = manufacturerName,
|
||||
PrevManufacturerName = prevManufacturerName,
|
||||
PrevPrevManufacturerName = prevPrevManufacturerName
|
||||
};
|
||||
dbContext.Manufacturers.Add(manufacturer);
|
||||
dbContext.SaveChanges();
|
||||
return manufacturer;
|
||||
}
|
||||
public static Post InsertPostToDatabaseAndReturn(this SmallSoftwareDbContext
|
||||
dbContext, string? id = null, string postName = "test", PostType postType =
|
||||
PostType.SoftInstaller, double salary = 10, bool isActual = true, DateTime?
|
||||
changeDate = null)
|
||||
{
|
||||
var post = new Post()
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
PostId = id ?? Guid.NewGuid().ToString(),
|
||||
PostName = postName,
|
||||
PostType = postType,
|
||||
Salary = salary,
|
||||
IsActual = isActual,
|
||||
ChangeDate = changeDate ?? DateTime.UtcNow
|
||||
};
|
||||
dbContext.Posts.Add(post);
|
||||
dbContext.SaveChanges();
|
||||
return post;
|
||||
}
|
||||
public static Software InsertSoftwareToDatabaseAndReturn(this
|
||||
SmallSoftwareDbContext dbContext, string manufacturerId, string? id = null, string
|
||||
softwareName = "test", SoftwareType softwareType = SoftwareType.Windows, double price =
|
||||
1, bool isDeleted = false)
|
||||
{
|
||||
var software = new Software()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
ManufacturerId = manufacturerId,
|
||||
SoftwareName = softwareName,
|
||||
SoftwareType = softwareType,
|
||||
Price = price,
|
||||
IsDeleted = isDeleted
|
||||
};
|
||||
dbContext.Softwares.Add(software);
|
||||
dbContext.SaveChanges();
|
||||
return software;
|
||||
}
|
||||
|
||||
public static SoftwareHistory InsertSoftwareHistoryToDatabaseAndReturn(this
|
||||
SmallSoftwareDbContext dbContext, string softwareId, double price = 10, DateTime?
|
||||
changeDate = null)
|
||||
{
|
||||
var softwareHistory = new SoftwareHistory()
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
SoftwareId = softwareId,
|
||||
OldPrice = price,
|
||||
ChangeDate = changeDate ?? DateTime.UtcNow
|
||||
};
|
||||
dbContext.SoftwareHistories.Add(softwareHistory);
|
||||
dbContext.SaveChanges();
|
||||
return softwareHistory;
|
||||
}
|
||||
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 };
|
||||
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, DateTime? requestDate = null)
|
||||
{
|
||||
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
|
||||
{
|
||||
SoftwareId = elem.Item1,
|
||||
Software = software!,
|
||||
RequestId = request.Id,
|
||||
Count = elem.Item2,
|
||||
Price = elem.Item3
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
dbContext.Requests.Add(request);
|
||||
dbContext.SaveChanges();
|
||||
return request;
|
||||
}
|
||||
|
||||
public static Worker InsertWorkerToDatabaseAndReturn(this SmallSoftwareDbContext dbContext,
|
||||
string? id = null, string fio = "test", string? postId = null, DateTime? birthDate = null,
|
||||
DateTime? employmentDate = null, bool isDeleted = false)
|
||||
{
|
||||
var worker = new Worker()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
FIO = fio,
|
||||
PostId = postId ?? Guid.NewGuid().ToString(),
|
||||
BirthDate = birthDate ?? DateTime.UtcNow.AddYears(-20),
|
||||
EmploymentDate = employmentDate ?? DateTime.UtcNow,
|
||||
IsDeleted = isDeleted
|
||||
};
|
||||
dbContext.Workers.Add(worker);
|
||||
dbContext.SaveChanges();
|
||||
return worker;
|
||||
}
|
||||
public static Manufacturer? GetManufacturerFromDatabase(this
|
||||
SmallSoftwareDbContext dbContext, string id) => dbContext.Manufacturers.FirstOrDefault(x => x.Id == id);
|
||||
public static Post? GetPostFromDatabaseByPostId(this SmallSoftwareDbContext
|
||||
dbContext, string id) => dbContext.Posts.FirstOrDefault(x => x.PostId == id && x.IsActual);
|
||||
public static Post[] GetPostsFromDatabaseByPostId(this SmallSoftwareDbContext
|
||||
dbContext, string id) => [.. dbContext.Posts.Where(x => x.PostId == id).OrderByDescending(x => x.ChangeDate)];
|
||||
public static Software? GetSoftwareFromDatabaseById(this SmallSoftwareDbContext
|
||||
dbContext, string id) => dbContext.Softwares.FirstOrDefault(x => x.Id == id);
|
||||
public static Salary[] GetSalariesFromDatabaseByWorkerId(this
|
||||
SmallSoftwareDbContext dbContext, string id) => [.. dbContext.Salaries.Where(x => x.WorkerId == id)];
|
||||
public static Request? GetRequestFromDatabaseById(this SmallSoftwareDbContext
|
||||
dbContext, string id) => dbContext.Requests.Include(x => x.InstallationRequests).FirstOrDefault(x => x.Id == id);
|
||||
|
||||
public static Worker? GetWorkerFromDatabaseById(this SmallSoftwareDbContext
|
||||
dbContext, string id) => dbContext.Workers.FirstOrDefault(x => x.Id == id);
|
||||
public static void RemoveManufacturersFromDatabase(this SmallSoftwareDbContext
|
||||
dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Manufacturers\" CASCADE;");
|
||||
public static void RemovePostsFromDatabase(this SmallSoftwareDbContext
|
||||
dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Posts\" CASCADE;");
|
||||
public static void RemoveSoftwaresFromDatabase(this SmallSoftwareDbContext
|
||||
dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Softwares\" CASCADE;");
|
||||
public static void RemoveSalariesFromDatabase(this SmallSoftwareDbContext
|
||||
dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Salaries\" CASCADE;");
|
||||
public static void RemoveRequestsFromDatabase(this SmallSoftwareDbContext
|
||||
dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Requests\" CASCADE;");
|
||||
public static void RemoveWorkersFromDatabase(this SmallSoftwareDbContext
|
||||
dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Workers\" CASCADE;");
|
||||
private static void ExecuteSqlRaw(this SmallSoftwareDbContext dbContext,
|
||||
string command) => dbContext.Database.ExecuteSqlRaw(command);
|
||||
}
|
||||
@@ -8,19 +8,36 @@
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="appsettings.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="appsettings.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.3" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.2.2" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.4.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
|
||||
<PackageReference Include="Serilog" Version="4.2.0" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="9.0.1" />
|
||||
<PackageReference Include="Serilog.Settings.Configuration" Version="9.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SmallSoftwareBusinessLogic\SmallSoftwareBusinessLogic.csproj" />
|
||||
<ProjectReference Include="..\SmallSoftwareContracts\SmallSoftwareContracts.csproj" />
|
||||
<ProjectReference Include="..\SmallSoftwareDatabase\SmallSoftwareDatabase.csproj" />
|
||||
<ProjectReference Include="..\SmallSoftwareWebApi\SmallSoftwareWebApi.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -3,6 +3,7 @@ using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareDatabase.Implementations;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
|
||||
namespace SmallSoftwareTests.StoragesContracts;
|
||||
|
||||
@@ -19,17 +20,17 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Softwares\" CASCADE; ");
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Manufacturers\" CASCADE;");
|
||||
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var manufacturer =
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1");
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1");
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
"name 2");
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
"name 3");
|
||||
var list = _manufacturerStorageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
@@ -47,14 +48,14 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var manufacturer =
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
AssertElement(_manufacturerStorageContract.GetElementById(manufacturer.Id),
|
||||
manufacturer);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenNoRecord_Test()
|
||||
{
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
Assert.That(() =>
|
||||
_manufacturerStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
||||
}
|
||||
@@ -62,13 +63,13 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetElementByName_WhenHaveRecord_Test()
|
||||
{
|
||||
var manufacturer =
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
AssertElement(_manufacturerStorageContract.GetElementByName(manufacturer.ManufacturerName), manufacturer);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementByName_WhenNoRecord_Test()
|
||||
{
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
Assert.That(() =>
|
||||
_manufacturerStorageContract.GetElementByName("name"), Is.Null);
|
||||
}
|
||||
@@ -76,7 +77,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetElementByOldName_WhenHaveRecord_Test()
|
||||
{
|
||||
var manufacturer =
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
AssertElement(_manufacturerStorageContract.GetElementByOldName(manufacturer
|
||||
.PrevManufacturerName!), manufacturer);
|
||||
AssertElement(_manufacturerStorageContract.GetElementByOldName(manufacturer
|
||||
@@ -85,7 +86,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetElementByOldName_WhenNoRecord_Test()
|
||||
{
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
Assert.That(() =>
|
||||
_manufacturerStorageContract.GetElementByOldName("name"), Is.Null);
|
||||
}
|
||||
@@ -101,7 +102,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
|
||||
{
|
||||
var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name unique");
|
||||
InsertManufacturerToDatabaseAndReturn(manufacturer.Id);
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer.Id);
|
||||
Assert.That(() =>
|
||||
_manufacturerStorageContract.AddElement(manufacturer),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
@@ -110,7 +111,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_AddElement_WhenHaveRecordWithSameManufacturerName_Test()
|
||||
{
|
||||
var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name unique");
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
manufacturerName: manufacturer.ManufacturerName);
|
||||
Assert.That(() =>
|
||||
_manufacturerStorageContract.AddElement(manufacturer),
|
||||
@@ -121,7 +122,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name new",
|
||||
"test", "prev");
|
||||
InsertManufacturerToDatabaseAndReturn(manufacturer.Id,
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer.Id,
|
||||
manufacturerName: manufacturer.PrevManufacturerName!, prevManufacturerName:
|
||||
manufacturer.PrevPrevManufacturerName!);
|
||||
_manufacturerStorageContract.UpdElement(CreateModel(manufacturer.Id,
|
||||
@@ -134,7 +135,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name new",
|
||||
"test", "prev");
|
||||
InsertManufacturerToDatabaseAndReturn(manufacturer.Id,
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer.Id,
|
||||
manufacturerName: manufacturer.ManufacturerName!, prevManufacturerName:
|
||||
manufacturer.PrevManufacturerName!, prevPrevManufacturerName:
|
||||
manufacturer.PrevPrevManufacturerName!);
|
||||
@@ -153,9 +154,9 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_UpdElement_WhenHaveRecordWithSameManufacturerName_Test()
|
||||
{
|
||||
var manufacturer = CreateModel(Guid.NewGuid().ToString(), "name unique");
|
||||
InsertManufacturerToDatabaseAndReturn(manufacturer.Id,
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer.Id,
|
||||
manufacturerName: "some name");
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
manufacturerName: manufacturer.ManufacturerName);
|
||||
Assert.That(() =>
|
||||
_manufacturerStorageContract.UpdElement(manufacturer),
|
||||
@@ -165,7 +166,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_DelElement_WhenNoSoftwares_Test()
|
||||
{
|
||||
var manufacturer =
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
_manufacturerStorageContract.DelElement(manufacturer.Id);
|
||||
var element = GetManufacturerFromDatabase(manufacturer.Id);
|
||||
Assert.That(element, Is.Null);
|
||||
@@ -174,7 +175,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_DelElement_WhenHaveSoftwares_Test()
|
||||
{
|
||||
var manufacturer =
|
||||
InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.Softwares.Add(new Software()
|
||||
{
|
||||
Id =
|
||||
@@ -197,22 +198,7 @@ internal class ManufacturerStorageContractTests : BaseStorageContractTest
|
||||
_manufacturerStorageContract.DelElement(Guid.NewGuid().ToString()),
|
||||
Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
private Manufacturer InsertManufacturerToDatabaseAndReturn(string id,
|
||||
string manufacturerName = "test", string prevManufacturerName = "prev", string
|
||||
prevPrevManufacturerName = "prevPrev")
|
||||
{
|
||||
var manufacturer = new Manufacturer()
|
||||
{
|
||||
Id = id,
|
||||
ManufacturerName =
|
||||
manufacturerName,
|
||||
PrevManufacturerName = prevManufacturerName,
|
||||
PrevPrevManufacturerName = prevPrevManufacturerName
|
||||
};
|
||||
SmallSoftwareDbContext.Manufacturers.Add(manufacturer);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return manufacturer;
|
||||
}
|
||||
|
||||
private static void AssertElement(ManufacturerDataModel? actual,
|
||||
Manufacturer expected)
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@ using SmallSoftwareContracts.Enums;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareDatabase.Implementations;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -24,14 +25,14 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Posts\" CASCADE; ");
|
||||
SmallSoftwareDbContext.RemovePostsFromDatabase();
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1");
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 2");
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 3");
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1");
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 2");
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 3");
|
||||
var list = _postStorageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(3));
|
||||
@@ -48,10 +49,10 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetPostWithHistory_WhenHaveRecords_Test()
|
||||
{
|
||||
var postId = Guid.NewGuid().ToString();
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1",
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1",
|
||||
isActual: true);
|
||||
InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true);
|
||||
InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false);
|
||||
var list = _postStorageContract.GetPostWithHistory(postId);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(2));
|
||||
@@ -60,10 +61,10 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetPostWithHistory_WhenNoRecords_Test()
|
||||
{
|
||||
var postId = Guid.NewGuid().ToString();
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1",
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), "name 1",
|
||||
isActual: true);
|
||||
InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true);
|
||||
InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false);
|
||||
var list =
|
||||
_postStorageContract.GetPostWithHistory(Guid.NewGuid().ToString());
|
||||
Assert.That(list, Is.Not.Null);
|
||||
@@ -72,21 +73,21 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
AssertElement(_postStorageContract.GetElementById(post.PostId),
|
||||
post);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenNoRecord_Test()
|
||||
{
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
Assert.That(() =>
|
||||
_postStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenRecordHasDeleted_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
isActual: false);
|
||||
Assert.That(() => _postStorageContract.GetElementById(post.PostId),
|
||||
Is.Null);
|
||||
@@ -94,28 +95,28 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenTrySearchById_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
Assert.That(() => _postStorageContract.GetElementById(post.Id),
|
||||
Is.Null);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementByName_WhenHaveRecord_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
AssertElement(_postStorageContract.GetElementByName(post.PostName),
|
||||
post);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementByName_WhenNoRecord_Test()
|
||||
{
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
Assert.That(() => _postStorageContract.GetElementByName("name"),
|
||||
Is.Null);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementByName_WhenRecordHasDeleted_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
isActual: false);
|
||||
Assert.That(() => _postStorageContract.GetElementById(post.PostName),
|
||||
Is.Null);
|
||||
@@ -131,7 +132,7 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
public void Try_AddElement_WhenHaveRecordWithSameName_Test()
|
||||
{
|
||||
var post = CreateModel(Guid.NewGuid().ToString(), "name unique");
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), postName:
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), postName:
|
||||
post.PostName, isActual: true);
|
||||
Assert.That(() => _postStorageContract.AddElement(post),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
@@ -140,7 +141,7 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
public void Try_AddElement_WhenHaveRecordWithSamePostId_Test()
|
||||
{
|
||||
var post = CreateModel(Guid.NewGuid().ToString());
|
||||
InsertPostToDatabaseAndReturn(post.Id, isActual: true);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(post.Id, isActual: true);
|
||||
Assert.That(() => _postStorageContract.AddElement(post),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
@@ -148,7 +149,7 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
public void Try_UpdElement_Test()
|
||||
{
|
||||
var post = CreateModel(Guid.NewGuid().ToString());
|
||||
InsertPostToDatabaseAndReturn(post.Id, isActual: true);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(post.Id, isActual: true);
|
||||
_postStorageContract.UpdElement(post);
|
||||
var posts = SmallSoftwareDbContext.Posts.Where(x => x.PostId ==
|
||||
post.Id).OrderByDescending(x => x.ChangeDate);
|
||||
@@ -167,8 +168,8 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
public void Try_UpdElement_WhenHaveRecordWithSameName_Test()
|
||||
{
|
||||
var post = CreateModel(Guid.NewGuid().ToString(), "New Name");
|
||||
InsertPostToDatabaseAndReturn(post.Id, postName: "name");
|
||||
InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), postName:
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(post.Id, postName: "name");
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(), postName:
|
||||
post.PostName);
|
||||
Assert.That(() => _postStorageContract.UpdElement(post),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
@@ -177,14 +178,14 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
public void Try_UpdElement_WhenRecordWasDeleted_Test()
|
||||
{
|
||||
var post = CreateModel(Guid.NewGuid().ToString());
|
||||
InsertPostToDatabaseAndReturn(post.Id, isActual: false);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(post.Id, isActual: false);
|
||||
Assert.That(() => _postStorageContract.UpdElement(post),
|
||||
Throws.TypeOf<ElementDeletedException>());
|
||||
}
|
||||
[Test]
|
||||
public void Try_DelElement_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
isActual: true);
|
||||
_postStorageContract.DelElement(post.PostId);
|
||||
var element = GetPostFromDatabaseByPostId(post.PostId);
|
||||
@@ -204,7 +205,7 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_DelElement_WhenRecordWasDeleted_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
isActual: false);
|
||||
Assert.That(() => _postStorageContract.DelElement(post.PostId),
|
||||
Throws.TypeOf<ElementDeletedException>());
|
||||
@@ -212,7 +213,7 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_ResElement_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
isActual: false);
|
||||
_postStorageContract.ResElement(post.PostId);
|
||||
var element = GetPostFromDatabaseByPostId(post.PostId);
|
||||
@@ -232,29 +233,11 @@ internal class PostStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_ResElement_WhenRecordNotWasDeleted_Test()
|
||||
{
|
||||
var post = InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
isActual: true);
|
||||
Assert.That(() => _postStorageContract.ResElement(post.PostId),
|
||||
Throws.Nothing);
|
||||
}
|
||||
private Post InsertPostToDatabaseAndReturn(string id, string postName =
|
||||
"test", PostType postType = PostType.SoftInstaller, double salary = 10, bool isActual
|
||||
= true, DateTime? changeDate = null)
|
||||
{
|
||||
var post = new Post()
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
PostId = id,
|
||||
PostName = postName,
|
||||
PostType = postType,
|
||||
Salary = salary,
|
||||
IsActual = isActual,
|
||||
ChangeDate = changeDate ?? DateTime.UtcNow
|
||||
};
|
||||
SmallSoftwareDbContext.Posts.Add(post);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return post;
|
||||
}
|
||||
private static void AssertElement(PostDataModel? actual, Post expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
|
||||
@@ -4,6 +4,7 @@ using SmallSoftwareContracts.Enums;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareDatabase.Implementations;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SmallSoftwareTests.StoragesContracts;
|
||||
@@ -25,17 +26,17 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Requests\" CASCADE; ");
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Workers\" CASCADE; ");
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Softwares\" CASCADE; ");
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Manufacturers\" CASCADE;");
|
||||
SmallSoftwareDbContext.RemoveRequestsFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveSalariesFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 5, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "", 10, installationRequests: [(_software.Id, 10, 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);
|
||||
Assert.That(list, Has.Count.EqualTo(3));
|
||||
@@ -51,10 +52,10 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetList_ByPeriod_Test()
|
||||
{
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests: [(_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);
|
||||
@@ -64,12 +65,12 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetList_ByWorkerId_Test()
|
||||
{
|
||||
var worker = InsertWorkerToDatabaseAndReturn("Other worker");
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests:
|
||||
[(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests:
|
||||
[(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(worker.Id, "", 1, installationRequests:
|
||||
[(_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));
|
||||
var list = _requesttStorageContract.GetList(workerId: _worker.Id);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(2));
|
||||
@@ -80,13 +81,13 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetList_BySoftwareId_Test()
|
||||
{
|
||||
var software = InsertSoftwareToDatabaseAndReturn("Other name");
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests:
|
||||
[(_software.Id, 5, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests:
|
||||
[(_software.Id, 1, 1.2), (software.Id, 4, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests:
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
||||
[(_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)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares:
|
||||
[(software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, installationRequests:
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares:
|
||||
[(software.Id, 1, 1.2), (_software.Id, 1, 1.2)]);
|
||||
var list = _requesttStorageContract.GetList(softwareId: _software.Id);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
@@ -99,13 +100,13 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
var worker = InsertWorkerToDatabaseAndReturn("Other worker");
|
||||
var software = InsertSoftwareToDatabaseAndReturn("Other name");
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(worker.Id, "", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, installationRequests: [(software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests: [(software.Id, 1, 1.2)]);
|
||||
InsertRequestToDatabaseAndReturn(worker.Id, "", 1, installationRequests: [(_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);
|
||||
@@ -115,45 +116,45 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
installationRequests: [(_software.Id, 1, 1.2)]);
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
AssertElement(_requesttStorageContract.GetElementById(request.Id), request);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenNoRecord_Test()
|
||||
{
|
||||
InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, installationRequests:
|
||||
[(_software.Id, 1, 1.2)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
||||
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
||||
Assert.That(() =>
|
||||
_requesttStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenRecordHasCanceled_Test()
|
||||
{
|
||||
var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
installationRequests: [(_software.Id, 1, 1.2)], isCancel: true);
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
softwares: [(_software.Id, 1, 1.2)], isCancel: true);
|
||||
AssertElement(_requesttStorageContract.GetElementById(request.Id), request);
|
||||
}
|
||||
[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()
|
||||
{
|
||||
var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
installationRequests: [(_software.Id, 1, 1.2)], isCancel: false);
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
softwares: [(_software.Id, 1, 1.2)], isCancel: false);
|
||||
_requesttStorageContract.DelElement(request.Id);
|
||||
var element = GetRequestFromDatabaseById(request.Id);
|
||||
Assert.Multiple(() =>
|
||||
@@ -172,8 +173,8 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_DelElement_WhenRecordWasCanceled_Test()
|
||||
{
|
||||
var request = InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
installationRequests: [(_software.Id, 1, 1.2)], isCancel: true);
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
||||
softwares: [(_software.Id, 1, 1.2)], isCancel: true);
|
||||
Assert.That(() => _requesttStorageContract.DelElement(request.Id),
|
||||
Throws.TypeOf<ElementDeletedException>());
|
||||
}
|
||||
@@ -219,36 +220,6 @@ internal class RequestStorageContractTests : BaseStorageContractTest
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return software;
|
||||
}
|
||||
private Request InsertRequestToDatabaseAndReturn(string workerId, string email,
|
||||
double sum = 1, bool isCancel = false, List<(string, int, double)>? installationRequests = null)
|
||||
{
|
||||
var request = new Request()
|
||||
{
|
||||
WorkerId = workerId,
|
||||
Email = email,
|
||||
Sum = sum,
|
||||
IsCancel = isCancel,
|
||||
InstallationRequests = []
|
||||
|
||||
};
|
||||
if (installationRequests is not null)
|
||||
{
|
||||
foreach (var elem in installationRequests)
|
||||
{
|
||||
request.InstallationRequests.Add(new InstallationRequest
|
||||
{
|
||||
SoftwareId =
|
||||
elem.Item1,
|
||||
RequestId = request.Id,
|
||||
Count = elem.Item2,
|
||||
Price = elem.Item3
|
||||
});
|
||||
}
|
||||
}
|
||||
SmallSoftwareDbContext.Requests.Add(request);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return request;
|
||||
}
|
||||
private static void AssertElement(RequestDataModel? actual, Request expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
@@ -279,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, sum, 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);
|
||||
@@ -298,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(() =>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareDatabase.Implementations;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -25,16 +26,15 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Salaries\" CASCADE; ");
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Workers\" CASCADE; ");
|
||||
SmallSoftwareDbContext.RemoveSalariesFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var salary = InsertSalaryToDatabaseAndReturn(_worker.Id,
|
||||
workerSalary: 100);
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
var salary = SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, workerSalary: 1);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
||||
10), DateTime.UtcNow.AddDays(10));
|
||||
Assert.That(list, Is.Not.Null);
|
||||
@@ -52,17 +52,17 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetList_OnlyInDatePeriod_Test()
|
||||
{
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-2));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-1).AddMinutes(-5));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(1).AddMinutes(5));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-2));
|
||||
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
||||
1), DateTime.UtcNow.AddDays(1));
|
||||
@@ -76,9 +76,9 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetList_ByWorker_Test()
|
||||
{
|
||||
var worker = InsertWorkerToDatabaseAndReturn("name 2");
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
InsertSalaryToDatabaseAndReturn(worker.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id);
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id);
|
||||
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
||||
1), DateTime.UtcNow.AddDays(1), _worker.Id);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
@@ -92,17 +92,17 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetList_ByWorkerOnlyInDatePeriod_Test()
|
||||
{
|
||||
var worker = InsertWorkerToDatabaseAndReturn("name 2");
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-2));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
||||
InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-1).AddMinutes(5));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
||||
InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(1).AddMinutes(-5));
|
||||
InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(_worker.Id, salaryDate:
|
||||
DateTime.UtcNow.AddDays(-2));
|
||||
var list = _salaryStorageContract.GetList(DateTime.UtcNow.AddDays(-
|
||||
1), DateTime.UtcNow.AddDays(1), _worker.Id);
|
||||
@@ -134,20 +134,7 @@ internal class SalaryStorageContractTests : BaseStorageContractTest
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return worker;
|
||||
}
|
||||
private Salary InsertSalaryToDatabaseAndReturn(string workerId, double
|
||||
workerSalary = 1, DateTime? salaryDate = null)
|
||||
{
|
||||
var salary = new Salary()
|
||||
{
|
||||
WorkerId = workerId,
|
||||
WorkerSalary =
|
||||
workerSalary,
|
||||
SalaryDate = salaryDate ?? DateTime.UtcNow
|
||||
};
|
||||
SmallSoftwareDbContext.Salaries.Add(salary);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return salary;
|
||||
}
|
||||
|
||||
private static void AssertElement(SalaryDataModel? actual, Salary expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
|
||||
@@ -4,6 +4,8 @@ using SmallSoftwareContracts.Enums;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareDatabase.Implementations;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using static NUnit.Framework.Internal.OSPlatform;
|
||||
|
||||
namespace SmallSoftwareTests.StoragesContracts;
|
||||
[TestFixture]
|
||||
@@ -11,34 +13,33 @@ internal class SoftwareStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
private SoftwareStorageContract _softwareStorageContract;
|
||||
private Manufacturer _manufacturer;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
public void SetUp()
|
||||
{
|
||||
_softwareStorageContract = new
|
||||
SoftwareStorageContract(SmallSoftwareDbContext);
|
||||
_manufacturer = InsertManufacturerToDatabaseAndReturn();
|
||||
_softwareStorageContract = new SoftwareStorageContract(SmallSoftwareDbContext);
|
||||
_manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Softwares\" CASCADE; ");
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Manufacturers\" CASCADE;");
|
||||
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id,
|
||||
"name 1");
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 2");
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 3");
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 1");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 2");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 3");
|
||||
var list = _softwareStorageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(3));
|
||||
AssertElement(list.First(x => x.Id == software.Id), software);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetList_WhenNoRecords_Test()
|
||||
{
|
||||
@@ -46,15 +47,13 @@ public void SetUp()
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Is.Empty);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetList_OnlyActual_Test()
|
||||
{
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 1", isDeleted: true);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 2", isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 3", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 2", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 3", isDeleted: false);
|
||||
var list = _softwareStorageContract.GetList(onlyActive: true);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
@@ -63,15 +62,13 @@ public void SetUp()
|
||||
Assert.That(!list.Any(x => x.IsDeleted));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetList_IncludeNoActual_Test()
|
||||
{
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 1", isDeleted: true);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 2", isDeleted: true);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 3", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 2", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 3", isDeleted: false);
|
||||
var list = _softwareStorageContract.GetList(onlyActive: false);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
@@ -81,357 +78,250 @@ public void SetUp()
|
||||
Assert.That(list.Count(x => !x.IsDeleted), Is.EqualTo(1));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetList_ByManufacturer_Test()
|
||||
{
|
||||
var manufacruer = InsertManufacturerToDatabaseAndReturn("name 2");
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 1", isDeleted: true);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 2", isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
manufacruer.Id, "name 3", isDeleted: false);
|
||||
var list = _softwareStorageContract.GetList(manufacturerId:
|
||||
_manufacturer.Id, onlyActive: false);
|
||||
var manufacruer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 2", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacruer.Id, softwareName: "name 3", isDeleted: false);
|
||||
var list = _softwareStorageContract.GetList(manufacturerId: _manufacturer.Id, onlyActive: false);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(list, Has.Count.EqualTo(2));
|
||||
Assert.That(list.All(x => x.ManufacturerId ==
|
||||
_manufacturer.Id));
|
||||
Assert.That(list.All(x => x.ManufacturerId == _manufacturer.Id));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetList_ByManufacturerOnlyActual_Test()
|
||||
{
|
||||
var manufacruer = InsertManufacturerToDatabaseAndReturn("name 2");
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 1", isDeleted: true);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name 2", isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
manufacruer.Id, "name 3", isDeleted: false);
|
||||
var list = _softwareStorageContract.GetList(manufacturerId:
|
||||
_manufacturer.Id, onlyActive: true);
|
||||
var manufacruer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 2", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacruer.Id, softwareName: "name 3", isDeleted: false);
|
||||
var list = _softwareStorageContract.GetList(manufacturerId: _manufacturer.Id, onlyActive: true);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(list, Has.Count.EqualTo(1));
|
||||
Assert.That(list.All(x => x.ManufacturerId == _manufacturer.Id
|
||||
&& !x.IsDeleted));
|
||||
Assert.That(list.All(x => x.ManufacturerId == _manufacturer.Id && !x.IsDeleted));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetHistoryBySoftwareId_WhenHaveRecords_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id,
|
||||
"name 1");
|
||||
InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20,
|
||||
DateTime.UtcNow.AddDays(-1));
|
||||
InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30,
|
||||
DateTime.UtcNow.AddMinutes(-10));
|
||||
InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40,
|
||||
DateTime.UtcNow.AddDays(1));
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id);
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20, DateTime.UtcNow.AddDays(-1));
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30, DateTime.UtcNow.AddMinutes(-10));
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40, DateTime.UtcNow.AddDays(1));
|
||||
var list = _softwareStorageContract.GetHistoryBySoftwareId(software.Id);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(3));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetHistoryBySoftwareId_WhenNoRecords_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id,
|
||||
"name 1");
|
||||
InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20,
|
||||
DateTime.UtcNow.AddDays(-1));
|
||||
InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30,
|
||||
DateTime.UtcNow.AddMinutes(-10));
|
||||
InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40,
|
||||
DateTime.UtcNow.AddDays(1));
|
||||
var list =
|
||||
_softwareStorageContract.GetHistoryBySoftwareId(Guid.NewGuid().ToString());
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id);
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20, DateTime.UtcNow.AddDays(-1));
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30, DateTime.UtcNow.AddMinutes(-10));
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40, DateTime.UtcNow.AddDays(1));
|
||||
var list = _softwareStorageContract.GetHistoryBySoftwareId(Guid.NewGuid().ToString());
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id);
|
||||
AssertElement(_softwareStorageContract.GetElementById(software.Id),
|
||||
software);
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id);
|
||||
AssertElement(_softwareStorageContract.GetElementById(software.Id), software);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenNoRecord_Test()
|
||||
{
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id);
|
||||
Assert.That(() =>
|
||||
_softwareStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id);
|
||||
Assert.That(() => _softwareStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenRecordHasDeleted_Test()
|
||||
public void Try_GetElementById_WhenRecordWasDeleted_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id,
|
||||
isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.GetElementById(software.Id),
|
||||
Is.Null);
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.GetElementById(software.Id), Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementByName_WhenHaveRecord_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id);
|
||||
AssertElement(_softwareStorageContract.GetElementByName(software.SoftwareName)
|
||||
, software);
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id);
|
||||
AssertElement(_softwareStorageContract.GetElementByName(software.SoftwareName), software);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementByName_WhenNoRecord_Test()
|
||||
{
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id);
|
||||
Assert.That(() => _softwareStorageContract.GetElementByName("name"),
|
||||
Is.Null);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id);
|
||||
Assert.That(() => _softwareStorageContract.GetElementByName("name"), Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementByName_WhenRecordHasDeleted_Test()
|
||||
public void Try_GetElementByName_WhenRecordWasDeleted_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id,
|
||||
isDeleted: true);
|
||||
Assert.That(() =>
|
||||
_softwareStorageContract.GetElementById(software.SoftwareName), Is.Null);
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.GetElementById(software.SoftwareName), Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, isDeleted: false);
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, isDeleted: false);
|
||||
_softwareStorageContract.AddElement(software);
|
||||
AssertElement(GetSoftwareFromDatabaseById(software.Id), software);
|
||||
AssertElement(SmallSoftwareDbContext.GetSoftwareFromDatabaseById(software.Id), software);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_WhenIsDeletedIsTrue_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software),
|
||||
Throws.Nothing);
|
||||
AssertElement(GetSoftwareFromDatabaseById(software.Id),
|
||||
CreateModel(software.Id, _manufacturer.Id, isDeleted: false));
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software), Throws.Nothing);
|
||||
AssertElement(SmallSoftwareDbContext.GetSoftwareFromDatabaseById(software.Id), CreateModel(software.Id, _manufacturer.Id, isDeleted: false));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id);
|
||||
InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id,
|
||||
softwareName: "name unique");
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, software.Id, softwareName: "name unique");
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software), Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_WhenHaveRecordWithSameName_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name unique", isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, softwareName: software.SoftwareName, isDeleted: false);
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, "name unique", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: software.SoftwareName, isDeleted: false);
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software), Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_WhenHaveRecordWithSameNameButOneWasDeleted_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name unique", isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, softwareName: software.SoftwareName, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software),
|
||||
Throws.Nothing);
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, "name unique", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: software.SoftwareName, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.AddElement(software), Throws.Nothing);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id,
|
||||
isDeleted: false);
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, id: software.Id, isDeleted: false);
|
||||
_softwareStorageContract.UpdElement(software);
|
||||
AssertElement(GetSoftwareFromDatabaseById(software.Id), software);
|
||||
AssertElement(SmallSoftwareDbContext.GetSoftwareFromDatabaseById(software.Id), software);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_WhenIsDeletedIsTrue_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, isDeleted: true);
|
||||
InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id,
|
||||
isDeleted: false);
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, software.Id, isDeleted: false);
|
||||
_softwareStorageContract.UpdElement(software);
|
||||
AssertElement(GetSoftwareFromDatabaseById(software.Id),
|
||||
CreateModel(software.Id, _manufacturer.Id, isDeleted: false));
|
||||
AssertElement(SmallSoftwareDbContext.GetSoftwareFromDatabaseById(software.Id), CreateModel(software.Id, _manufacturer.Id, isDeleted: false));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
|
||||
{
|
||||
Assert.That(() =>
|
||||
_softwareStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id)), Throws.TypeOf<ElementNotFoundException>());
|
||||
Assert.That(() => _softwareStorageContract.UpdElement(CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id)), Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_WhenHaveRecordWithSameName_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name unique", isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id,
|
||||
softwareName: "name");
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, softwareName: software.SoftwareName);
|
||||
Assert.That(() => _softwareStorageContract.UpdElement(software),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, "name unique", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, software.Id, softwareName: "name");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: software.SoftwareName);
|
||||
Assert.That(() => _softwareStorageContract.UpdElement(software), Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void
|
||||
Try_UpdElement_WhenHaveRecordWithSameNameButOneWasDeleted_Test()
|
||||
public void Try_UpdElement_WhenHaveRecordWithSameNameButOneWasDeleted_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, "name unique", isDeleted: false);
|
||||
InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id,
|
||||
softwareName: "name");
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id, softwareName: software.SoftwareName, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.UpdElement(software),
|
||||
Throws.Nothing);
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id, "name unique", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, software.Id, softwareName: "name");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: software.SoftwareName, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.UpdElement(software), Throws.Nothing);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_WhenRecordWasDeleted_Test()
|
||||
{
|
||||
var software = CreateModel(Guid.NewGuid().ToString(),
|
||||
_manufacturer.Id);
|
||||
InsertSoftwareToDatabaseAndReturn(software.Id, _manufacturer.Id,
|
||||
isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.UpdElement(software),
|
||||
Throws.TypeOf<ElementNotFoundException>());
|
||||
var software = CreateModel(Guid.NewGuid().ToString(), _manufacturer.Id);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, software.Id, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.UpdElement(software), Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_DelElement_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id,
|
||||
isDeleted: false);
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, isDeleted: false);
|
||||
_softwareStorageContract.DelElement(software.Id);
|
||||
var element = GetSoftwareFromDatabaseById(software.Id);
|
||||
var element = SmallSoftwareDbContext.GetSoftwareFromDatabaseById(software.Id);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(element, Is.Not.Null);
|
||||
Assert.That(element!.IsDeleted);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_DelElement_WhenNoRecordWithThisId_Test()
|
||||
{
|
||||
Assert.That(() =>
|
||||
_softwareStorageContract.DelElement(Guid.NewGuid().ToString()),
|
||||
Throws.TypeOf<ElementNotFoundException>());
|
||||
Assert.That(() => _softwareStorageContract.DelElement(Guid.NewGuid().ToString()), Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_DelElement_WhenRecordWasDeleted_Test()
|
||||
{
|
||||
var software =
|
||||
InsertSoftwareToDatabaseAndReturn(Guid.NewGuid().ToString(), _manufacturer.Id,
|
||||
isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.DelElement(software.Id),
|
||||
Throws.TypeOf<ElementNotFoundException>());
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, isDeleted: true);
|
||||
Assert.That(() => _softwareStorageContract.DelElement(software.Id), Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
private Manufacturer InsertManufacturerToDatabaseAndReturn(string
|
||||
manufacturerName = "name")
|
||||
{
|
||||
var manufacrurer = new Manufacturer()
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
ManufacturerName = manufacturerName
|
||||
};
|
||||
SmallSoftwareDbContext.Manufacturers.Add(manufacrurer);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return manufacrurer;
|
||||
}
|
||||
private Software InsertSoftwareToDatabaseAndReturn(string id, string
|
||||
manufacturerId, string softwareName = "test", SoftwareType softwareType =
|
||||
SoftwareType.Windows, double price = 1, bool isDeleted = false)
|
||||
{
|
||||
var software = new Software()
|
||||
{
|
||||
Id = id,
|
||||
ManufacturerId =
|
||||
manufacturerId,
|
||||
SoftwareName = softwareName,
|
||||
SoftwareType = softwareType,
|
||||
Price =
|
||||
price,
|
||||
IsDeleted = isDeleted
|
||||
};
|
||||
SmallSoftwareDbContext.Softwares.Add(software);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return software;
|
||||
}
|
||||
private SoftwareHistory InsertSoftwareHistoryToDatabaseAndReturn(string
|
||||
softwareId, double price, DateTime changeDate)
|
||||
{
|
||||
var softwareHistory = new SoftwareHistory()
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
SoftwareId = softwareId,
|
||||
OldPrice = price,
|
||||
ChangeDate =
|
||||
changeDate
|
||||
};
|
||||
SmallSoftwareDbContext.SoftwareHistories.Add(softwareHistory);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return softwareHistory;
|
||||
}
|
||||
private static void AssertElement(SoftwareDataModel? actual, Software
|
||||
expected)
|
||||
|
||||
private static void AssertElement(SoftwareDataModel? actual, Software expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.ManufacturerId,
|
||||
Is.EqualTo(expected.ManufacturerId));
|
||||
Assert.That(actual.SoftwareName,
|
||||
Is.EqualTo(expected.SoftwareName));
|
||||
Assert.That(actual.SoftwareType,
|
||||
Is.EqualTo(expected.SoftwareType));
|
||||
Assert.That(actual.ManufacturerId, Is.EqualTo(expected.ManufacturerId));
|
||||
Assert.That(actual.SoftwareName, Is.EqualTo(expected.SoftwareName));
|
||||
Assert.That(actual.SoftwareType, Is.EqualTo(expected.SoftwareType));
|
||||
Assert.That(actual.Price, Is.EqualTo(expected.Price));
|
||||
Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted));
|
||||
});
|
||||
}
|
||||
private static SoftwareDataModel CreateModel(string id, string
|
||||
manufacturerId, string softwareName = "test", SoftwareType softwareType =
|
||||
SoftwareType.Windows, double price = 1, bool isDeleted = false)
|
||||
=> new(id, softwareName, softwareType, manufacturerId, price,
|
||||
isDeleted);
|
||||
private Software? GetSoftwareFromDatabaseById(string id) =>
|
||||
SmallSoftwareDbContext.Softwares.FirstOrDefault(x => x.Id == id);
|
||||
private static void AssertElement(Software? actual, SoftwareDataModel
|
||||
expected)
|
||||
|
||||
private static SoftwareDataModel CreateModel(string id, string manufacturerId, string softwareName = "test", SoftwareType softwareType = SoftwareType.Windows, double price = 1, bool isDeleted = false)
|
||||
=> new(id, softwareName, softwareType, manufacturerId, price, isDeleted);
|
||||
|
||||
private static void AssertElement(Software? actual, SoftwareDataModel expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.ManufacturerId,
|
||||
Is.EqualTo(expected.ManufacturerId));
|
||||
Assert.That(actual.SoftwareName,
|
||||
Is.EqualTo(expected.SoftwareName));
|
||||
Assert.That(actual.SoftwareType,
|
||||
Is.EqualTo(expected.SoftwareType));
|
||||
Assert.That(actual.ManufacturerId, Is.EqualTo(expected.ManufacturerId));
|
||||
Assert.That(actual.SoftwareName, Is.EqualTo(expected.SoftwareName));
|
||||
Assert.That(actual.SoftwareType, Is.EqualTo(expected.SoftwareType));
|
||||
Assert.That(actual.Price, Is.EqualTo(expected.Price));
|
||||
Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted));
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareDatabase.Implementations;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -24,19 +25,19 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.Database.ExecuteSqlRaw("TRUNCATE \"Workers\" CASCADE; ");
|
||||
|
||||
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
||||
}
|
||||
[Test]
|
||||
public void Try_GetList_WhenHaveRecords_Test()
|
||||
{
|
||||
var worker =
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1");
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2");
|
||||
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()
|
||||
@@ -49,11 +50,11 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetList_ByPostId_Test()
|
||||
{
|
||||
var postId = Guid.NewGuid().ToString();
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
postId);
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
postId);
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3");
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3");
|
||||
var list = _workerStorageContract.GetList(postId: postId);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(2));
|
||||
@@ -62,13 +63,13 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetList_ByBirthDate_Test()
|
||||
{
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
birthDate: DateTime.UtcNow.AddYears(-25));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
birthDate: DateTime.UtcNow.AddYears(-21));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
||||
birthDate: DateTime.UtcNow.AddYears(-20));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",
|
||||
birthDate: DateTime.UtcNow.AddYears(-19));
|
||||
var list = _workerStorageContract.GetList(fromBirthDate:
|
||||
DateTime.UtcNow.AddYears(-21).AddMinutes(-1), toBirthDate:
|
||||
@@ -79,13 +80,13 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetList_ByEmploymentDate_Test()
|
||||
{
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
employmentDate: DateTime.UtcNow.AddDays(-2));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
employmentDate: DateTime.UtcNow.AddDays(-1));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
||||
employmentDate: DateTime.UtcNow.AddDays(1));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",
|
||||
employmentDate: DateTime.UtcNow.AddDays(2));
|
||||
var list = _workerStorageContract.GetList(fromEmploymentDate:
|
||||
DateTime.UtcNow.AddDays(-1).AddMinutes(-1), toEmploymentDate:
|
||||
@@ -97,16 +98,16 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetList_ByAllParameters_Test()
|
||||
{
|
||||
var postId = Guid.NewGuid().ToString();
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 1",
|
||||
postId, birthDate: DateTime.UtcNow.AddYears(-25), employmentDate:
|
||||
DateTime.UtcNow.AddDays(-2));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 2",
|
||||
postId, birthDate: DateTime.UtcNow.AddYears(-22), employmentDate:
|
||||
DateTime.UtcNow.AddDays(-1));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 3",
|
||||
postId, birthDate: DateTime.UtcNow.AddYears(-21), employmentDate:
|
||||
DateTime.UtcNow.AddDays(-1));
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString(), "fio 4",
|
||||
birthDate: DateTime.UtcNow.AddYears(-20), employmentDate:
|
||||
DateTime.UtcNow.AddDays(1));
|
||||
var list = _workerStorageContract.GetList(postId: postId,
|
||||
@@ -121,7 +122,7 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var worker =
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
AssertElement(_workerStorageContract.GetElementById(worker.Id),
|
||||
worker);
|
||||
}
|
||||
@@ -135,7 +136,7 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_GetElementByFIO_WhenHaveRecord_Test()
|
||||
{
|
||||
var worker =
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
AssertElement(_workerStorageContract.GetElementByFIO(worker.FIO),
|
||||
worker);
|
||||
}
|
||||
@@ -156,7 +157,7 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
|
||||
{
|
||||
var worker = CreateModel(Guid.NewGuid().ToString());
|
||||
InsertWorkerToDatabaseAndReturn(worker.Id);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(worker.Id);
|
||||
Assert.That(() => _workerStorageContract.AddElement(worker),
|
||||
Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
@@ -164,7 +165,7 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_UpdElement_Test()
|
||||
{
|
||||
var worker = CreateModel(Guid.NewGuid().ToString(), "New Fio");
|
||||
InsertWorkerToDatabaseAndReturn(worker.Id);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(worker.Id);
|
||||
_workerStorageContract.UpdElement(worker);
|
||||
AssertElement(GetWorkerFromDatabase(worker.Id), worker);
|
||||
}
|
||||
@@ -179,15 +180,14 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_UpdElement_WhenNoRecordWasDeleted_Test()
|
||||
{
|
||||
var worker = CreateModel(Guid.NewGuid().ToString());
|
||||
InsertWorkerToDatabaseAndReturn(worker.Id, isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(worker.Id, isDeleted: true);
|
||||
Assert.That(() => _workerStorageContract.UpdElement(worker),
|
||||
Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
[Test]
|
||||
public void Try_DelElement_Test()
|
||||
{
|
||||
var worker =
|
||||
InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(Guid.NewGuid().ToString());
|
||||
_workerStorageContract.DelElement(worker.Id);
|
||||
var element = GetWorkerFromDatabase(worker.Id);
|
||||
Assert.That(element, Is.Not.Null);
|
||||
@@ -204,29 +204,10 @@ internal class WorkerStorageContractTests : BaseStorageContractTest
|
||||
public void Try_DelElement_WhenNoRecordWasDeleted_Test()
|
||||
{
|
||||
var worker = CreateModel(Guid.NewGuid().ToString());
|
||||
InsertWorkerToDatabaseAndReturn(worker.Id, isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(worker.Id, isDeleted: true);
|
||||
Assert.That(() => _workerStorageContract.DelElement(worker.Id),
|
||||
Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
private Worker InsertWorkerToDatabaseAndReturn(string id, string fio =
|
||||
"test", string? postId = null, DateTime? birthDate = null, DateTime?
|
||||
employmentDate = null, bool isDeleted = false)
|
||||
{
|
||||
var worker = new Worker()
|
||||
{
|
||||
Id = id,
|
||||
FIO = fio,
|
||||
PostId = postId ??
|
||||
Guid.NewGuid().ToString(),
|
||||
BirthDate = birthDate ?? DateTime.UtcNow.AddYears(-
|
||||
20),
|
||||
EmploymentDate = employmentDate ?? DateTime.UtcNow,
|
||||
IsDeleted = isDeleted
|
||||
};
|
||||
SmallSoftwareDbContext.Workers.Add(worker);
|
||||
SmallSoftwareDbContext.SaveChanges();
|
||||
return worker;
|
||||
}
|
||||
private static void AssertElement(WorkerDataModel? actual, Worker expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
using SmallSoftwareDatabase;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using Microsoft.AspNetCore.Mvc.Testing;
|
||||
using Microsoft.AspNetCore.TestHost;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Serilog;
|
||||
using SmallSoftwareWebApi;
|
||||
using System.Text.Json;
|
||||
using System.Text;
|
||||
|
||||
namespace SmallSoftwareTests.WebApiControllersApi;
|
||||
|
||||
internal class BaseWebApiControllerTest
|
||||
{
|
||||
private WebApplicationFactory<Program> _webApplication;
|
||||
protected SmallSoftwareDbContext SmallSoftwareDbContext { get; private set; }
|
||||
protected HttpClient HttpClient { get; private set; }
|
||||
|
||||
protected static readonly JsonSerializerOptions JsonSerializerOptions = new() { PropertyNameCaseInsensitive = true };
|
||||
[OneTimeSetUp]
|
||||
public void OneTimeSetUp()
|
||||
{
|
||||
_webApplication = new CustomWebApplicationFactory<Program>();
|
||||
HttpClient = _webApplication
|
||||
.WithWebHostBuilder(builder =>
|
||||
{
|
||||
builder.ConfigureTestServices(services =>
|
||||
{
|
||||
using var loggerFactory = new LoggerFactory();
|
||||
loggerFactory.AddSerilog(new LoggerConfiguration()
|
||||
.ReadFrom.Configuration(new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json")
|
||||
.Build())
|
||||
.CreateLogger());
|
||||
services.AddSingleton(loggerFactory);
|
||||
});
|
||||
})
|
||||
.CreateClient();
|
||||
var request = HttpClient.GetAsync("/login/user").GetAwaiter().GetResult();
|
||||
var data = request.Content.ReadAsStringAsync().GetAwaiter().GetResult();
|
||||
HttpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {data}");
|
||||
SmallSoftwareDbContext = _webApplication.Services.GetRequiredService<SmallSoftwareDbContext>();
|
||||
SmallSoftwareDbContext.Database.EnsureDeleted();
|
||||
SmallSoftwareDbContext.Database.EnsureCreated();
|
||||
}
|
||||
[OneTimeTearDown]
|
||||
public void OneTimeTearDown()
|
||||
{
|
||||
SmallSoftwareDbContext?.Database.EnsureDeleted();
|
||||
SmallSoftwareDbContext?.Dispose();
|
||||
HttpClient?.Dispose();
|
||||
_webApplication?.Dispose();
|
||||
}
|
||||
|
||||
protected static async Task<T?> GetModelFromResponseAsync<T>(HttpResponseMessage response) =>
|
||||
JsonSerializer.Deserialize<T>(await response.Content.ReadAsStringAsync(), JsonSerializerOptions);
|
||||
|
||||
protected static StringContent MakeContent(object model) =>
|
||||
new(JsonSerializer.Serialize(model), Encoding.UTF8, "application/json");
|
||||
}
|
||||
@@ -0,0 +1,357 @@
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System.Net;
|
||||
|
||||
namespace SmallSoftwareTests.WebApiControllersApi;
|
||||
|
||||
[TestFixture]
|
||||
internal class ManufacturerControllerTests : BaseWebApiControllerTest
|
||||
{
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 1");
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 3");
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync("/api/manufacturers");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<ManufacturerViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
});
|
||||
AssertElement(data.First(x => x.Id == manufacturer.Id), manufacturer);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync("/api/manufacturers");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<ManufacturerViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/manufacturers/{manufacturer.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await GetModelFromResponseAsync<ManufacturerViewModel>(response), manufacturer);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/manufacturers/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ByName_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/manufacturers/{manufacturer.ManufacturerName}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await GetModelFromResponseAsync<ManufacturerViewModel>(response), manufacturer);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ByName_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/manufacturers/New%20Name");
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ByOldName_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var oldName = "old name";
|
||||
var manufacturer = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(prevManufacturerName: oldName);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/manufacturers/{oldName}");
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await GetModelFromResponseAsync<ManufacturerViewModel>(response), manufacturer);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
var manufacturerModel = CreateModel();
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/manufacturers", MakeContent(manufacturerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
AssertElement(SmallSoftwareDbContext.GetManufacturerFromDatabase(manufacturerModel.Id!), manufacturerModel);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenHaveRecordWithSameId_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModel = CreateModel();
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/manufacturers", MakeContent(manufacturerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenHaveRecordWithSameName_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModel = CreateModel(manufacturerName: "unique name");
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: manufacturerModel.ManufacturerName!);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/manufacturers", MakeContent(manufacturerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModelWithIdIncorrect = new ManufacturerBindingModel { Id = "Id", ManufacturerName = "name" };
|
||||
var manufacturerModelWithNameIncorrect = new ManufacturerBindingModel { Id = Guid.NewGuid().ToString(), ManufacturerName = string.Empty };
|
||||
//Act
|
||||
var responseWithIdIncorrect = await HttpClient.PostAsync($"/api/manufacturers", MakeContent(manufacturerModelWithIdIncorrect));
|
||||
var responseWithNameIncorrect = await HttpClient.PostAsync($"/api/manufacturers", MakeContent(manufacturerModelWithNameIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithNameIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/manufacturers", 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/manufacturers", MakeContent(new { Data = "test", Position = 10 }));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModel = CreateModel();
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/manufacturers", MakeContent(manufacturerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
AssertElement(SmallSoftwareDbContext.GetManufacturerFromDatabase(manufacturerModel.Id!), manufacturerModel);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_CheckPrevNames_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModel1 = CreateModel(manufacturerName: "name 1");
|
||||
var manufacturerModel2 = CreateModel(id: manufacturerModel1.Id, manufacturerName: "name 2");
|
||||
var manufacturerModel3 = CreateModel(id: manufacturerModel1.Id, manufacturerName: "name 3");
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerModel1.Id);
|
||||
//Act
|
||||
await HttpClient.PutAsync($"/api/manufacturers", MakeContent(manufacturerModel1));
|
||||
await HttpClient.PutAsync($"/api/manufacturers", MakeContent(manufacturerModel2));
|
||||
await HttpClient.PutAsync($"/api/manufacturers", MakeContent(manufacturerModel3));
|
||||
//Assert
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
var entityModel = SmallSoftwareDbContext.GetManufacturerFromDatabase(manufacturerModel1.Id!);
|
||||
Assert.That(entityModel, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(entityModel.ManufacturerName, Is.EqualTo(manufacturerModel3.ManufacturerName));
|
||||
Assert.That(entityModel.PrevManufacturerName, Is.EqualTo(manufacturerModel2.ManufacturerName));
|
||||
Assert.That(entityModel.PrevPrevManufacturerName, Is.EqualTo(manufacturerModel1.ManufacturerName));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModel = CreateModel();
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/manufacturers", MakeContent(manufacturerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenHaveRecordWithSameName_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModel = CreateModel(manufacturerName: "unique name");
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerModel.Id);
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: manufacturerModel.ManufacturerName!);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/manufacturers", MakeContent(manufacturerModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerModelWithIdIncorrect = new ManufacturerBindingModel { Id = "Id", ManufacturerName = "name" };
|
||||
var manufacturerModelWithNameIncorrect = new ManufacturerBindingModel { Id = Guid.NewGuid().ToString(), ManufacturerName = string.Empty };
|
||||
//Act
|
||||
var responseWithIdIncorrect = await HttpClient.PutAsync($"/api/manufacturers", MakeContent(manufacturerModelWithIdIncorrect));
|
||||
var responseWithNameIncorrect = await HttpClient.PutAsync($"/api/manufacturers", MakeContent(manufacturerModelWithNameIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithNameIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/manufacturers", 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/manufacturers", MakeContent(new { Data = "test", Position = 10 }));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerId = Guid.NewGuid().ToString();
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerId);
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/manufacturers/{manufacturerId}");
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
Assert.That(SmallSoftwareDbContext.GetManufacturerFromDatabase(manufacturerId), Is.Null);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenHaveSoftwares_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacturerId = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn().Id;
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturerId);
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/manufacturers/{manufacturerId}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/manufacturers/{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/manufacturers/id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
private static void AssertElement(ManufacturerViewModel? actual, Manufacturer expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.ManufacturerName, Is.EqualTo(expected.ManufacturerName));
|
||||
Assert.That(actual.PrevManufacturerName, Is.EqualTo(expected.PrevManufacturerName));
|
||||
Assert.That(actual.PrevPrevManufacturerName, Is.EqualTo(expected.PrevPrevManufacturerName));
|
||||
});
|
||||
}
|
||||
|
||||
private static ManufacturerBindingModel CreateModel(string? id = null, string manufacturerName = "name")
|
||||
=> new()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
ManufacturerName = manufacturerName
|
||||
};
|
||||
|
||||
private static void AssertElement(Manufacturer? actual, ManufacturerBindingModel expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.ManufacturerName, Is.EqualTo(expected.ManufacturerName));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,471 @@
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.Enums;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System.Net;
|
||||
|
||||
namespace SmallSoftwareTests.WebApiControllersApi;
|
||||
|
||||
|
||||
[TestFixture]
|
||||
internal class PostControllerTests : BaseWebApiControllerTest
|
||||
{
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.RemovePostsFromDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetRecords_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postName: "name 1");
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postName: "name 2");
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postName: "name 3");
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync("/api/posts");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<PostViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
});
|
||||
AssertElement(data.First(x => x.Id == post.PostId), post);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetRecords_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync("/api/posts");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<ManufacturerViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetHistory_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postId = Guid.NewGuid().ToString();
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postName: "name 1", isActual: true);
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posthistory/{postId}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<PostViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
});
|
||||
AssertElement(data.First(x => x.Id == post.PostId), post);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetHistory_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postId = Guid.NewGuid().ToString();
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postName: "name 1", isActual: true);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: true);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postId, "name 2", isActual: false);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posthistory/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await GetModelFromResponseAsync<List<PostViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetHistory_WhenWrongData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posthistory/id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posts/{post.PostId}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await GetModelFromResponseAsync<PostViewModel>(response), post);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posts/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenRecordWasDeleted_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(isActual: false);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posts/{post.PostId}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ByName_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posts/{post.PostName}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await GetModelFromResponseAsync<PostViewModel>(response), post);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ByName_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posts/New%20Name");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ByName_WhenRecordWasDeleted_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(isActual: false);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/posts/{post.PostName}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
var postModel = CreateModel();
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/posts", MakeContent(postModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
AssertElement(SmallSoftwareDbContext.GetPostFromDatabaseByPostId(postModel.Id!), postModel);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenHaveRecordWithSameId_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModel = CreateModel();
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/posts", MakeContent(postModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenHaveRecordWithSameName_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModel = CreateModel(postName: "unique name");
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postName: postModel.PostName!);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/posts", MakeContent(postModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModelWithIdIncorrect = new PostBindingModel { Id = "Id", PostName = "name", PostType = PostType.Supervisor.ToString(), Salary = 10 };
|
||||
var postModelWithNameIncorrect = new PostBindingModel { Id = Guid.NewGuid().ToString(), PostName = string.Empty, PostType = PostType.Supervisor.ToString(), Salary = 10 };
|
||||
var postModelWithPostTypeIncorrect = new PostBindingModel { Id = Guid.NewGuid().ToString(), PostName = string.Empty, PostType = string.Empty, Salary = 10 };
|
||||
var postModelWithSalaryIncorrect = new PostBindingModel { Id = Guid.NewGuid().ToString(), PostName = string.Empty, PostType = PostType.Supervisor.ToString(), Salary = -10 };
|
||||
//Act
|
||||
var responseWithIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(postModelWithIdIncorrect));
|
||||
var responseWithNameIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(postModelWithNameIncorrect));
|
||||
var responseWithPostTypeIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(postModelWithPostTypeIncorrect));
|
||||
var responseWithSalaryIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(postModelWithSalaryIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithNameIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
Assert.That(responseWithPostTypeIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Type is incorrect");
|
||||
Assert.That(responseWithSalaryIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Salary is incorrect");
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/posts", 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/posts", MakeContent(new { Data = "test", Position = 10 }));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModel = CreateModel();
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/posts", MakeContent(postModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
AssertElement(SmallSoftwareDbContext.GetPostFromDatabaseByPostId(postModel.Id!), postModel);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModel = CreateModel();
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/posts", MakeContent(postModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenRecordWasDeleted_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModel = CreateModel();
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postModel.Id, isActual: false);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/posts", MakeContent(postModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenHaveRecordWithSameName_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModel = CreateModel(postName: "unique name");
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postModel.Id);
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(postName: postModel.PostName!);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/posts", MakeContent(postModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postModelWithIdIncorrect = new PostBindingModel { Id = "Id", PostName = "name", PostType = PostType.Supervisor.ToString(), Salary = 10 };
|
||||
var postModelWithNameIncorrect = new PostBindingModel { Id = Guid.NewGuid().ToString(), PostName = string.Empty, PostType = PostType.Supervisor.ToString(), Salary = 10 };
|
||||
var postModelWithPostTypeIncorrect = new PostBindingModel { Id = Guid.NewGuid().ToString(), PostName = string.Empty, PostType = string.Empty, Salary = 10 };
|
||||
var postModelWithSalaryIncorrect = new PostBindingModel { Id = Guid.NewGuid().ToString(), PostName = string.Empty, PostType = PostType.Supervisor.ToString(), Salary = -10 };
|
||||
//Act
|
||||
var responseWithIdIncorrect = await HttpClient.PutAsync($"/api/posts", MakeContent(postModelWithIdIncorrect));
|
||||
var responseWithNameIncorrect = await HttpClient.PutAsync($"/api/posts", MakeContent(postModelWithNameIncorrect));
|
||||
var responseWithPostTypeIncorrect = await HttpClient.PutAsync($"/api/posts", MakeContent(postModelWithPostTypeIncorrect));
|
||||
var responseWithSalaryIncorrect = await HttpClient.PutAsync($"/api/posts", MakeContent(postModelWithSalaryIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithNameIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
Assert.That(responseWithPostTypeIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Type is incorrect");
|
||||
Assert.That(responseWithSalaryIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Salary is incorrect");
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Put_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/posts", 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/posts", MakeContent(new { Data = "test", Position = 10 }));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postId = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn().PostId;
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/posts/{postId}");
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
Assert.That(SmallSoftwareDbContext.GetPostFromDatabaseByPostId(postId), Is.Null);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/posts/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenRecordWasDeleted_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postId = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(isActual: false).PostId;
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/posts/{postId}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/posts/id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Patch_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postId = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn(isActual: false).PostId;
|
||||
//Act
|
||||
var response = await HttpClient.PatchAsync($"/api/posts/{postId}", null);
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
Assert.That(SmallSoftwareDbContext.GetPostFromDatabaseByPostId(postId), Is.Not.Null);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Patch_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
||||
//Act
|
||||
var response = await HttpClient.PatchAsync($"/api/posts/{Guid.NewGuid()}", null);
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Patch_WhenRecordNotWasDeleted_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var postId = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn().PostId;
|
||||
//Act
|
||||
var response = await HttpClient.PatchAsync($"/api/posts/{postId}", null);
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
Assert.That(SmallSoftwareDbContext.GetPostFromDatabaseByPostId(postId), Is.Not.Null);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Patch_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PatchAsync($"/api/posts/id", null);
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
private static void AssertElement(PostViewModel? actual, Post expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.PostId));
|
||||
Assert.That(actual.PostName, Is.EqualTo(expected.PostName));
|
||||
Assert.That(actual.PostType, Is.EqualTo(expected.PostType.ToString()));
|
||||
Assert.That(actual.Salary, Is.EqualTo(expected.Salary));
|
||||
});
|
||||
}
|
||||
|
||||
private static PostBindingModel CreateModel(string? postId = null, string postName = "name", PostType postType = PostType.Supervisor, double salary = 10)
|
||||
=> new()
|
||||
{
|
||||
Id = postId ?? Guid.NewGuid().ToString(),
|
||||
PostName = postName,
|
||||
PostType = postType.ToString(),
|
||||
Salary = salary
|
||||
};
|
||||
|
||||
private static void AssertElement(Post? actual, PostBindingModel expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.PostId, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.PostName, Is.EqualTo(expected.PostName));
|
||||
Assert.That(actual.PostType.ToString(), Is.EqualTo(expected.PostType));
|
||||
Assert.That(actual.Salary, Is.EqualTo(expected.Salary));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,369 @@
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System.Net;
|
||||
|
||||
namespace SmallSoftwareTests.WebApiControllersApi;
|
||||
|
||||
[TestFixture]
|
||||
internal class RequestControllerTests : BaseWebApiControllerTest
|
||||
{
|
||||
private string _workerId;
|
||||
private string _manufacturerId;
|
||||
private string _softwareId;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_workerId = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn().Id;
|
||||
_manufacturerId = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn().Id;
|
||||
_softwareId = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId).Id;
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.RemoveRequestsFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(_softwareId, 10, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(_softwareId, 10, 1.1)]);
|
||||
|
||||
//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);
|
||||
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/requests/getrecords?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.OK));
|
||||
var data = await GetModelFromResponseAsync<List<RequestViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public async Task GetList_ByWorkerId_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "Other worker");
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id={_workerId}&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.OK));
|
||||
var data = await GetModelFromResponseAsync<List<RequestViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
Assert.That(data.All(x => x.WorkerId == _workerId));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_ByWorkerId_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "Other worker");
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id={worker.Id}&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.OK));
|
||||
var data = await GetModelFromResponseAsync<List<RequestViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_ByWorkerId_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id={_workerId}&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_ByWorkerId_WhenIdIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id=Id&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_BySoftwareId_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, softwareName: "Other name");
|
||||
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);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
Assert.That(data.All(x => x.Softwares.Any(y => y.SoftwareId == _softwareId)));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_BySoftwareId_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, softwareName: "Other software");
|
||||
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);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_BySoftwareId_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//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}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetList_BySoftwareId_WhenIdIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getsoftwarerecords?id=Id&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 GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test", sum: 10, true, softwares: [(_softwareId, 10, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getrecord/{request.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await GetModelFromResponseAsync<RequestViewModel>(response), request);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getrecord/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenRecordHasCanceled_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, softwares: [(_softwareId, 1, 1.2)], isCancel: true);
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getrecord/{request.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenIdIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.GetAsync($"/api/requests/getrecord/Id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var requestId = Guid.NewGuid().ToString();
|
||||
var requestModelWithIdIncorrect = new RequestBindingModel { Id = "Id", WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = 1.1 }] };
|
||||
var requestModelWithWorkerIdIncorrect = new RequestBindingModel { Id = requestId, WorkerId = "Id", Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = 1.1 }] };
|
||||
var requestModelWithBuyerIdIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = 1.1 }] };
|
||||
var requestModelWithSoftwaresIncorrect = new RequestBindingModel { Id = requestId, WorkerId = _workerId, Softwares = null };
|
||||
var requestModelWithSoftwareIdIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = "Id", Count = 10, Price = 1.1 }] };
|
||||
var requestModelWithCountIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId , Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = -10, Price = 1.1 }] };
|
||||
var requestModelWithPriceIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = -1.1 }] };
|
||||
//Act
|
||||
var responseWithIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithIdIncorrect));
|
||||
var responseWithWorkerIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithWorkerIdIncorrect));
|
||||
var responseWithBuyerIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithBuyerIdIncorrect));
|
||||
var responseWithSoftwaresIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithSoftwaresIncorrect));
|
||||
var responseWithSoftwareIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithSoftwareIdIncorrect));
|
||||
var responseWithCountIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithCountIncorrect));
|
||||
var responseWithPriceIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithPriceIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "WorkerId is incorrect");
|
||||
Assert.That(responseWithWorkerIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "WorkerId is incorrect");
|
||||
Assert.That(responseWithBuyerIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "BuyerId is incorrect");
|
||||
Assert.That(responseWithSoftwaresIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Softwares is incorrect");
|
||||
Assert.That(responseWithSoftwareIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "SoftwareId is incorrect");
|
||||
Assert.That(responseWithCountIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Count is incorrect");
|
||||
Assert.That(responseWithPriceIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Price is incorrect");
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Post_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/posts", 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/posts", MakeContent(new { Data = "test", Position = 10 }));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "email@mail.ru", 10, false, softwares: [(_softwareId, 5, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/{request.Id}");
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
||||
Assert.That(SmallSoftwareDbContext.GetRequestFromDatabaseById(request.Id)!.IsCancel);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "email@mail.ru", 10, false, softwares: [(_softwareId, 5, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenIsCanceled_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "email@mail.ru", 10, true, softwares: [(_softwareId, 5, 1.1)]);
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/{request.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Delete_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
|
||||
private static void AssertElement(RequestViewModel? actual, Request expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.WorkerFIO, Is.EqualTo(expected.Worker!.FIO));
|
||||
Assert.That(actual.IsCancel, Is.EqualTo(expected.IsCancel));
|
||||
});
|
||||
|
||||
if (expected.InstallationRequests is not null)
|
||||
{
|
||||
Assert.That(actual.Softwares, Is.Not.Null);
|
||||
Assert.That(actual.Softwares, Has.Count.EqualTo(expected.InstallationRequests.Count));
|
||||
for (int i = 0; i < actual.Softwares.Count; ++i)
|
||||
{
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Softwares[i].SoftwareId, Is.EqualTo(expected.InstallationRequests[i].SoftwareId));
|
||||
Assert.That(actual.Softwares[i].Count, Is.EqualTo(expected.InstallationRequests[i].Count));
|
||||
});
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.That(actual.Softwares, Is.Null);
|
||||
}
|
||||
}
|
||||
|
||||
private static RequestBindingModel CreateModel(string workerId, string softwareId, string? id = null, int count = 1, double price = 1.1)
|
||||
{
|
||||
var requestId = id ?? Guid.NewGuid().ToString();
|
||||
return new()
|
||||
{
|
||||
Id = requestId,
|
||||
WorkerId = workerId,
|
||||
Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = softwareId, Count = count, Price = price }]
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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,708 @@
|
||||
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.Enums;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
using SmallSoftwareDatabase.Models;
|
||||
using SmallSoftwareTests.Infrastructure;
|
||||
using System.Net;
|
||||
|
||||
namespace SmallSoftwareTests.WebApiControllersApi;
|
||||
|
||||
[TestFixture]
|
||||
internal class SoftwareControllerTests : BaseWebApiControllerTest
|
||||
{
|
||||
private string _manufacturerId;
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_manufacturerId =
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn().Id;
|
||||
}
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
||||
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 1");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 2");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 3");
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync("/api/softwares/getrecords?includeDeleted=false");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareViewModel>>(response);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
});
|
||||
AssertElement(data.First(x => x.Id == software.Id), software);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync("/api/softwares/getrecords?includeDeleted=false");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareViewModel>>(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.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 2", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 3", isDeleted: false);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync("/api/softwares/getrecords?includeDeleted=false");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareViewModel>>(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.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 2", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 3", isDeleted: false);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync("/api/softwares/getrecords?includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareViewModel>>(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_ByManufacturer_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacruer =
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 2", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacruer.Id,
|
||||
softwareName: "name 3", isDeleted: false);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getmanufacturerrecords?id={_manufacturerId}&includeDeleted=true");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(2));
|
||||
Assert.That(data.All(x => x.ManufacturerId ==
|
||||
_manufacturerId));
|
||||
});
|
||||
AssertElement(data.First(x => x.Id == software.Id), software);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_ByManufacturerOnlyActual_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var manufacruer =
|
||||
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 1", isDeleted: true);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: "name 2", isDeleted: false);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacruer.Id,
|
||||
softwareName: "name 3", isDeleted: false);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getmanufacturerrecords?id={_manufacturerId}&includeDeleted = false");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(data, Has.Count.EqualTo(1));
|
||||
Assert.That(data.All(x => x.ManufacturerId == _manufacturerId
|
||||
&& !x.IsDeleted));
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task GetList_ManufacturerIdIsNotGuid_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getmanufacturerrecords?id=id&includeDeleted=false");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetHistoryBySoftwareId_WhenHaveRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20,
|
||||
DateTime.UtcNow.AddDays(-1));
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30,
|
||||
DateTime.UtcNow.AddMinutes(-10));
|
||||
var history =
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40,
|
||||
DateTime.UtcNow.AddDays(1));
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/gethistory?id={software.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareHistoryViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(3));
|
||||
AssertElement(data[0], history);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetHistoryBySoftwareId_WhenNoRecords_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 20,
|
||||
DateTime.UtcNow.AddDays(-1));
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 30,
|
||||
DateTime.UtcNow.AddMinutes(-10));
|
||||
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software.Id, 40,
|
||||
DateTime.UtcNow.AddDays(1));
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/gethistory?id={Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
var data = await
|
||||
GetModelFromResponseAsync<List<SoftwareViewModel>>(response);
|
||||
Assert.That(data, Is.Not.Null);
|
||||
Assert.That(data, Has.Count.EqualTo(0));
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetHistoryBySoftwareId_SoftwareIdIsNotGuid_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/gethistory?id=id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getrecord/{software.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await
|
||||
GetModelFromResponseAsync<SoftwareViewModel>(response), software);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getrecord/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetElement_ById_WhenRecordWasDeleted_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, isDeleted:
|
||||
true);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getrecord/{software.Id}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ByName_WhenHaveRecord_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getrecord/{software.SoftwareName}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||
AssertElement(await
|
||||
GetModelFromResponseAsync<SoftwareViewModel>(response), software);
|
||||
}
|
||||
[Test]
|
||||
public async Task GetElement_ByName_WhenNoRecord_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getrecord/New%20Name");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task
|
||||
GetElement_ByName_WhenRecordWasDeleted_ShouldNotFound_Test()
|
||||
{
|
||||
//Arrange
|
||||
var software =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, isDeleted:
|
||||
true);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.GetAsync($"/api/softwares/getrecord/{software.SoftwareName}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NotFound));
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_ShouldSuccess_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
var softwareModel = CreateModel(_manufacturerId);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/softwares/register",
|
||||
MakeContent(softwareModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NoContent));
|
||||
AssertElement(SmallSoftwareDbContext.GetSoftwareFromDatabaseById(softwareModel.Id!), softwareModel);
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenHaveRecordWithSameId_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareModel = CreateModel(_manufacturerId);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/softwares/register",
|
||||
MakeContent(softwareModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenHaveRecordWithSameName_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareModel = CreateModel(_manufacturerId, softwareName: "unique name");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: softwareModel.SoftwareName!);
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/softwares/register",
|
||||
MakeContent(softwareModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareModelWithIdIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id = "Id",
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName = "name",
|
||||
Price = 100,
|
||||
SoftwareType = SoftwareType.Windows.ToString()
|
||||
};
|
||||
var softwareModelWithNameIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName = string.Empty,
|
||||
Price = 100,
|
||||
SoftwareType = SoftwareType.Windows.ToString()
|
||||
};
|
||||
var softwareModelWithSoftwareTypeIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName =
|
||||
"name",
|
||||
Price = 100,
|
||||
SoftwareType = string.Empty
|
||||
};
|
||||
var softwareModelWithPriceIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName =
|
||||
"name",
|
||||
Price = 0,
|
||||
SoftwareType = SoftwareType.Windows.ToString()
|
||||
};
|
||||
//Act
|
||||
var responseWithIdIncorrect = await
|
||||
HttpClient.PostAsync($"/api/softwares/register",
|
||||
MakeContent(softwareModelWithIdIncorrect));
|
||||
var responseWithNameIncorrect = await
|
||||
HttpClient.PostAsync($"/api/softwares/register",
|
||||
MakeContent(softwareModelWithNameIncorrect));
|
||||
var responseWithSoftwareTypeIncorrect = await
|
||||
HttpClient.PostAsync($"/api/softwares/register",
|
||||
MakeContent(softwareModelWithSoftwareTypeIncorrect));
|
||||
var responseWithPriceIncorrect = await
|
||||
HttpClient.PostAsync($"/api/softwares/register",
|
||||
MakeContent(softwareModelWithPriceIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithNameIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
Assert.That(responseWithSoftwareTypeIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
Assert.That(responseWithPriceIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task Post_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PostAsync($"/api/softwares/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/softwares/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 softwareModel = CreateModel(_manufacturerId);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareModel.Id);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NoContent));
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
AssertElement(SmallSoftwareDbContext.GetSoftwareFromDatabaseById(softwareModel.Id!), softwareModel);
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareModel = CreateModel(_manufacturerId);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenHaveRecordWithSameName_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareModel = CreateModel(_manufacturerId, softwareName: "unique name");
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, softwareModel.Id);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareName: softwareModel.SoftwareName!);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenRecordWasDeleted_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareModel = CreateModel(_manufacturerId);
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareModel.Id, isDeleted: true);
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModel));
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareModelWithIdIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id = "Id",
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName = "name",
|
||||
Price = 100,
|
||||
SoftwareType = SoftwareType.Windows.ToString()
|
||||
};
|
||||
var softwareModelWithNameIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName =
|
||||
string.Empty,
|
||||
Price = 100,
|
||||
SoftwareType = SoftwareType.Windows.ToString()
|
||||
};
|
||||
var softwareModelWithSoftwareTypeIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id = Guid.NewGuid().ToString(),
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName =
|
||||
"name",
|
||||
Price = 100,
|
||||
SoftwareType = string.Empty
|
||||
};
|
||||
var softwareModelWithPriceIncorrect = new SoftwareBindingModel
|
||||
{
|
||||
Id =
|
||||
Guid.NewGuid().ToString(),
|
||||
ManufacturerId = _manufacturerId,
|
||||
SoftwareName =
|
||||
"name",
|
||||
Price = 0,
|
||||
SoftwareType = SoftwareType.Windows.ToString()
|
||||
};
|
||||
//Act
|
||||
var responseWithIdIncorrect = await
|
||||
HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModelWithIdIncorrect));
|
||||
var responseWithNameIncorrect = await
|
||||
HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModelWithNameIncorrect));
|
||||
var responseWithSoftwareTypeIncorrect = await
|
||||
HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModelWithSoftwareTypeIncorrect));
|
||||
var responseWithPriceIncorrect = await
|
||||
HttpClient.PutAsync($"/api/softwares/changeinfo",
|
||||
MakeContent(softwareModelWithPriceIncorrect));
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(responseWithIdIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
|
||||
Assert.That(responseWithNameIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
Assert.That(responseWithSoftwareTypeIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
Assert.That(responseWithPriceIncorrect.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest), "Name is incorrect");
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task Put_WhenSendEmptyData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await HttpClient.PutAsync($"/api/softwares/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/softwares/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 softwareId = Guid.NewGuid().ToString();
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId,
|
||||
softwareId);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/softwares/delete/{softwareId}");
|
||||
SmallSoftwareDbContext.ChangeTracker.Clear();
|
||||
//Assert
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.NoContent));
|
||||
Assert.That(SmallSoftwareDbContext.GetSoftwareFromDatabaseById(softwareId)!.IsDeleted);
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId);
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/softwares/delete/{Guid.NewGuid()}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Delete_WhenRecordWasDeleted_ShouldBadRequest_Test()
|
||||
{
|
||||
//Arrange
|
||||
var softwareId =
|
||||
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, isDeleted:
|
||||
true).Id;
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/softwares/delete/{softwareId}");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
[Test]
|
||||
public async Task Delete_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
||||
{
|
||||
//Act
|
||||
var response = await
|
||||
HttpClient.DeleteAsync($"/api/softwares/delete/id");
|
||||
//Assert
|
||||
Assert.That(response.StatusCode,
|
||||
Is.EqualTo(HttpStatusCode.BadRequest));
|
||||
}
|
||||
private static void AssertElement(SoftwareViewModel? actual, Software expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.ManufacturerId,
|
||||
Is.EqualTo(expected.ManufacturerId));
|
||||
Assert.That(actual.SoftwareName,
|
||||
Is.EqualTo(expected.SoftwareName));
|
||||
Assert.That(actual.SoftwareType,
|
||||
Is.EqualTo(expected.SoftwareType.ToString()));
|
||||
Assert.That(actual.Price, Is.EqualTo(expected.Price));
|
||||
Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted));
|
||||
Assert.That(actual.ManufacturerName,
|
||||
Is.EqualTo(expected.Manufacturer!.ManufacturerName));
|
||||
});
|
||||
}
|
||||
private static void AssertElement(SoftwareHistoryViewModel? actual,
|
||||
SoftwareHistory expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.SoftwareName,
|
||||
Is.EqualTo(expected.Software!.SoftwareName));
|
||||
Assert.That(actual.OldPrice, Is.EqualTo(expected.OldPrice));
|
||||
Assert.That(actual.ChangeDate.ToString(),
|
||||
Is.EqualTo(expected.ChangeDate.ToString()));
|
||||
});
|
||||
}
|
||||
private static SoftwareBindingModel CreateModel(string manufacturerId,
|
||||
string? id = null, string softwareName = "name", SoftwareType softwareType =
|
||||
SoftwareType.Windows, double price = 1)
|
||||
=> new()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
ManufacturerId = manufacturerId,
|
||||
SoftwareName = softwareName,
|
||||
SoftwareType = softwareType.ToString(),
|
||||
Price = price
|
||||
};
|
||||
private static void AssertElement(Software? actual, SoftwareBindingModel
|
||||
expected)
|
||||
{
|
||||
Assert.That(actual, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.ManufacturerId,
|
||||
Is.EqualTo(expected.ManufacturerId));
|
||||
Assert.That(actual.SoftwareName,
|
||||
Is.EqualTo(expected.SoftwareName));
|
||||
Assert.That(actual.SoftwareType.ToString(),
|
||||
Is.EqualTo(expected.SoftwareType));
|
||||
Assert.That(actual.Price, Is.EqualTo(expected.Price));
|
||||
Assert.That(!actual.IsDeleted);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
18
SmallSoftwareProject/SmallSoftwareTests/appsettings.json
Normal file
18
SmallSoftwareProject/SmallSoftwareTests/appsettings.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"Serilog": {
|
||||
"Using": [ "Serilog.Sinks.File" ],
|
||||
"MinimumLevel": {
|
||||
"Default": "Information"
|
||||
},
|
||||
"WriteTo": [
|
||||
{
|
||||
"Name": "File",
|
||||
"Args": {
|
||||
"path": "../logs/smallsoftware-.log",
|
||||
"rollingInterval": "Day",
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} { CorrelationId } { Level:u3} { Username } { Message: lj} { Exception } { NewLine }"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
using AutoMapper;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Adapters;
|
||||
|
||||
public class ManufacturerAdapter : IManufacturerAdapter
|
||||
{
|
||||
private readonly IManufacturerBusinessLogicContract _manufacturerBusinessLogicContract;
|
||||
private readonly ILogger _logger;
|
||||
private readonly Mapper _mapper;
|
||||
public ManufacturerAdapter(IManufacturerBusinessLogicContract manufacturerBusinessLogicContract, ILogger<ManufacturerAdapter> logger)
|
||||
{
|
||||
_manufacturerBusinessLogicContract = manufacturerBusinessLogicContract;
|
||||
_logger = logger;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<ManufacturerBindingModel, ManufacturerDataModel>();
|
||||
cfg.CreateMap<ManufacturerDataModel, ManufacturerViewModel>();
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
public ManufacturerOperationResponse GetList()
|
||||
{
|
||||
try
|
||||
{
|
||||
return ManufacturerOperationResponse.OK([..
|
||||
_manufacturerBusinessLogicContract.GetAllManufacturers().Select(x =>
|
||||
_mapper.Map<ManufacturerViewModel>(x))]);
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return ManufacturerOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return
|
||||
ManufacturerOperationResponse.InternalServerError($"Error while working with data storage: { ex.InnerException!.Message} ");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
ManufacturerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public ManufacturerOperationResponse GetElement(string data)
|
||||
{
|
||||
try
|
||||
{
|
||||
return
|
||||
ManufacturerOperationResponse.OK(_mapper.Map<ManufacturerViewModel>(_manufacturerBusinessLogicContract.GetManufacturerByData(data)));
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return ManufacturerOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return ManufacturerOperationResponse.NotFound($"Not found element by data { data} ");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return
|
||||
ManufacturerOperationResponse.InternalServerError($"Error while working with data storage: { ex.InnerException!.Message} ");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
ManufacturerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public ManufacturerOperationResponse
|
||||
RegisterManufacturer(ManufacturerBindingModel manufacturerModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_manufacturerBusinessLogicContract.InsertManufacturer(_mapper.Map < ManufacturerDataModel > (manufacturerModel));
|
||||
return ManufacturerOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return ManufacturerOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return ManufacturerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message} ");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return ManufacturerOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return ManufacturerOperationResponse.BadRequest($"Error while working with data storage: { ex.InnerException!.Message} ");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
ManufacturerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public ManufacturerOperationResponse
|
||||
ChangeManufacturerInfo(ManufacturerBindingModel manufacturerModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_manufacturerBusinessLogicContract.UpdateManufacturer(_mapper.Map < ManufacturerDataModel > (manufacturerModel));
|
||||
return ManufacturerOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return ManufacturerOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return ManufacturerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return ManufacturerOperationResponse.BadRequest($"Not found element by Id { manufacturerModel.Id} ");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return ManufacturerOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return ManufacturerOperationResponse
|
||||
.BadRequest($"Error while working with data storage: { ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
ManufacturerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
public ManufacturerOperationResponse RemoveManufacturer(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
_manufacturerBusinessLogicContract.DeleteManufacturer(id);
|
||||
return ManufacturerOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return ManufacturerOperationResponse.BadRequest("Id is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return ManufacturerOperationResponse.BadRequest($"Incorrect data transmitted: { ex.Message} ");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return ManufacturerOperationResponse.BadRequest($"Not found element by id: { id} ");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return ManufacturerOperationResponse
|
||||
.BadRequest($"Error while working with data storage: { ex.InnerException!.Message} ");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return
|
||||
ManufacturerOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
269
SmallSoftwareProject/SmallSoftwareWebApi/Adapters/PostAdapter.cs
Normal file
269
SmallSoftwareProject/SmallSoftwareWebApi/Adapters/PostAdapter.cs
Normal file
@@ -0,0 +1,269 @@
|
||||
using AutoMapper;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Adapters;
|
||||
|
||||
public class PostAdapter : IPostAdapter
|
||||
{
|
||||
private readonly IPostBusinessLogicContract _postBusinessLogicContract;
|
||||
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly Mapper _mapper;
|
||||
|
||||
public PostAdapter(IPostBusinessLogicContract postBusinessLogicContract, ILogger<PostAdapter> logger)
|
||||
{
|
||||
_postBusinessLogicContract = postBusinessLogicContract;
|
||||
_logger = logger;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<PostBindingModel, PostDataModel>();
|
||||
cfg.CreateMap<PostDataModel, PostViewModel>();
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
|
||||
public PostOperationResponse GetList()
|
||||
{
|
||||
try
|
||||
{
|
||||
return PostOperationResponse
|
||||
.OK([.. _postBusinessLogicContract.GetAllPosts().Select(x => _mapper.Map<PostViewModel>(x))]);
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return PostOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return PostOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return PostOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public PostOperationResponse GetHistory(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
return PostOperationResponse.OK([.. _postBusinessLogicContract.GetAllDataOfPost(id).Select(x => _mapper.Map<PostViewModel>(x))]);
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return PostOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return PostOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return PostOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return PostOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public PostOperationResponse GetElement(string data)
|
||||
{
|
||||
try
|
||||
{
|
||||
return PostOperationResponse.OK(_mapper.Map<PostViewModel>(_postBusinessLogicContract.GetPostByData(data)));
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return PostOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return PostOperationResponse.NotFound($"Not found element by data {data}");
|
||||
}
|
||||
catch (ElementDeletedException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementDeletedException");
|
||||
return PostOperationResponse.BadRequest($"Element by data: {data} was deleted");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return PostOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return PostOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public PostOperationResponse RegisterPost(PostBindingModel postModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_postBusinessLogicContract.InsertPost(_mapper.Map<PostDataModel>(postModel));
|
||||
return PostOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return PostOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return PostOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return PostOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return PostOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return PostOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public PostOperationResponse ChangePostInfo(PostBindingModel postModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_postBusinessLogicContract.UpdatePost(_mapper.Map<PostDataModel>(postModel));
|
||||
return PostOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return PostOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return PostOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return PostOperationResponse.BadRequest($"Not found element by Id {postModel.Id}");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return PostOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (ElementDeletedException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementDeletedException");
|
||||
return PostOperationResponse.BadRequest($"Element by id: {postModel.Id} was deleted");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return PostOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return PostOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public PostOperationResponse RemovePost(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
_postBusinessLogicContract.DeletePost(id);
|
||||
return PostOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return PostOperationResponse.BadRequest("Id is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return PostOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return PostOperationResponse.BadRequest($"Not found element by id: {id}");
|
||||
}
|
||||
catch (ElementDeletedException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementDeletedException");
|
||||
return PostOperationResponse.BadRequest($"Element by id: {id} was deleted");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return PostOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return PostOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public PostOperationResponse RestorePost(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
_postBusinessLogicContract.RestorePost(id);
|
||||
return PostOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return PostOperationResponse.BadRequest("Id is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return PostOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return PostOperationResponse.BadRequest($"Not found element by id: {id}");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return PostOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return PostOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
using AutoMapper;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Adapters;
|
||||
|
||||
public class RequestAdapter : IRequestAdapter
|
||||
{
|
||||
private readonly IRequestBusinessLogicContract _requestBusinessLogicContract;
|
||||
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly Mapper _mapper;
|
||||
|
||||
public RequestAdapter(IRequestBusinessLogicContract requestBusinessLogicContract, ILogger<RequestAdapter> logger)
|
||||
{
|
||||
_requestBusinessLogicContract = requestBusinessLogicContract;
|
||||
_logger = logger;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<RequestBindingModel, RequestDataModel>();
|
||||
cfg.CreateMap<RequestDataModel, RequestViewModel>();
|
||||
cfg.CreateMap<InstallationRequestBindingModel, InstallationRequestDataModel>();
|
||||
cfg.CreateMap<InstallationRequestDataModel, InstallationRequestViewModel>();
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
|
||||
public RequestOperationResponse GetList(DateTime fromDate, DateTime toDate)
|
||||
{
|
||||
try
|
||||
{
|
||||
return RequestOperationResponse.OK([.. _requestBusinessLogicContract.GetAllRequestsByPeriod(fromDate, toDate).Select(x => _mapper.Map<RequestViewModel>(x))]);
|
||||
}
|
||||
catch (IncorrectDatesException ex)
|
||||
{
|
||||
_logger.LogError(ex, "IncorrectDatesException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect dates: {ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return RequestOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return RequestOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return RequestOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public RequestOperationResponse GetWorkerList(string id, DateTime fromDate, DateTime toDate)
|
||||
{
|
||||
try
|
||||
{
|
||||
return RequestOperationResponse.OK([.. _requestBusinessLogicContract.GetAllRequestsByWorkerByPeriod(id, fromDate, toDate).Select(x => _mapper.Map<RequestViewModel>(x))]);
|
||||
}
|
||||
catch (IncorrectDatesException ex)
|
||||
{
|
||||
_logger.LogError(ex, "IncorrectDatesException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect dates: {ex.Message}");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return RequestOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return RequestOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return RequestOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public RequestOperationResponse GetSoftwareList(string id, DateTime fromDate, DateTime toDate)
|
||||
{
|
||||
try
|
||||
{
|
||||
return RequestOperationResponse.OK([.. _requestBusinessLogicContract.GetAllRequestsBySoftwareByPeriod(id, fromDate, toDate).Select(x => _mapper.Map<RequestViewModel>(x))]);
|
||||
}
|
||||
catch (IncorrectDatesException ex)
|
||||
{
|
||||
_logger.LogError(ex, "IncorrectDatesException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect dates: {ex.Message}");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return RequestOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return RequestOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return RequestOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public RequestOperationResponse GetElement(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
return RequestOperationResponse.OK(_mapper.Map<RequestViewModel>(_requestBusinessLogicContract.GetRequestByData(id)));
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return RequestOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return RequestOperationResponse.NotFound($"Not found element by data {id}");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return RequestOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return RequestOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public RequestOperationResponse MakeRequest(RequestBindingModel requestModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
var data = _mapper.Map<RequestDataModel>(requestModel);
|
||||
_requestBusinessLogicContract.InsertRequest(_mapper.Map<RequestDataModel>(requestModel));
|
||||
return RequestOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return RequestOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return RequestOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return RequestOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public RequestOperationResponse CancelRequest(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
_requestBusinessLogicContract.CancelRequest(id);
|
||||
return RequestOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return RequestOperationResponse.BadRequest("Id is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return RequestOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return RequestOperationResponse.BadRequest($"Not found element by id: {id}");
|
||||
}
|
||||
catch (ElementDeletedException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementDeletedException");
|
||||
return RequestOperationResponse.BadRequest($"Element by id: {id} was deleted");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return RequestOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return RequestOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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,266 @@
|
||||
using AutoMapper;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.AdapterContracts.OperationResponses;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
using SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
using SmallSoftwareContracts.DataModels;
|
||||
using SmallSoftwareContracts.Exceptions;
|
||||
using SmallSoftwareContracts.ViewModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Adapters;
|
||||
|
||||
public class SoftwareAdapter : ISoftwareAdapter
|
||||
{
|
||||
private readonly ISoftwareBusinessLogicContract _softwareBusinessLogicContract;
|
||||
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly Mapper _mapper;
|
||||
|
||||
public SoftwareAdapter(ISoftwareBusinessLogicContract softwareBusinessLogicContract, ILogger<SoftwareAdapter> logger)
|
||||
{
|
||||
_softwareBusinessLogicContract = softwareBusinessLogicContract;
|
||||
_logger = logger;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.CreateMap<SoftwareBindingModel, SoftwareDataModel>();
|
||||
cfg.CreateMap<SoftwareDataModel, SoftwareViewModel>();
|
||||
cfg.CreateMap<SoftwareHistoryDataModel, SoftwareHistoryViewModel>();
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
|
||||
public SoftwareOperationResponse GetList(bool includeDeleted)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SoftwareOperationResponse.OK([.. _softwareBusinessLogicContract.GetAllSoftwares(!includeDeleted).Select(x => _mapper.Map<SoftwareViewModel>(x))]);
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return SoftwareOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SoftwareOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SoftwareOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SoftwareOperationResponse GetManufacturerList(string id, bool includeDeleted)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SoftwareOperationResponse.OK([.. _softwareBusinessLogicContract.GetAllSoftwaresByManufacturer(id, !includeDeleted).Select(x => _mapper.Map<SoftwareViewModel>(x))]);
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return SoftwareOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return SoftwareOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return SoftwareOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SoftwareOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SoftwareOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SoftwareOperationResponse GetHistory(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SoftwareOperationResponse.OK([.. _softwareBusinessLogicContract.GetSoftwareHistoryBySoftware(id).Select(x => _mapper.Map<SoftwareHistoryViewModel>(x))]);
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return SoftwareOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (NullListException)
|
||||
{
|
||||
_logger.LogError("NullListException");
|
||||
return SoftwareOperationResponse.NotFound("The list is not initialized");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SoftwareOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SoftwareOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SoftwareOperationResponse GetElement(string data)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SoftwareOperationResponse.OK(_mapper.Map<SoftwareViewModel>(_softwareBusinessLogicContract.GetSoftwareByData(data)));
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return SoftwareOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return SoftwareOperationResponse.NotFound($"Not found element by data {data}");
|
||||
}
|
||||
catch (ElementDeletedException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementDeletedException");
|
||||
return SoftwareOperationResponse.BadRequest($"Element by data: {data} was deleted");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SoftwareOperationResponse.InternalServerError($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SoftwareOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SoftwareOperationResponse RegisterSoftware(SoftwareBindingModel softwareModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_softwareBusinessLogicContract.InsertSoftware(_mapper.Map<SoftwareDataModel>(softwareModel));
|
||||
return SoftwareOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return SoftwareOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return SoftwareOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return SoftwareOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SoftwareOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SoftwareOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SoftwareOperationResponse ChangeSoftwareInfo(SoftwareBindingModel softwareModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_softwareBusinessLogicContract.UpdateSoftware(_mapper.Map<SoftwareDataModel>(softwareModel));
|
||||
return SoftwareOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return SoftwareOperationResponse.BadRequest("Data is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return SoftwareOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return SoftwareOperationResponse.BadRequest($"Not found element by Id {softwareModel.Id}");
|
||||
}
|
||||
catch (ElementExistsException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementExistsException");
|
||||
return SoftwareOperationResponse.BadRequest(ex.Message);
|
||||
}
|
||||
catch (ElementDeletedException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementDeletedException");
|
||||
return SoftwareOperationResponse.BadRequest($"Element by id: {softwareModel.Id} was deleted");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SoftwareOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SoftwareOperationResponse.InternalServerError(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public SoftwareOperationResponse RemoveSoftware(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
_softwareBusinessLogicContract.DeleteSoftware(id);
|
||||
return SoftwareOperationResponse.NoContent();
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ArgumentNullException");
|
||||
return SoftwareOperationResponse.BadRequest("Id is empty");
|
||||
}
|
||||
catch (ValidationException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ValidationException");
|
||||
return SoftwareOperationResponse.BadRequest($"Incorrect data transmitted: {ex.Message}");
|
||||
}
|
||||
catch (ElementNotFoundException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementNotFoundException");
|
||||
return SoftwareOperationResponse.BadRequest($"Not found element by id: {id}");
|
||||
}
|
||||
catch (ElementDeletedException ex)
|
||||
{
|
||||
_logger.LogError(ex, "ElementDeletedException");
|
||||
return SoftwareOperationResponse.BadRequest($"Element by id: {id} was deleted");
|
||||
}
|
||||
catch (StorageException ex)
|
||||
{
|
||||
_logger.LogError(ex, "StorageException");
|
||||
return SoftwareOperationResponse.BadRequest($"Error while working with data storage: {ex.InnerException!.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception");
|
||||
return SoftwareOperationResponse.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
13
SmallSoftwareProject/SmallSoftwareWebApi/AuthOptions.cs
Normal file
13
SmallSoftwareProject/SmallSoftwareWebApi/AuthOptions.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using System.Text;
|
||||
|
||||
namespace SmallSoftwareWebApi;
|
||||
|
||||
public class AuthOptions
|
||||
{
|
||||
public const string ISSUER = "CatHasPaws_AuthServer"; // издатель токена
|
||||
public const string AUDIENCE = "CatHasPaws_AuthClient"; // потребитель токена
|
||||
const string KEY = "catsecret_secretsecretsecretkey!123"; // ключ для шифрации
|
||||
public static SymmetricSecurityKey GetSymmetricSecurityKey() => new(Encoding.UTF8.GetBytes(KEY));
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Controllers;
|
||||
[Authorize]
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
[Produces("application/json")]
|
||||
public class ManufacturersController(IManufacturerAdapter adapter) :
|
||||
ControllerBase
|
||||
{
|
||||
private readonly IManufacturerAdapter _adapter = adapter;
|
||||
[HttpGet]
|
||||
public IActionResult GetAllRecords()
|
||||
{
|
||||
return _adapter.GetList().GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet("{data}")]
|
||||
public IActionResult GetRecord(string data)
|
||||
{
|
||||
return _adapter.GetElement(data).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPost]
|
||||
public IActionResult Register([FromBody] ManufacturerBindingModel model)
|
||||
{
|
||||
return _adapter.RegisterManufacturer(model).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpPut]
|
||||
public IActionResult ChangeInfo([FromBody] ManufacturerBindingModel model)
|
||||
{
|
||||
return _adapter.ChangeManufacturerInfo(model).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpDelete("{id}")]
|
||||
public IActionResult Delete(string id)
|
||||
{
|
||||
return _adapter.RemoveManufacturer(id).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
|
||||
namespace SmallSoftwareWebApi.Controllers;
|
||||
[Authorize]
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
[Produces("application/json")]
|
||||
public class PostHistoryController(IPostAdapter adapter) : ControllerBase
|
||||
{
|
||||
private readonly IPostAdapter _adapter = adapter;
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetHistory(string id)
|
||||
{
|
||||
return _adapter.GetHistory(id).GetResponse(Request, Response);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
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]")]
|
||||
[ApiController]
|
||||
[Produces("application/json")]
|
||||
public class PostsController(IPostAdapter adapter) : ControllerBase
|
||||
{
|
||||
private readonly IPostAdapter _adapter = adapter;
|
||||
[HttpGet]
|
||||
public IActionResult GetRecords()
|
||||
{
|
||||
return _adapter.GetList().GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet("{data}")]
|
||||
public IActionResult GetRecord(string data)
|
||||
{
|
||||
return _adapter.GetElement(data).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPost]
|
||||
public IActionResult Register([FromBody] PostBindingModel model)
|
||||
{
|
||||
return _adapter.RegisterPost(model).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPut]
|
||||
public IActionResult ChangeInfo([FromBody] PostBindingModel model)
|
||||
{
|
||||
return _adapter.ChangePostInfo(model).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpDelete("{id}")]
|
||||
public IActionResult Delete(string id)
|
||||
{
|
||||
return _adapter.RemovePost(id).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPatch("{id}")]
|
||||
public IActionResult Restore(string id)
|
||||
{
|
||||
return _adapter.RestorePost(id).GetResponse(Request, Response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.BindingModels;
|
||||
|
||||
namespace SmallSoftwareWebApi.Controllers;
|
||||
[Authorize]
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
[Produces("application/json")]
|
||||
public class RequestsController(IRequestAdapter adapter) : ControllerBase
|
||||
{
|
||||
private readonly IRequestAdapter _adapter = adapter;
|
||||
[HttpGet]
|
||||
public IActionResult GetRecords(DateTime fromDate, DateTime toDate)
|
||||
{
|
||||
return _adapter.GetList(fromDate, toDate).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult GetWorkerRecords(string id, DateTime fromDate,
|
||||
DateTime toDate)
|
||||
{
|
||||
return _adapter.GetWorkerList(id, fromDate,
|
||||
toDate).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet]
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult GetSoftwareRecords(string id, DateTime fromDate,
|
||||
DateTime toDate)
|
||||
{
|
||||
return _adapter.GetSoftwareList(id, fromDate,
|
||||
toDate).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet("{data}")]
|
||||
public IActionResult GetRecord(string data)
|
||||
{
|
||||
return _adapter.GetElement(data).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPost]
|
||||
public IActionResult Request_([FromBody] RequestBindingModel model)
|
||||
{
|
||||
return _adapter.MakeRequest(model).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpDelete("{id}")]
|
||||
public IActionResult Cancel(string id)
|
||||
{
|
||||
return _adapter.CancelRequest(id).GetResponse(Request, Response);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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,58 @@
|
||||
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 SoftwaresController(ISoftwareAdapter adapter) : ControllerBase
|
||||
{
|
||||
private readonly ISoftwareAdapter _adapter = adapter;
|
||||
[HttpGet]
|
||||
public IActionResult GetRecords(bool includeDeleted)
|
||||
{
|
||||
return _adapter.GetList(includeDeleted).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult GetManufacturerRecords(string id, bool includeDeleted)
|
||||
{
|
||||
return _adapter.GetManufacturerList(id,
|
||||
includeDeleted).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult GetHistory(string id)
|
||||
{
|
||||
return _adapter.GetHistory(id).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpGet("{data}")]
|
||||
public IActionResult GetRecord(string data)
|
||||
{
|
||||
return _adapter.GetElement(data).GetResponse(Request, Response);
|
||||
}
|
||||
[HttpPost]
|
||||
public IActionResult Register([FromBody] SoftwareBindingModel model)
|
||||
{
|
||||
return _adapter.RegisterSoftware(model).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpPut]
|
||||
public IActionResult ChangeInfo([FromBody] SoftwareBindingModel model)
|
||||
{
|
||||
return _adapter.ChangeSoftwareInfo(model).GetResponse(Request,
|
||||
Response);
|
||||
}
|
||||
[HttpDelete("{id}")]
|
||||
public IActionResult Delete(string id)
|
||||
{
|
||||
return _adapter.RemoveSoftware(id).GetResponse(Request, Response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace SmallSoftwareWebApi.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Authorize]
|
||||
[Route("[controller]")]
|
||||
public class WeatherForecastController : ControllerBase
|
||||
{
|
||||
private static readonly string[] Summaries = new[]
|
||||
{
|
||||
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
|
||||
};
|
||||
|
||||
private readonly ILogger<WeatherForecastController> _logger;
|
||||
|
||||
public WeatherForecastController(ILogger<WeatherForecastController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
[HttpGet(Name = "GetWeatherForecast")]
|
||||
public IEnumerable<WeatherForecast> Get()
|
||||
{
|
||||
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
||||
{
|
||||
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
|
||||
TemperatureC = Random.Shared.Next(-20, 55),
|
||||
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
|
||||
})
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
|
||||
namespace SmallSoftwareWebApi.Infrastructure;
|
||||
|
||||
public class ConfigurationDatabase(IConfiguration configuration) : IConfigurationDatabase
|
||||
{
|
||||
|
||||
private readonly Lazy<DataBaseSettings> _dataBaseSettings = new(() =>
|
||||
{
|
||||
return configuration.GetValue<DataBaseSettings>("DataBaseSettings")
|
||||
?? throw new InvalidDataException(nameof(DataBaseSettings));
|
||||
});
|
||||
public string ConnectionString => _dataBaseSettings.Value.ConnectionString;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace SmallSoftwareWebApi.Infrastructure;
|
||||
|
||||
public class DataBaseSettings
|
||||
{
|
||||
public required string ConnectionString { get; set; }
|
||||
}
|
||||
113
SmallSoftwareProject/SmallSoftwareWebApi/Program.cs
Normal file
113
SmallSoftwareProject/SmallSoftwareWebApi/Program.cs
Normal file
@@ -0,0 +1,113 @@
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using Serilog;
|
||||
using SmallSoftwareBusinessLogic.Implementations;
|
||||
using SmallSoftwareContracts.AdapterContracts;
|
||||
using SmallSoftwareContracts.BusinessLogicsContracts;
|
||||
using SmallSoftwareContracts.Infrastructure;
|
||||
using SmallSoftwareContracts.StoragesContracts;
|
||||
using SmallSoftwareDatabase;
|
||||
using SmallSoftwareDatabase.Implementations;
|
||||
using SmallSoftwareWebApi;
|
||||
using SmallSoftwareWebApi.Adapters;
|
||||
using SmallSoftwareWebApi.Infrastructure;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
|
||||
builder.Services.AddControllers();
|
||||
|
||||
using var loggerFactory = new LoggerFactory();
|
||||
loggerFactory.AddSerilog(new LoggerConfiguration().ReadFrom.Configuration(builder.Configuration).CreateLogger());
|
||||
builder.Services.AddSingleton(loggerFactory.CreateLogger("Any"));
|
||||
|
||||
builder.Services.AddAuthorization();
|
||||
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
||||
.AddJwtBearer(options =>
|
||||
{
|
||||
options.TokenValidationParameters = new TokenValidationParameters
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ValidateIssuer = true,
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ValidIssuer = AuthOptions.ISSUER,
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ValidateAudience = true,
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ValidAudience = AuthOptions.AUDIENCE,
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ValidateLifetime = true,
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ValidateIssuerSigningKey = true,
|
||||
};
|
||||
});
|
||||
|
||||
builder.Services.AddSingleton<IConfigurationDatabase, ConfigurationDatabase>();
|
||||
builder.Services.AddTransient<IManufacturerBusinessLogicContract, ManufacturerBusinessLogicContract>();
|
||||
builder.Services.AddTransient<IPostBusinessLogicContract, PostBusinessLogicContract>();
|
||||
builder.Services.AddTransient<ISoftwareBusinessLogicContract, SoftwareBusinessLogicContract>();
|
||||
builder.Services.AddTransient<ISalaryBusinessLogicContract, SalaryBusinessLogicContract>();
|
||||
builder.Services.AddTransient<IRequestBusinessLogicContract, RequestBusinessLogicContract>();
|
||||
builder.Services.AddTransient<IWorkerBusinessLogicContract, WorkerBusinessLogicContract>();
|
||||
|
||||
builder.Services.AddTransient<SmallSoftwareDbContext>();
|
||||
builder.Services.AddTransient<IManufacturerStorageContract, ManufacturerStorageContract>();
|
||||
builder.Services.AddTransient<IPostStorageContract, PostStorageContract>();
|
||||
builder.Services.AddTransient<ISoftwareStorageContract, SoftwareStorageContract>();
|
||||
builder.Services.AddTransient<ISalaryStorageContract, SalaryStorageContract>();
|
||||
builder.Services.AddTransient<IRequestStorageContract, RequestStorageContract>();
|
||||
builder.Services.AddTransient<IWorkerStorageContract, WorkerStorageContract>();
|
||||
|
||||
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();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
app.MapOpenApi();
|
||||
}
|
||||
if (app.Environment.IsProduction())
|
||||
{
|
||||
var dbContext = app.Services.GetRequiredService<SmallSoftwareDbContext>();
|
||||
if (dbContext.Database.CanConnect())
|
||||
{
|
||||
dbContext.Database.EnsureCreated();
|
||||
dbContext.Database.Migrate();
|
||||
}
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
app.UseAuthentication();
|
||||
|
||||
app.UseAuthorization();
|
||||
|
||||
app.Map("/login/{username}", (string username) =>
|
||||
{
|
||||
return new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(
|
||||
issuer: AuthOptions.ISSUER,
|
||||
audience: AuthOptions.AUDIENCE,
|
||||
claims: [new(ClaimTypes.Name, username)],
|
||||
expires: DateTime.UtcNow.Add(TimeSpan.FromMinutes(2)),
|
||||
signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(),
|
||||
SecurityAlgorithms.HmacSha256)));
|
||||
});
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
app.Run();
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": false,
|
||||
"applicationUrl": "http://localhost:5273",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": false,
|
||||
"applicationUrl": "https://localhost:7214;http://localhost:5273",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.2" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SmallSoftwareBusinessLogic\SmallSoftwareBusinessLogic.csproj" />
|
||||
<ProjectReference Include="..\SmallSoftwareContracts\SmallSoftwareContracts.csproj" />
|
||||
<ProjectReference Include="..\SmallSoftwareDatabase\SmallSoftwareDatabase.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<InternalsVisibleTo Include="SmallSoftwareTests" />
|
||||
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,6 @@
|
||||
@SmallSoftwareWebApi_HostAddress = http://localhost:5273
|
||||
|
||||
GET {{SmallSoftwareWebApi_HostAddress}}/weatherforecast/
|
||||
Accept: application/json
|
||||
|
||||
###
|
||||
13
SmallSoftwareProject/SmallSoftwareWebApi/WeatherForecast.cs
Normal file
13
SmallSoftwareProject/SmallSoftwareWebApi/WeatherForecast.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace SmallSoftwareWebApi
|
||||
{
|
||||
public class WeatherForecast
|
||||
{
|
||||
public DateOnly Date { get; set; }
|
||||
|
||||
public int TemperatureC { get; set; }
|
||||
|
||||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
||||
|
||||
public string? Summary { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
28
SmallSoftwareProject/SmallSoftwareWebApi/appsettings.json
Normal file
28
SmallSoftwareProject/SmallSoftwareWebApi/appsettings.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"Serilog": {
|
||||
"Using": [ "Serilog.Sinks.File" ],
|
||||
"MinimumLevel": {
|
||||
"Default": "Information"
|
||||
},
|
||||
"WriteTo": [
|
||||
{
|
||||
"Name": "File",
|
||||
"Args": {
|
||||
"path": "../logs/smallsoftware-.log",
|
||||
"rollingInterval": "Day",
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} { CorrelationId } { Level:u3} { Username } { Message: lj} { Exception } { NewLine }"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"DataBaseSettings": {
|
||||
"ConnectionString": ""
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user