Files
Pibd-21_Semin_D.A._SmallSof…/SmallSoftwareProject/SmallSoftwareTests/WebApiControllersApi/WorkerControllerTests.cs
2025-04-24 00:06:05 +04:00

797 lines
31 KiB
C#

using SmallSoftwareContracts.BindingModels;
using SmallSoftwareContracts.Infrastructure.PostConfigurations;
using SmallSoftwareContracts.ViewModels;
using SmallSoftwareDatabase.Models;
using SmallSoftwareTests.Infrastructure;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Threading.Tasks;
namespace SmallSoftwareTests.WebApiControllersApi;
[TestFixture]
internal class WorkerControllerTests : BaseWebApiControllerTest
{
private Post _post;
[SetUp]
public void SetUp()
{
_post = SmallSoftwareDbContext.InsertPostToDatabaseAndReturn();
}
[TearDown]
public void TearDown()
{
SmallSoftwareDbContext.RemovePostsFromDatabase();
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
}
[Test]
public async Task GetList_WhenHaveRecords_ShouldSuccess_Test()
{
//Arrange
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio:
"fio 1", postId: _post.PostId)
.AddPost(_post);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
postId: _post.PostId);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
postId: _post.PostId);
//Act
var response = await HttpClient.GetAsync("/api/workers/getrecords");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.Multiple(() =>
{
Assert.That(data, Is.Not.Null);
Assert.That(data, Has.Count.EqualTo(3));
});
AssertElement(data.First(x => x.Id == worker.Id), worker);
}
[Test]
public async Task GetList_WhenNoRecords_ShouldSuccess_Test()
{
//Act
var response = await HttpClient.GetAsync("/api/workers/getrecords");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.Multiple(() =>
{
Assert.That(data, Is.Not.Null);
Assert.That(data, Has.Count.EqualTo(0));
});
}
[Test]
public async Task GetList_OnlyActual_ShouldSuccess_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
postId: _post.PostId, isDeleted: true);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
postId: _post.PostId, isDeleted: false);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
postId: _post.PostId, isDeleted: false);
//Act
var response = await
HttpClient.GetAsync("/api/workers/getrecords?includeDeleted=false");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(2));
Assert.That(data.All(x => !x.IsDeleted));
});
}
[Test]
public async Task GetList_IncludeNoActual_ShouldSuccess_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
postId: _post.PostId, isDeleted: true);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
postId: _post.PostId, isDeleted: true);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
postId: _post.PostId, isDeleted: false);
//Act
var response = await
HttpClient.GetAsync("/api/workers/getrecords?includeDeleted=true");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(3));
Assert.That(data.Any(x => x.IsDeleted));
Assert.That(data.Any(x => !x.IsDeleted));
});
}
[Test]
public async Task GetList_ByPostId_ShouldSuccess_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
postId: _post.PostId);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
postId: _post.PostId);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
postId: _post.PostId, isDeleted: true);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4");
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getpostrecords?id={_post.PostId}&includeDeleted=true");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(3));
Assert.That(data.All(x => x.PostId == _post.PostId));
});
}
[Test]
public async Task GetList_ByPostId_WhenNoRecords_ShouldSuccess_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
postId: _post.PostId);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4");
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getpostrecords?id={Guid.NewGuid()}&includeDeleted = true");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.That(data, Has.Count.EqualTo(0));
}
[Test]
public async Task GetList_ByPostId_WhenIdIsIncorrect_ShouldBadRequest_Test()
{
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getpostrecords?id=id&includeDeleted=true");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task GetList_ByBirthDate_ShouldSuccess_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1",
birthDate: DateTime.UtcNow.AddYears(-25));
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2",
birthDate: DateTime.UtcNow.AddYears(-21));
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3",
birthDate: DateTime.UtcNow.AddYears(-20), isDeleted: true);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4",
birthDate: DateTime.UtcNow.AddYears(-19));
//Act
var fromDate = DateTime.UtcNow.AddYears(-21).AddMinutes(-1).ToString("o");
var toDate = DateTime.UtcNow.AddYears(-20).AddMinutes(1).ToString("o");
var response = await HttpClient
.GetAsync($"/api/workers/getbirthdaterecords?fromDate={fromDate}&toDate={toDate}&includeDeleted=true");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(2));
});
}
[Test]
public async Task GetList_ByBirthDate_WhenDateIsIncorrect_ShouldBadRequest_Test()
{
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getbirthdaterecords?fromDate={DateTime.Now.
AddMinutes(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.AddMinutes(-
1):MM/dd/yyyy HH:mm:ss}&includeDeleted=true");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task GetList_ByEmploymentDate_ShouldSuccess_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 1", employmentDate: DateTime.UtcNow.AddDays(-2));
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 2", employmentDate: DateTime.UtcNow.AddDays(-1));
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 3", employmentDate: DateTime.UtcNow.AddDays(1), isDeleted: true);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(fio: "fio 4", employmentDate: DateTime.UtcNow.AddDays(2));
//Act
var response = await HttpClient.GetAsync($"/api/workers/getemploymentrecords?fromDate={DateTime.Now.AddDays(-1).AddMinutes(-1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.AddDays(1).AddMinutes(1):MM/dd/yyyy HH:mm:ss}&includeDeleted=true");
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<WorkerViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(2));
});
}
[Test]
public async Task GetList_ByEmploymentDate_WhenDateIsIncorrect_ShouldBadRequest_Test()
{
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getemploymentrecords?fromDate={DateTime.Now
.AddMinutes(1):MM/dd/yyyy HH:mm:ss}&toDate={DateTime.Now.AddMinutes(-
1):MM/dd/yyyy HH:mm:ss}&includeDeleted=true");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
{
//Arrange
var worker =
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId:
_post.PostId).AddPost(_post);
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getrecord/{worker.Id}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
AssertElement(await
GetModelFromResponseAsync<WorkerViewModel>(response), worker);
}
[Test]
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getrecord/{Guid.NewGuid()}");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public async Task GetElement_ById_WhenRecordWasDeleted_ShouldNotFound_Test()
{
//Arrange
var worker =
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: _post.PostId,
isDeleted: true);
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getrecord/{worker.Id}");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public async Task GetElement_ByFIO_WhenHaveRecord_ShouldSuccess_Test()
{
//Arrange
var worker =
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: _post.PostId).AddPost(_post);
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getrecord/{worker.FIO}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
AssertElement(await
GetModelFromResponseAsync<WorkerViewModel>(response), worker);
}
[Test]
public async Task GetElement_ByFIO_WhenNoRecord_ShouldNotFound_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getrecord/New%20Fio");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public async Task GetElement_ByFIO_WhenRecordWasDeleted_ShouldNotFound_Test()
{
//Arrange
var worker =
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(postId: _post.PostId,
isDeleted: true);
//Act
var response = await
HttpClient.GetAsync($"/api/workers/getrecord/{worker.FIO}");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.NotFound));
}
[Test]
public async Task Post_ShouldSuccess_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
var workerModel = CreateModel(_post.Id);
//Act
var response = await HttpClient.PostAsync($"/api/workers/register",
MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.NoContent));
AssertElement(SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!
), workerModel);
}
[Test]
public async Task Post_WhenHaveRecordWithSameId_ShouldBadRequest_Test()
{
//Arrange
var workerModel = CreateModel(_post.Id);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id);
//Act
var response = await HttpClient.PostAsync($"/api/workers/register", MakeContent(workerModel));
var responseContent = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Response: {response.StatusCode}, Content: {responseContent}");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.InternalServerError));
}
[Test]
public async Task Post_WhenDataIsIncorrect_ShouldBadRequest_Test()
{
//Arrange
var workerModelWithIdIncorrect = new WorkerBindingModel
{
Id = "Id",
FIO = "fio",
BirthDate = DateTime.UtcNow.AddYears(-22),
EmploymentDate =
DateTime.UtcNow.AddDays(-5),
PostId = _post.Id
};
var workerModelWithFioIncorrect = new WorkerBindingModel
{
Id =
Guid.NewGuid().ToString(),
FIO = string.Empty,
BirthDate =
DateTime.UtcNow.AddYears(-22),
EmploymentDate = DateTime.UtcNow.AddDays(-5),
PostId = _post.Id
};
var workerModelWithPostIdIncorrect = new WorkerBindingModel
{
Id =
Guid.NewGuid().ToString(),
FIO = "fio",
BirthDate = DateTime.UtcNow.AddYears(-
22),
EmploymentDate = DateTime.UtcNow.AddDays(-5),
PostId = "Id"
};
var workerModelWithBirthDateIncorrect = new WorkerBindingModel
{
Id =
Guid.NewGuid().ToString(),
FIO = "fio",
BirthDate = DateTime.UtcNow.AddYears(-
15),
EmploymentDate = DateTime.UtcNow.AddDays(-5),
PostId = _post.Id
};
//Act
var responseWithIdIncorrect = await
HttpClient.PostAsync($"/api/workers/register",
MakeContent(workerModelWithIdIncorrect));
var responseWithFioIncorrect = await
HttpClient.PostAsync($"/api/workers/register",
MakeContent(workerModelWithFioIncorrect));
var responseWithPostIdIncorrect = await
HttpClient.PostAsync($"/api/workers/register",
MakeContent(workerModelWithPostIdIncorrect));
var responseWithBirthDateIncorrect = await
HttpClient.PostAsync($"/api/workers/register",
MakeContent(workerModelWithBirthDateIncorrect));
//Assert
Assert.Multiple(() =>
{
Assert.That(responseWithIdIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
Assert.That(responseWithFioIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "Fio is incorrect");
Assert.That(responseWithPostIdIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "PostId is incorrect");
Assert.That(responseWithBirthDateIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "BirthDate is incorrect");
});
}
[Test]
public async Task Post_WhenSendEmptyData_ShouldBadRequest_Test()
{
//Act
var response = await HttpClient.PostAsync($"/api/workers/register",
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/workers/register",
MakeContent(new { Data = "test", Position = 10 }));
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Put_ShouldSuccess_Test()
{
//Arrange
var workerModel = CreateModel(_post.Id);
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id);
//Act
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.NoContent));
SmallSoftwareDbContext.ChangeTracker.Clear();
AssertElement(SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!), workerModel);
}
[Test]
public async Task Put_WhenNoFoundRecord_ShouldBadRequest_Test()
{
//Arrange
var workerModel = CreateModel(_post.Id, fio: "new fio");
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
//Act
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Put_WhenRecordWasDeleted_ShouldBadRequest_Test()
{
//Arrange
var workerModel = CreateModel(_post.Id, fio: "new fio");
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id,
isDeleted: true);
//Act
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Put_WhenDataIsIncorrect_ShouldBadRequest_Test()
{
//Arrange
var workerModelWithIdIncorrect = new WorkerBindingModel
{
Id = "Id",
FIO = "fio",
BirthDate = DateTime.UtcNow.AddYears(-22),
EmploymentDate =
DateTime.UtcNow.AddDays(-5),
PostId = _post.Id
};
var workerModelWithFioIncorrect = new WorkerBindingModel
{
Id =
Guid.NewGuid().ToString(),
FIO = string.Empty,
BirthDate =
DateTime.UtcNow.AddYears(-22),
EmploymentDate = DateTime.UtcNow.AddDays(-5),
PostId = _post.Id
};
var workerModelWithPostIdIncorrect = new WorkerBindingModel
{
Id =
Guid.NewGuid().ToString(),
FIO = "fio",
BirthDate = DateTime.UtcNow.AddYears(-
22),
EmploymentDate = DateTime.UtcNow.AddDays(-5),
PostId = "Id"
};
var workerModelWithBirthDateIncorrect = new WorkerBindingModel
{
Id =
Guid.NewGuid().ToString(),
FIO = "fio",
BirthDate = DateTime.UtcNow.AddYears(-
15),
EmploymentDate = DateTime.UtcNow.AddDays(-5),
PostId = _post.Id
};
//Act
var responseWithIdIncorrect = await
HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(workerModelWithIdIncorrect));
var responseWithFioIncorrect = await
HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(workerModelWithFioIncorrect));
var responseWithPostIdIncorrect = await
HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(workerModelWithPostIdIncorrect));
var responseWithBirthDateIncorrect = await
HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(workerModelWithBirthDateIncorrect));
//Assert
Assert.Multiple(() =>
{
Assert.That(responseWithIdIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "Id is incorrect");
Assert.That(responseWithFioIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "Fio is incorrect");
Assert.That(responseWithPostIdIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "PostId is incorrect");
Assert.That(responseWithBirthDateIncorrect.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest), "BirthDate is incorrect");
});
}
[Test]
public async Task Put_WhenSendEmptyData_ShouldBadRequest_Test()
{
//Act
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(string.Empty));
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Put_WhenSendWrongFormatData_ShouldBadRequest_Test()
{
//Act
var response = await HttpClient.PutAsync($"/api/workers/changeinfo",
MakeContent(new { Data = "test", Position = 10 }));
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Delete_ShouldSuccess_Test()
{
//Arrange
var workerId = Guid.NewGuid().ToString();
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerId);
//Act
var response = await
HttpClient.DeleteAsync($"/api/workers/delete/{workerId}");
SmallSoftwareDbContext.ChangeTracker.Clear();
//Assert
Assert.Multiple(() =>
{
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.NoContent));
Assert.That(SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerId)!.IsDeleted);
});
}
[Test]
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
{
//Arrange
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
//Act
var response = await
HttpClient.DeleteAsync($"/api/workers/delete/{Guid.NewGuid()}");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Delete_WhenSendWrongFormatData_ShouldBadRequest_Test()
{
//Act
var response = await
HttpClient.DeleteAsync($"/api/workers/delete/id");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task Delete_WhenRecordWasDeleted_ShouldBadRequest_Test()
{
//Arrange
var workerId =
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(isDeleted: true).Id;
//Act
var response = await
HttpClient.DeleteAsync($"/api/workers/delete/{workerId}");
//Assert
Assert.That(response.StatusCode,
Is.EqualTo(HttpStatusCode.BadRequest));
}
[Test]
public async Task GetRecords_WhenDifferentConfigTypes_ShouldSuccess_Test()
{
//Arrange
var postSimple = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
var postCashier = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(config: new CashierPostConfiguration()
{ SalePercent = 500 });
var postSupervisor = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(config: new SupervisorPostConfiguration()
{ PersonalCountTrendPremium = 20 });
//Act
var response = await HttpClient.GetAsync("/api/workers/getrecords");
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await GetModelFromResponseAsync<List<WorkerViewModel>>(response);
Assert.That(data, Is.Not.Null);
AssertElement(data.First(x => x.Id == postSimple.Id), postSimple);
AssertElement(data.First(x => x.Id == postCashier.Id), postCashier);
AssertElement(data.First(x => x.Id == postSupervisor.Id), postSupervisor);
}
[Test]
public async Task Post_WithCashierPostConfiguration_ShouldSuccess_Test()
{
//Arrange
var salePercent = 10;
var workerModel = CreateModel(postId: _post.PostId, configuration: JsonSerializer.Serialize(new CashierPostConfiguration()
{
SalePercent = salePercent,
Rate = 10
}));
//Act
var response = await HttpClient.PostAsync($"/api/workers/register", MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var element = SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!);
Assert.That(element, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(element.Configuration.Type, Is.EqualTo(typeof(CashierPostConfiguration).Name));
Assert.That((element.Configuration as CashierPostConfiguration)!.SalePercent, Is.EqualTo(salePercent));
});
}
[Test]
public async Task Post_WithSupervisorPostConfiguration_ShouldSuccess_Test()
{
//Arrange
var trendPremium = 20;
var workerModel = CreateModel(postId: _post.PostId, configuration: JsonSerializer.Serialize(new SupervisorPostConfiguration()
{ PersonalCountTrendPremium = trendPremium, Rate = 10 }));
//Act
var response = await HttpClient.PostAsync($"/api/workers/register", MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
var element = SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!);
Assert.That(element, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(element.Configuration.Type, Is.EqualTo(typeof(SupervisorPostConfiguration).Name));
Assert.That((element.Configuration as SupervisorPostConfiguration)!.PersonalCountTrendPremium, Is.EqualTo(trendPremium));
});
}
[Test]
public async Task Put_WithCashierPostConfiguration_ShouldSuccess_Test()
{
//Arrange
var salePercent = 10;
var workerModel = CreateModel(postId: _post.PostId, configuration: JsonSerializer.Serialize(new CashierPostConfiguration()
{
SalePercent = salePercent,
Rate = 10
}));
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id);
//Act
var response = await HttpClient.PutAsync($"/api/workers/changeinfo", MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
SmallSoftwareDbContext.ChangeTracker.Clear();
var element = SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!);
Assert.That(element, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(element.Configuration.Type,
Is.EqualTo(typeof(CashierPostConfiguration).Name));
Assert.That((element.Configuration as
CashierPostConfiguration)!.SalePercent, Is.EqualTo(salePercent));
});
}
[Test]
public async Task Put_WithSupervisorPostConfiguration_ShouldSuccess_Test()
{
//Arrange
var trendPremium = 20;
var worker = SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn();
var workerModel = CreateModel(postId: _post.Id, configuration: JsonSerializer.Serialize(new SupervisorPostConfiguration()
{
PersonalCountTrendPremium = trendPremium,
Rate = 10
}));
SmallSoftwareDbContext.InsertWorkerToDatabaseAndReturn(workerModel.Id);
//Act
var response = await HttpClient.PutAsync($"/api/workers/changeinfo", MakeContent(workerModel));
//Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
SmallSoftwareDbContext.ChangeTracker.Clear();
var element = SmallSoftwareDbContext.GetWorkerFromDatabaseById(workerModel.Id!);
Assert.That(element, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(element.Configuration.Type, Is.EqualTo(typeof(SupervisorPostConfiguration).Name));
Assert.That((element.Configuration as SupervisorPostConfiguration)!.PersonalCountTrendPremium, Is.EqualTo(trendPremium));
});
}
private static void AssertElement(WorkerViewModel? actual, Worker expected)
{
Assert.That(actual, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.PostId, Is.EqualTo(expected.PostId));
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
Assert.That(actual.BirthDate.ToString(),
Is.EqualTo(expected.BirthDate.ToString()));
Assert.That(actual.EmploymentDate.ToString(),
Is.EqualTo(expected.EmploymentDate.ToString()));
Assert.That(actual.IsDeleted, Is.EqualTo(expected.IsDeleted));
Assert.That(JsonNode.Parse(actual.Configuration)!["Type"]!.GetValue<string>(), Is.EqualTo(expected.Configuration.Type));
});
}
private static WorkerBindingModel CreateModel(string postId, string? id =
null, string fio = "fio", DateTime? birthDate = null, DateTime? employmentDate =
null, string? configuration = null)
{
return new()
{
Id = id ?? Guid.NewGuid().ToString(),
FIO = fio,
BirthDate = birthDate ?? DateTime.UtcNow.AddYears(-22),
EmploymentDate = employmentDate ?? DateTime.UtcNow.AddDays(-5),
PostId = postId,
ConfigurationJson = configuration ?? JsonSerializer.Serialize(new PostConfiguration() { Rate = 10 })
};
}
private static void AssertElement(Worker? actual, WorkerBindingModel
expected)
{
Assert.That(actual, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.PostId, Is.EqualTo(expected.PostId));
Assert.That(actual.FIO, Is.EqualTo(expected.FIO));
Assert.That(actual.BirthDate.ToString(), Is.EqualTo(expected.BirthDate.ToString()));
Assert.That(actual.EmploymentDate.ToString(), Is.EqualTo(expected.EmploymentDate.ToString()));
Assert.That(!actual.IsDeleted);
Assert.That(actual.Configuration.Type,
Is.EqualTo(JsonNode.Parse(expected.ConfigurationJson!)!["Type"]!.GetValue<string>()));
});
}
}