369 lines
18 KiB
C#
369 lines
18 KiB
C#
using SmallSoftwareContracts.BindingModels;
|
|
using SmallSoftwareContracts.ViewModels;
|
|
using SmallSoftwareDatabase.Models;
|
|
using SmallSoftwareTests.Infrastructure;
|
|
using System.Net;
|
|
|
|
namespace SmallSoftwareTests.WebApiControllersApi;
|
|
|
|
[TestFixture]
|
|
internal class RequestControllerTests : BaseWebApiControllerTest
|
|
{
|
|
private string _workerId;
|
|
private string _manufacturerId;
|
|
private string _softwareId;
|
|
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_workerId = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn().Id;
|
|
_manufacturerId = SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn().Id;
|
|
_softwareId = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId).Id;
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
SmallSoftwareDbContext.RemoveRequestsFromDatabase();
|
|
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
|
SmallSoftwareDbContext.RemoveSoftwaresFromDatabase();
|
|
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(_softwareId, 10, 1.1)]);
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(_softwareId, 10, 1.1)]);
|
|
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/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<RequestViewModel>>(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/requests/getrecords?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.Multiple(() =>
|
|
{
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.That(data, Has.Count.EqualTo(0));
|
|
});
|
|
}
|
|
|
|
|
|
[Test]
|
|
public async Task GetList_ByWorkerId_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "Other worker");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id={_workerId}&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));
|
|
Assert.That(data.All(x => x.WorkerId == _workerId));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetList_ByWorkerId_WhenNoRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "Other worker");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id={worker.Id}&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.That(data, Has.Count.EqualTo(0));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetList_ByWorkerId_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id={_workerId}&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 GetList_ByWorkerId_WhenIdIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getworkerrecords?id=Id&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 GetList_BySoftwareId_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, softwareName: "Other name");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(_softwareId, 1, 1.1), (software.Id, 4, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(software.Id, 10, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", softwares: [(software.Id, 1, 1.1), (_softwareId, 1, 1.1)], requestDate: DateTime.UtcNow.AddHours(12));
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getsoftwarerecords?id={_softwareId}&fromDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.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<RequestViewModel>>(response);
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(data, Has.Count.EqualTo(3));
|
|
Assert.That(data.All(x => x.Softwares.Any(y => y.SoftwareId == _softwareId)));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetList_BySoftwareId_WhenNoRecords_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var software = SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturerId, softwareName: "Other software");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getsoftwarerecords?id={software.Id}&fromDate={DateTime.Now.AddDays(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.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<RequestViewModel>>(response);
|
|
Assert.That(data, Is.Not.Null);
|
|
Assert.That(data, Has.Count.EqualTo(0));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetList_BySoftwareId_WhenDateIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getsoftwarerecords?id={_softwareId}&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 GetList_BySoftwareId_WhenIdIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getsoftwarerecords?id=Id&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 GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test", sum: 10, true, softwares: [(_softwareId, 10, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getrecord/{request.Id}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
|
|
{
|
|
//Arrange
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, false, softwares: [(_softwareId, 10, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getrecord/{Guid.NewGuid()}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetElement_ById_WhenRecordHasCanceled_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "test@mail.ru", sum: 10, softwares: [(_softwareId, 1, 1.2)], isCancel: true);
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getrecord/{request.Id}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetElement_ById_WhenIdIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/requests/getrecord/Id");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
public async Task Post_WhenDataIsIncorrect_ShouldBadRequest_Test()
|
|
{
|
|
//Arrange
|
|
var requestId = Guid.NewGuid().ToString();
|
|
var requestModelWithIdIncorrect = new RequestBindingModel { Id = "Id", WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = 1.1 }] };
|
|
var requestModelWithWorkerIdIncorrect = new RequestBindingModel { Id = requestId, WorkerId = "Id", Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = 1.1 }] };
|
|
var requestModelWithBuyerIdIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = 1.1 }] };
|
|
var requestModelWithSoftwaresIncorrect = new RequestBindingModel { Id = requestId, WorkerId = _workerId, Softwares = null };
|
|
var requestModelWithSoftwareIdIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = "Id", Count = 10, Price = 1.1 }] };
|
|
var requestModelWithCountIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId , Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = -10, Price = 1.1 }] };
|
|
var requestModelWithPriceIncorrect = new RequestBindingModel {Id = requestId, WorkerId = _workerId, Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = _softwareId, Count = 10, Price = -1.1 }] };
|
|
//Act
|
|
var responseWithIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithIdIncorrect));
|
|
var responseWithWorkerIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithWorkerIdIncorrect));
|
|
var responseWithBuyerIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithBuyerIdIncorrect));
|
|
var responseWithSoftwaresIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithSoftwaresIncorrect));
|
|
var responseWithSoftwareIdIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithSoftwareIdIncorrect));
|
|
var responseWithCountIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithCountIncorrect));
|
|
var responseWithPriceIncorrect = await HttpClient.PostAsync($"/api/posts", MakeContent(requestModelWithPriceIncorrect));
|
|
//Assert
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(responseWithIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "WorkerId is incorrect");
|
|
Assert.That(responseWithWorkerIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "WorkerId is incorrect");
|
|
Assert.That(responseWithBuyerIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "BuyerId is incorrect");
|
|
Assert.That(responseWithSoftwaresIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Softwares is incorrect");
|
|
Assert.That(responseWithSoftwareIdIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "SoftwareId is incorrect");
|
|
Assert.That(responseWithCountIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Count is incorrect");
|
|
Assert.That(responseWithPriceIncorrect.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest), "Price is incorrect");
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public async Task Post_WhenSendEmptyData_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.PostAsync($"/api/posts", MakeContent(string.Empty));
|
|
//Assert
|
|
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
[Test]
|
|
public async Task Post_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.PostAsync($"/api/posts", MakeContent(new { Data = "test", Position = 10 }));
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
[Test]
|
|
public async Task Delete_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "email@mail.ru", 10, false, softwares: [(_softwareId, 5, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/{request.Id}");
|
|
SmallSoftwareDbContext.ChangeTracker.Clear();
|
|
//Assert
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
|
Assert.That(SmallSoftwareDbContext.GetRequestFromDatabaseById(request.Id)!.IsCancel);
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
|
|
{
|
|
//Arrange
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "email@mail.ru", 10, false, softwares: [(_softwareId, 5, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/{Guid.NewGuid()}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
[Test]
|
|
public async Task Delete_WhenIsCanceled_ShouldBadRequest_Test()
|
|
{
|
|
//Arrange
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_workerId, "email@mail.ru", 10, true, softwares: [(_softwareId, 5, 1.1)]);
|
|
//Act
|
|
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/{request.Id}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
[Test]
|
|
public async Task Delete_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.DeleteAsync($"/api/requests/cancel/id");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
private static void AssertElement(RequestViewModel? actual, Request expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
|
Assert.That(actual.WorkerFIO, Is.EqualTo(expected.Worker!.FIO));
|
|
Assert.That(actual.IsCancel, Is.EqualTo(expected.IsCancel));
|
|
});
|
|
|
|
if (expected.InstallationRequests is not null)
|
|
{
|
|
Assert.That(actual.Softwares, Is.Not.Null);
|
|
Assert.That(actual.Softwares, Has.Count.EqualTo(expected.InstallationRequests.Count));
|
|
for (int i = 0; i < actual.Softwares.Count; ++i)
|
|
{
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Softwares[i].SoftwareId, Is.EqualTo(expected.InstallationRequests[i].SoftwareId));
|
|
Assert.That(actual.Softwares[i].Count, Is.EqualTo(expected.InstallationRequests[i].Count));
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Assert.That(actual.Softwares, Is.Null);
|
|
}
|
|
}
|
|
|
|
private static RequestBindingModel CreateModel(string workerId, string softwareId, string? id = null, int count = 1, double price = 1.1)
|
|
{
|
|
var requestId = id ?? Guid.NewGuid().ToString();
|
|
return new()
|
|
{
|
|
Id = requestId,
|
|
WorkerId = workerId,
|
|
Softwares = [new InstallationRequestBindingModel { RequestId = requestId, SoftwareId = softwareId, Count = count, Price = price }]
|
|
};
|
|
}
|
|
|
|
|
|
}
|