Files
Pibd-21_Semin_D.A._SmallSof…/SmallSoftwareProject/SmallSoftwareTests/WebApiControllersApi/ReportControllerTests.cs

119 lines
5.8 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");
// 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.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));
});
}
[Test]
public async Task GetRequests_WhenDateIsIncorrect_ShouldBadRequest_Test()
{
//Act
var response = await
HttpClient.GetAsync($"/api/report/getrequests?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 LoadSoftwares_WhenHaveRecords_ShouldSuccess_Test()
{
//Arrange
var manufacturer1 = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 1");
var manufacturer2 = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, softwareName: "name 1.1");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, softwareName: "name 1.2");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, softwareName: "name 1.3");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer2.Id, softwareName: "name 2.1");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer2.Id, softwareName: "name 2.2");
//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));
}
}