253 lines
14 KiB
C#
253 lines
14 KiB
C#
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.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.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(100));
|
|
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.InternalServerError));
|
|
}
|
|
|
|
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));
|
|
});
|
|
}
|
|
} |