321 lines
14 KiB
C#
321 lines
14 KiB
C#
using SmallSoftwareContracts.DataModels;
|
|
using SmallSoftwareContracts.Enums;
|
|
using SmallSoftwareContracts.ViewModels;
|
|
using SmallSoftwareDatabase.Models;
|
|
using SmallSoftwareTests.Infrastructure;
|
|
using System.Net;
|
|
|
|
namespace SmallSoftwareTests.WebApiControllersApi;
|
|
|
|
[TestFixture]
|
|
internal class ReportControllerTests : BaseWebApiControllerTest
|
|
{
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
|
|
SmallSoftwareDbContext.RemoveRequestsFromDatabase();
|
|
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
|
SmallSoftwareDbContext.RemovePostsFromDatabase();
|
|
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
|
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
|
}
|
|
[Test]
|
|
public async Task GetSoftwares_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
// Arrange
|
|
var manufacturer1 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name1");
|
|
var manufacturer2 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name2");
|
|
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer1.Id, manufacturerName: manufacturer1.ManufacturerName);
|
|
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer2.Id, manufacturerName: manufacturer2.ManufacturerName);
|
|
|
|
var software1 = new SoftwareDataModel(Guid.NewGuid().ToString(), "soft1", SoftwareType.AudioDriver, manufacturer1.Id, 10, false);
|
|
var software2 = new SoftwareDataModel(Guid.NewGuid().ToString(), "soft2", SoftwareType.AudioDriver, manufacturer2.Id, 10, false);
|
|
|
|
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, software1.Id, softwareName: software1.SoftwareName);
|
|
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer2.Id, software2.Id, softwareName: software2.SoftwareName);
|
|
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 11);
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 12);
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 13);
|
|
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software2.Id, 11);
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software2.Id, 12);
|
|
|
|
// Act
|
|
var response = await HttpClient.GetAsync("/api/report/getsoftwares");
|
|
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<HistoryOfSoftwareViewModel>>(response);
|
|
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(data, Has.Count.EqualTo(2));
|
|
Assert.That(data.First(x => x.SoftwareName == software1.SoftwareName).Histories, Has.Count.EqualTo(3));
|
|
Assert.That(data.First(x => x.SoftwareName == software2.SoftwareName).Histories, Has.Count.EqualTo(2));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetRequests_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
|
var manufacturerId = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn();
|
|
var software1 = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturerId.Id, softwareName: "name 1");
|
|
var software2 = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturerId.Id, softwareName: "name 2");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, softwares: [(software1.Id, 10, 1.1), (software2.Id, 10, 1.1)]);
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, softwares: [(software1.Id, 10, 1.1)]);
|
|
//Act
|
|
var response = await
|
|
HttpClient.GetAsync($"/api/report/getrequests?fromDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.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));
|
|
});
|
|
}
|
|
[Test]
|
|
public async Task GetRequests_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await
|
|
HttpClient.GetAsync($"/api/report/getrequests?fromDate={DateTime.Now.AddDays(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
|
|
//Assert
|
|
Assert.That(response.StatusCode,
|
|
Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetSalary_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
// Arrange
|
|
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
|
|
|
var worker1 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1", postId: post.PostId).AddPost(post);
|
|
var worker2 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2", postId: post.PostId).AddPost(post);
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker1.Id,
|
|
workerSalary: 100,
|
|
salaryDate: DateTime.UtcNow.AddDays(-10));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker1.Id,
|
|
workerSalary: 1000,
|
|
salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker1.Id,
|
|
workerSalary: 200,
|
|
salaryDate: DateTime.UtcNow.AddDays(5));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker2.Id,
|
|
workerSalary: 500,
|
|
salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker2.Id,
|
|
workerSalary: 300,
|
|
salaryDate: DateTime.UtcNow.AddDays(-3));
|
|
|
|
// Act
|
|
var response = await HttpClient.GetAsync(
|
|
$"/api/report/getsalary?" +
|
|
$"fromDate={DateTime.Now.AddDays(-7):MM/dd/yyyy HH:mm:ss}&" + $"toDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
|
|
var data = await GetModelFromResponseAsync<List<WorkerSalaryByPeriodViewModel>>(response);
|
|
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.That(data, Has.Count.EqualTo(1));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetSalary_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
// Act
|
|
var response = await HttpClient.GetAsync(
|
|
$"/api/report/getsalary?" +
|
|
$"fromDate={DateTime.Now.AddDays(1):MM/dd/yyyy HH:mm:ss}&" + $"toDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
[Test]
|
|
public async Task LoadSoftwares_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var manufacturer1 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name1");
|
|
var manufacturer2 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name2");
|
|
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer1.Id, manufacturerName: manufacturer1.ManufacturerName);
|
|
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer2.Id, manufacturerName: manufacturer2.ManufacturerName);
|
|
|
|
var softwareId1 = Guid.NewGuid().ToString();
|
|
var softwareId2 = Guid.NewGuid().ToString();
|
|
|
|
var software1 = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id,softwareId1, "name1", SoftwareType.Windows, 10, false);
|
|
var software2 = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer2.Id, softwareId2, "name2", SoftwareType.Windows, 10, false);
|
|
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(softwareId1, 22, DateTime.UtcNow);
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(softwareId2, 21, DateTime.UtcNow);
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(softwareId1, 33, DateTime.UtcNow);
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(softwareId1, 32, DateTime.UtcNow);
|
|
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(softwareId2, 65, DateTime.UtcNow);
|
|
|
|
//Act
|
|
var response = await HttpClient.GetAsync("/api/report/LoadSoftwares");
|
|
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
using var data = await response.Content.ReadAsStreamAsync();
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.That(data.Length, Is.GreaterThan(0));
|
|
await AssertStreamAsync(response, "file.docx");
|
|
}
|
|
[Test]
|
|
public async Task LoadRequests_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
// Arrange
|
|
var manufacturer1 = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 1");
|
|
var manufacturer2 = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
|
|
|
|
var worker1 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
|
var worker2 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
|
|
|
|
var software1 = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn( manufacturer1.Id,
|
|
softwareName: "name 1");
|
|
var software2 = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn( manufacturer2.Id,
|
|
softwareName: "name 2");
|
|
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(
|
|
worker1.Id,
|
|
sum: 100,
|
|
email: "cdsfs@dd.ru",
|
|
softwares: [(software1.Id, 10, 1.1), (software2.Id, 10, 1.1)]);
|
|
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(
|
|
worker2.Id,
|
|
sum: 200,
|
|
email: "cdswws@dd.ru",
|
|
softwares: [(software1.Id, 10, 1.1)]);
|
|
|
|
// Act
|
|
var response = await HttpClient.GetAsync(
|
|
$"/api/report/loadrequests?" +
|
|
$"fromDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}&" + $"toDate={DateTime.Now.AddDays(1):MM/dd/yyyy HH:mm:ss}");
|
|
|
|
// Assert
|
|
await AssertStreamAsync(response, "file.xlsx");
|
|
}
|
|
|
|
[Test]
|
|
public async Task LoadRequests_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
// Act
|
|
var response = await HttpClient.GetAsync(
|
|
$"/api/report/loadrequests?" +
|
|
$"fromDate={DateTime.Now.AddDays(1):MM/dd/yyyy HH:mm:ss}&" + $"toDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
[Test]
|
|
public async Task LoadSalary_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
// Arrange
|
|
var post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
|
|
|
|
var worker1 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(
|
|
fio: "fio 1",
|
|
postId: post.PostId).AddPost(post);
|
|
|
|
var worker2 = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(
|
|
fio: "fio 2",
|
|
postId: post.PostId).AddPost(post);
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker1.Id,
|
|
workerSalary: 100,
|
|
salaryDate: DateTime.UtcNow.AddDays(-10));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker1.Id,
|
|
workerSalary: 1000,
|
|
salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker1.Id,
|
|
workerSalary: 200,
|
|
salaryDate: DateTime.UtcNow.AddDays(5));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker2.Id,
|
|
workerSalary: 500,
|
|
salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
|
|
SmallSoftwareDbContext.InsertSalaryToDatabaseAndReturn(
|
|
worker2.Id,
|
|
workerSalary: 300,
|
|
salaryDate: DateTime.UtcNow.AddDays(-3));
|
|
|
|
// Act
|
|
var response = await HttpClient.GetAsync(
|
|
$"/api/report/loadsalary?" +
|
|
$"fromDate={DateTime.Now.AddDays(-7):MM/dd/yyyy HH:mm:ss}&" + $"toDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
|
|
|
|
// Assert
|
|
await AssertStreamAsync(response, "file.pdf");
|
|
}
|
|
|
|
[Test]
|
|
public async Task LoadSalary_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
// Act
|
|
var response = await HttpClient.GetAsync(
|
|
$"/api/report/loadsalary?" +
|
|
$"fromDate={DateTime.Now.AddDays(1):MM/dd/yyyy HH:mm:ss}&" + $"toDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
private static async Task AssertStreamAsync(HttpResponseMessage response, string fileNameForSave = "")
|
|
{
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
using var data = await response.Content.ReadAsStreamAsync();
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.That(data.Length, Is.GreaterThan(0));
|
|
await SaveStreamAsync(data, fileNameForSave);
|
|
}
|
|
private static async Task SaveStreamAsync(Stream stream, string fileName)
|
|
{
|
|
if (string.IsNullOrEmpty(fileName))
|
|
{
|
|
return;
|
|
}
|
|
var path = Path.Combine(Directory.GetCurrentDirectory(), fileName);
|
|
if (File.Exists(path))
|
|
{
|
|
File.Delete(path);
|
|
}
|
|
stream.Position = 0;
|
|
using var fileStream = new FileStream(path, FileMode.OpenOrCreate);
|
|
await stream.CopyToAsync(fileStream);
|
|
}
|
|
}
|
|
|