правки

This commit is contained in:
2025-04-05 15:06:24 +04:00
parent 618bc7f639
commit 400faf460a
7 changed files with 25 additions and 24 deletions

View File

@@ -61,7 +61,7 @@ public class SalaryBusinessLogicContract(ISalaryStorageContract salaryStorageCon
throw new NullListException(); throw new NullListException();
var salary = post.Salary + sales * 0.1; var salary = post.Salary + sales * 0.1;
_logger.LogDebug("The employee {employeeId} was paid a salary of {salary}", employee.Id, salary); _logger.LogDebug("The employee {employeeId} was paid a salary of {salary}", employee.Id, salary);
_salaryStorageContract.AddElement(new SalaryDataModel(employee.Id, finishDate, salary)); _salaryStorageContract.AddElement(new SalaryDataModel(employee.Id, DateTime.SpecifyKind(finishDate, DateTimeKind.Utc), salary));
} }
} }
} }

View File

@@ -16,7 +16,6 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
public void TearDown() public void TearDown()
{ {
MagicCarpetDbContext.RemovePostsFromDatabase(); MagicCarpetDbContext.RemovePostsFromDatabase();
MagicCarpetDbContext.RemoveToursFromDatabase();
MagicCarpetDbContext.RemoveEmployeesFromDatabase(); MagicCarpetDbContext.RemoveEmployeesFromDatabase();
MagicCarpetDbContext.RemoveSalariesFromDatabase(); MagicCarpetDbContext.RemoveSalariesFromDatabase();
} }
@@ -30,7 +29,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id);
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id);
//Act //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 response = await HttpClient.GetAsync($"/api/salary/getrecords?fromDate={DateTime.UtcNow.AddDays(-10):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(10):MM/dd/yyyy HH:mm:ss}");
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response); var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
@@ -45,7 +44,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
public async Task GetList_WhenNoRecords_ShouldSuccess_Test() public async Task GetList_WhenNoRecords_ShouldSuccess_Test()
{ {
//Act //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 response = await HttpClient.GetAsync($"/api/salary/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
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response); var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
@@ -66,7 +65,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
//Act //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 response = await HttpClient.GetAsync($"/api/salary/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
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response); var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
@@ -81,7 +80,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
public async Task GetList_WhenDateIsIncorrect_ShouldBadRequest_Test() public async Task GetList_WhenDateIsIncorrect_ShouldBadRequest_Test()
{ {
//Act //Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}"); var response = await HttpClient.GetAsync($"/api/salary/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
} }
@@ -96,7 +95,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id);
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id);
//Act //Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={employee1.Id}"); var response = await HttpClient.GetAsync($"/api/salary/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={employee1.Id}");
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response); var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
@@ -121,7 +120,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5));
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(-2));
//Act //Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={employee1.Id}"); var response = await HttpClient.GetAsync($"/api/salary/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id={employee1.Id}");
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response); var data = await GetModelFromResponseAsync<List<SalaryViewModel>>(response);
@@ -139,7 +138,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
//Arrange //Arrange
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.");
//Act //Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&id={employee.Id}"); var response = await HttpClient.GetAsync($"/api/salary/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&id={employee.Id}");
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
} }
@@ -148,7 +147,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
public async Task GetList_ByEmployee_WhenIdIsNotGuid_ShouldBadRequest_Test() public async Task GetList_ByEmployee_WhenIdIsNotGuid_ShouldBadRequest_Test()
{ {
//Act //Act
var response = await HttpClient.GetAsync($"/api/salaries/getemployeerecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}&id=id"); var response = await HttpClient.GetAsync($"/api/salary/getemployeerecords?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
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
} }
@@ -159,16 +158,18 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
//Arrange //Arrange
var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000); var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000);
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.", postId: post.PostId); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.", postId: post.PostId);
var furniture = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id);
var expectedSum = sale.Sum * 0.1 + post.Salary;
//Act //Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var salaries = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee.Id); var salaries = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee.Id);
Assert.Multiple(() => Assert.Multiple(() =>
{ {
Assert.That(salaries, Has.Length.EqualTo(1)); Assert.That(salaries, Has.Length.EqualTo(1));
Assert.That(salaries.First().EmployeeSalary, Is.EqualTo(1000.5)); Assert.That(salaries.First().EmployeeSalary, Is.EqualTo(expectedSum));
Assert.That(salaries.First().SalaryDate.Month, Is.EqualTo(DateTime.UtcNow.Month)); Assert.That(salaries.First().SalaryDate.Month, Is.EqualTo(DateTime.UtcNow.Month));
}); });
} }
@@ -177,7 +178,7 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
public async Task Calculate_WithoutEmployees_ShouldSuccess_Test() public async Task Calculate_WithoutEmployees_ShouldSuccess_Test()
{ {
//Act //Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var salaries = MagicCarpetDbContext.Salaries.ToArray(); var salaries = MagicCarpetDbContext.Salaries.ToArray();
@@ -191,9 +192,9 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000); var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000);
var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 1", postId: post.PostId); var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 1", postId: post.PostId);
var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 2", postId: post.PostId); var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 2", postId: post.PostId);
var man = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee1.Id);
//Act //Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var salary1 = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee1.Id).First().EmployeeSalary; var salary1 = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee1.Id).First().EmployeeSalary;
@@ -207,9 +208,9 @@ internal class SalaryControllerTests : BaseWebApiControllerTest
//Arrange //Arrange
MagicCarpetDbContext.InsertPostToDatabaseAndReturn(); MagicCarpetDbContext.InsertPostToDatabaseAndReturn();
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name", postId: Guid.NewGuid().ToString()); var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name", postId: Guid.NewGuid().ToString());
var furniture = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id);
//Act //Act
var response = await HttpClient.PostAsync($"/api/salaries/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null);
//Assert //Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound)); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
} }

View File

@@ -40,13 +40,12 @@ internal class SaleControllerTests : BaseWebApiControllerTest
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test() public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
{ {
//Arrange //Arrange
var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employeeId, clientId: _clientId, sum: 10, tours: [(_tourId, 10, 1.1)]); var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employeeId, _clientId, sum: 10, tours: [(_tourId, 10, 1.1)]);
MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employeeId, tours: [(_tourId, 10, 1.1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employeeId, _clientId, tours: [(_tourId, 10, 1.1)]);
MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employeeId, tours: [(_tourId, 10, 1.1)]); MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(_employeeId, _clientId, tours: [(_tourId, 10, 1.1)]);
//Act //Act
var response = await HttpClient.GetAsync($"/api/sales/getrecords?fromDate={DateTime.UtcNow.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.UtcNow.AddDays(1):MM/dd/yyyy HH:mm:ss}"); var response = await HttpClient.GetAsync($"/api/sales/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
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<SaleViewModel>>(response); var data = await GetModelFromResponseAsync<List<SaleViewModel>>(response);
Assert.Multiple(() => Assert.Multiple(() =>
{ {

View File

@@ -9,7 +9,7 @@ namespace MagicCarpetWebApi.Controllers;
[Route("api/[controller]/[action]")] [Route("api/[controller]/[action]")]
[ApiController] [ApiController]
[Produces("application/json")] [Produces("application/json")]
public class SalariesController(ISalaryAdapter adapter) : ControllerBase public class SalaryController(ISalaryAdapter adapter) : ControllerBase
{ {
private readonly ISalaryAdapter _adapter = adapter; private readonly ISalaryAdapter _adapter = adapter;

View File

@@ -1,7 +1,6 @@
using MagicCarpetContracts.AdapterContracts; using MagicCarpetContracts.AdapterContracts;
using MagicCarpetContracts.BindingModels; using MagicCarpetContracts.BindingModels;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
namespace MagicCarpetWebApi.Controllers; namespace MagicCarpetWebApi.Controllers;

View File

@@ -9,6 +9,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.3" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.3" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.3" /> <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.2" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" /> <PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
</ItemGroup> </ItemGroup>

View File

@@ -70,6 +70,7 @@ builder.Services.AddTransient<IPostAdapter, PostAdapter>();
builder.Services.AddTransient<ITourAdapter, TourAdapter>(); builder.Services.AddTransient<ITourAdapter, TourAdapter>();
builder.Services.AddTransient<ISaleAdapter, SaleAdapter>(); builder.Services.AddTransient<ISaleAdapter, SaleAdapter>();
builder.Services.AddTransient<IEmployeeAdapter, EmployeeAdapter>(); builder.Services.AddTransient<IEmployeeAdapter, EmployeeAdapter>();
builder.Services.AddTransient<ISalaryAdapter, SalaryAdapter>();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddOpenApi(); builder.Services.AddOpenApi();