forked from slavaxom9k/PIBD-23_Fomichev_V.S._MagicCarpet
236 lines
11 KiB
C#
236 lines
11 KiB
C#
using MagicCarpetContracts.Enums;
|
|
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 ReportControllerTests : BaseWebApiControllerTest
|
|
{
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
MagicCarpetDbContext.RemoveToursFromDatabase();
|
|
MagicCarpetDbContext.RemoveSalesFromDatabase();
|
|
MagicCarpetDbContext.RemoveEmployeesFromDatabase();
|
|
MagicCarpetDbContext.RemovePostsFromDatabase();
|
|
MagicCarpetDbContext.RemoveSalariesFromDatabase();
|
|
MagicCarpetDbContext.RemoveClientsFromDatabase();
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetHistories_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var tourId1 = Guid.NewGuid().ToString();
|
|
var tourId2 = Guid.NewGuid().ToString();
|
|
|
|
var tour1 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourId1, "name1", "test1", TourType.Beach, 10);
|
|
var tour2 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourId2, "name2", "test1", TourType.Beach, 10);
|
|
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId1, 22, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId2, 21, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId1, 33, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId1, 32, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId2, 65, DateTime.UtcNow);
|
|
//Act
|
|
var response = await HttpClient.GetAsync("/api/report/GetHistories");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
var data = await GetModelFromResponseAsync<List<TourHistoryViewModel>>(response);
|
|
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.That(data, Has.Count.EqualTo(1));
|
|
}
|
|
|
|
[Test]
|
|
public async Task LoadHistories_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var tourId1 = Guid.NewGuid().ToString();
|
|
var tourId2 = Guid.NewGuid().ToString();
|
|
|
|
var tour1 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourId1, "name1", "test1", TourType.Beach, 10);
|
|
var tour2 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourId2, "name2", "test1", TourType.Beach, 10);
|
|
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId1, 22, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId2, 21, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId1, 33, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId1, 32, DateTime.UtcNow);
|
|
MagicCarpetDbContext.InsertTourHistoryToDatabaseAndReturn(tourId2, 65, DateTime.UtcNow);
|
|
|
|
//Act
|
|
var response = await HttpClient.GetAsync("/api/report/LoadHistories");
|
|
|
|
//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 GetSales_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn();
|
|
var client = MagicCarpetDbContext.InsertClientToDatabaseAndReturn();
|
|
var tour1 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourName: "name 1");
|
|
var tour2 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourName: "name 2");
|
|
MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, client.Id, tours: [(tour1.Id, 10, 1.1)]);
|
|
MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, client.Id, tours: [(tour2.Id, 10, 1.1)]);
|
|
//Act
|
|
var response = await
|
|
HttpClient.GetAsync($"/api/report/getsales?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<SaleViewModel>>(response);
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(data, Has.Count.EqualTo(2));
|
|
});
|
|
}
|
|
[Test]
|
|
public async Task GetSales_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await
|
|
HttpClient.GetAsync($"/api/report/getsales?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 LoadSales_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var employee = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn();
|
|
var tour1 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourName: "name 1");
|
|
var tour2 = MagicCarpetDbContext.InsertTourToDatabaseAndReturn(tourName: "name 2");
|
|
MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, tours: [(tour1.Id, 10, 1.1), (tour2.Id, 10, 1.1)]);
|
|
MagicCarpetDbContext.InsertSaleToDatabaseAndReturn(employee.Id, tours: [(tour1.Id, 10, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/report/loadsales?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 LoadSales_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
// Act
|
|
var response = await HttpClient.GetAsync(
|
|
$"/api/report/loadsales?" +
|
|
$"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()
|
|
{
|
|
|
|
var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn();
|
|
var employee1 =
|
|
MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "fio 1", postId:
|
|
post.PostId);
|
|
var employee2 =
|
|
MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "fio 2", postId:
|
|
post.PostId);
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id,
|
|
employeeSalary: 100, salaryDate: DateTime.UtcNow.AddDays(-10));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id,
|
|
employeeSalary: 1000, salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id,
|
|
employeeSalary: 200, salaryDate: DateTime.UtcNow.AddDays(5));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id,
|
|
employeeSalary: 500, salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id,
|
|
employeeSalary: 300, salaryDate: DateTime.UtcNow.AddDays(-3));
|
|
var response = await
|
|
HttpClient.GetAsync($"/api/report/getsalary?fromDate={DateTime.Now.AddDays(-7):yyyy-MM-dd}&toDate={DateTime.Now.AddDays(-1):yyyy-MM-dd}");
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
var data = await GetModelFromResponseAsync<List<EmployeeSalaryByPeriodViewModel>>(response);
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.That(data, Has.Count.EqualTo(2));
|
|
}
|
|
|
|
[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 LoadSalary_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var post = MagicCarpetDbContext.InsertPostToDatabaseAndReturn();
|
|
var employee1 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "fio 1", postId: post.PostId).AddPost(post);
|
|
var employee2 = MagicCarpetDbContext.InsertEmployeeToDatabaseAndReturn(fio: "fio 2", postId: post.PostId).AddPost(post);
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, employeeSalary: 100, salaryDate: DateTime.UtcNow.AddDays(-10));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, employeeSalary: 1000, salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee1.Id, employeeSalary: 200, salaryDate: DateTime.UtcNow.AddDays(5));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id, employeeSalary: 500, salaryDate: DateTime.UtcNow.AddDays(-5));
|
|
MagicCarpetDbContext.InsertSalaryToDatabaseAndReturn(employee2.Id, employeeSalary: 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);
|
|
}
|
|
}
|