using MagicCarpetContracts.ViewModels; using MagicCarpetTests.Infrastructure; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace MagicCarpetTests.WebApiControllersTests; [TestFixture] internal class SalaryControllerTests : BaseWebApiControllerTest { [TearDown] public void TearDown() { MagicCarpetDbContext.RemovePostsFromDatabase(); MagicCarpetDbContext.RemoveEmployeesFromDatabase(); MagicCarpetDbContext.RemoveSalariesFromDatabase(); } [Test] public async Task GetList_WhenHaveRecords_ShouldSuccess_Test() { //Arrange var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); var salary = MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, employeeSalary: 100); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id); //Act 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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); var data = await GetModelFromResponseAsync>(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/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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); var data = await GetModelFromResponseAsync>(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 employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); 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)); //Act 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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); var data = await GetModelFromResponseAsync>(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/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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); } [Test] public async Task GetList_ByEmployee_ShouldSuccess_Test() { //Arrange var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id); //Act 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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); var data = await GetModelFromResponseAsync>(response); Assert.That(data, Is.Not.Null); Assert.Multiple(() => { Assert.That(data, Has.Count.EqualTo(2)); Assert.That(data.All(x => x.EmployeeId == employee1.Id)); }); } [Test] public async Task GetList_ByEmployee_OnlyInDatePeriod_ShouldSuccess_Test() { //Arrange var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.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(1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id, salaryDate: DateTime.UtcNow.AddDays(1).AddMinutes(-5)); MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, salaryDate: DateTime.UtcNow.AddDays(-2)); //Act 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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); var data = await GetModelFromResponseAsync>(response); Assert.That(data, Is.Not.Null); Assert.Multiple(() => { Assert.That(data, Has.Count.EqualTo(2)); Assert.That(data.All(x => x.EmployeeId == employee1.Id)); }); } [Test] public async Task GetList_ByEmployee_WhenDateIsIncorrect_ShouldBadRequest_Test() { //Arrange var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И."); //Act 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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); } [Test] public async Task GetList_ByEmployee_WhenIdIsNotGuid_ShouldBadRequest_Test() { //Act 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.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); } //[Test] //public async Task Calculate_ShouldSuccess_Test() //{ // //Arrange // var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000); // var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "Иванов И.И.", postId: post.PostId); // var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id); // var expectedSum = sale.Sum * 0.1 + post.Salary; // //Act // var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); // //Assert // Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent)); // var salaries = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee.Id); // Assert.Multiple(() => // { // Assert.That(salaries, Has.Length.EqualTo(1)); // Assert.That(salaries.First().EmployeeSalary, Is.EqualTo(expectedSum)); // Assert.That(salaries.First().SalaryDate.Month, Is.EqualTo(DateTime.UtcNow.Month)); // }); //} [Test] public async Task Calculate_WithoutEmployees_ShouldSuccess_Test() { //Act var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); //Assert Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent)); var salaries = MagicCarpetDbContext.Salaries.ToArray(); Assert.That(salaries, Has.Length.EqualTo(0)); } //[Test] //public async Task Calculate_WithoutSalesByEmployee_ShouldSuccess_Test() //{ // //Arrange // var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn(salary: 1000); // var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 1", postId: post.PostId); // var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name 2", postId: post.PostId); // var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee1.Id); // //Act // var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); // //Assert // Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent)); // var salary1 = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee1.Id).First().EmployeeSalary; // var salary2 = MagicCarpetDbContext.GetSalariesFromDatabaseByEmployeeId(employee2.Id).First().EmployeeSalary; // Assert.That(salary1, Is.Not.EqualTo(salary2)); //} //[Test] //public async Task Calculate_PostNotFound_ShouldNotFound_Test() //{ // //Arrange // MagicCarpetDbContext.InsertPostToDatabaseAndReturn(); // var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "name", postId: Guid.NewGuid().ToString()); // var sale = MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id); // //Act // var response = await HttpClient.PostAsync($"/api/salary/calculate?date={DateTime.UtcNow:MM/dd/yyyy}", null); // //Assert // Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound)); //} }