290 lines
14 KiB
C#
290 lines
14 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using SmallSoftwareContracts.DataModels;
|
|
using SmallSoftwareContracts.Enums;
|
|
using SmallSoftwareContracts.Exceptions;
|
|
using SmallSoftwareDatabase.Implementations;
|
|
using SmallSoftwareDatabase.Models;
|
|
using SmallSoftwareTests.Infrastructure;
|
|
using System.ComponentModel.DataAnnotations;
|
|
|
|
namespace SmallSoftwareTests.StoragesContracts;
|
|
|
|
internal class RequestStorageContractTests : BaseStorageContractTest
|
|
{
|
|
private RequestStorageContract _requesttStorageContract;
|
|
private Worker _worker;
|
|
private Software _software;
|
|
private Manufacturer _manufacturer;
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_requesttStorageContract = new RequestStorageContract(SmallSoftwareDbContext);
|
|
_manufacturer = InsertManufacturerToDatabaseAndReturn();
|
|
_worker = InsertWorkerToDatabaseAndReturn();
|
|
_software = InsertSoftwareToDatabaseAndReturn();
|
|
}
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
SmallSoftwareDbContext.RemoveRequestsFromDatabase();
|
|
SmallSoftwareDbContext.RemoveWorkersFromDatabase();
|
|
SmallSoftwareDbContext.RemoveSalariesFromDatabase();
|
|
SmallSoftwareDbContext.RemoveManufacturersFromDatabase();
|
|
}
|
|
[Test]
|
|
public void Try_GetList_WhenHaveRecords_Test()
|
|
{
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 5, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 10, softwares: [(_software.Id, 10, 1.2)]);
|
|
var list = _requesttStorageContract.GetList();
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(3));
|
|
AssertElement(list.First(x => x.Id == request.Id), request);
|
|
}
|
|
[Test]
|
|
public void Try_GetList_WhenNoRecords_Test()
|
|
{
|
|
var list = _requesttStorageContract.GetList();
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Is.Empty);
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByPeriod_Test()
|
|
{
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
var list = _requesttStorageContract.GetList(startDate:
|
|
DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1));
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(4));
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByWorkerId_Test()
|
|
{
|
|
var worker = InsertWorkerToDatabaseAndReturn("Other worker");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
|
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
|
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares:
|
|
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
var list = _requesttStorageContract.GetList(workerId: _worker.Id);
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(2));
|
|
Assert.That(list.All(x => x.WorkerId == _worker.Id));
|
|
}
|
|
|
|
[Test]
|
|
public void Try_GetList_BySoftwareId_Test()
|
|
{
|
|
var software = InsertSoftwareToDatabaseAndReturn("Other name");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
|
[(_software.Id, 5, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
|
[(_software.Id, 1, 1.2), (software.Id, 4, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares:
|
|
[(software.Id, 1, 1.2)]);
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "", 1, softwares:
|
|
[(software.Id, 1, 1.2), (_software.Id, 1, 1.2)]);
|
|
var list = _requesttStorageContract.GetList(softwareId: _software.Id);
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(3));
|
|
Assert.That(list.All(x => x.Softwares!.Any(y => y.SoftwareId ==
|
|
_software.Id)));
|
|
}
|
|
[Test]
|
|
public void Try_GetList_ByAllParameters_Test()
|
|
{
|
|
var worker = InsertWorkerToDatabaseAndReturn("Other worker");
|
|
var software = InsertSoftwareToDatabaseAndReturn("Other name");
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "test@mail.ru", 1, softwares: [(software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares: [(software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(worker.Id, "", 1, softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
var list = _requesttStorageContract.GetList(startDate:
|
|
DateTime.UtcNow.AddDays(-1), endDate: DateTime.UtcNow.AddDays(1), workerId:
|
|
_worker.Id, softwareId: _software.Id);
|
|
Assert.That(list, Is.Not.Null);
|
|
Assert.That(list, Has.Count.EqualTo(2));
|
|
}
|
|
[Test]
|
|
public void Try_GetElementById_WhenHaveRecord_Test()
|
|
{
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
|
softwares: [(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
AssertElement(_requesttStorageContract.GetElementById(request.Id), request);
|
|
}
|
|
[Test]
|
|
public void Try_GetElementById_WhenNoRecord_Test()
|
|
{
|
|
SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1, softwares:
|
|
[(_software.Id, 1, 1.2)], requestDate: DateTime.UtcNow.AddHours(-12));
|
|
Assert.That(() =>
|
|
_requesttStorageContract.GetElementById(Guid.NewGuid().ToString()), Is.Null);
|
|
}
|
|
[Test]
|
|
public void Try_GetElementById_WhenRecordHasCanceled_Test()
|
|
{
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
|
softwares: [(_software.Id, 1, 1.2)], isCancel: true);
|
|
AssertElement(_requesttStorageContract.GetElementById(request.Id), request);
|
|
}
|
|
[Test]
|
|
public void Try_AddElement_Test()
|
|
{
|
|
var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id,"", 0, false, [_software.Id], DateTime.UtcNow);
|
|
_requesttStorageContract.AddElement(request);
|
|
AssertElement(GetRequestFromDatabaseById(request.Id), request);
|
|
}
|
|
[Test]
|
|
public void Try_AddElement_WhenIsDeletedIsTrue_Test()
|
|
{
|
|
var request = CreateModel(Guid.NewGuid().ToString(), _worker.Id, "test@mail.ru", 1, true, [_software.Id], DateTime.UtcNow);
|
|
Assert.That(() => _requesttStorageContract.AddElement(request),Throws.Nothing);
|
|
AssertElement(GetRequestFromDatabaseById(request.Id), CreateModel(request.Id,
|
|
_worker.Id, "test@mail.ru", 1, false, [_software.Id], DateTime.UtcNow));
|
|
}
|
|
[Test]
|
|
public void Try_DelElement_Test()
|
|
{
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
|
softwares: [(_software.Id, 1, 1.2)], isCancel: false);
|
|
_requesttStorageContract.DelElement(request.Id);
|
|
var element = GetRequestFromDatabaseById(request.Id);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(element, Is.Not.Null);
|
|
Assert.That(element!.IsCancel);
|
|
});
|
|
}
|
|
[Test]
|
|
public void Try_DelElement_WhenNoRecordWithThisId_Test()
|
|
{
|
|
Assert.That(() =>
|
|
_requesttStorageContract.DelElement(Guid.NewGuid().ToString()),
|
|
Throws.TypeOf<ElementNotFoundException>());
|
|
}
|
|
[Test]
|
|
public void Try_DelElement_WhenRecordWasCanceled_Test()
|
|
{
|
|
var request = SmallSoftwareDbContext.InsertRequestToDatabaseAndReturn(_worker.Id, "test@mail.ru", 1,
|
|
softwares: [(_software.Id, 1, 1.2)], isCancel: true);
|
|
Assert.That(() => _requesttStorageContract.DelElement(request.Id),
|
|
Throws.TypeOf<ElementDeletedException>());
|
|
}
|
|
private Worker InsertWorkerToDatabaseAndReturn(string fio = "test")
|
|
{
|
|
var worker = new Worker()
|
|
{
|
|
Id = Guid.NewGuid().ToString(),
|
|
FIO =
|
|
fio,
|
|
PostId = Guid.NewGuid().ToString()
|
|
};
|
|
SmallSoftwareDbContext.Workers.Add(worker);
|
|
SmallSoftwareDbContext.SaveChanges();
|
|
return worker;
|
|
}
|
|
private Manufacturer InsertManufacturerToDatabaseAndReturn()
|
|
{
|
|
var manufacrurer = new Manufacturer()
|
|
{
|
|
Id =
|
|
Guid.NewGuid().ToString(),
|
|
ManufacturerName = "name"
|
|
};
|
|
SmallSoftwareDbContext.Manufacturers.Add(manufacrurer);
|
|
SmallSoftwareDbContext.SaveChanges();
|
|
return manufacrurer;
|
|
}
|
|
private Software InsertSoftwareToDatabaseAndReturn(string softwareName = "test",
|
|
SoftwareType softwareType = SoftwareType.Windows,
|
|
double price = 1, bool isDeleted = false)
|
|
{
|
|
var software = new Software()
|
|
{
|
|
Id = Guid.NewGuid().ToString(),
|
|
ManufacturerId = _manufacturer.Id,
|
|
SoftwareName = softwareName,
|
|
SoftwareType = softwareType,
|
|
Price = price,
|
|
IsDeleted = isDeleted
|
|
};
|
|
SmallSoftwareDbContext.Softwares.Add(software);
|
|
SmallSoftwareDbContext.SaveChanges();
|
|
return software;
|
|
}
|
|
private static void AssertElement(RequestDataModel? actual, Request expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
|
Assert.That(actual.WorkerId, Is.EqualTo(expected.WorkerId));
|
|
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 RequestDataModel CreateModel(string id, string workerId, string email, double sum, bool isCancel, List<string> softwareIds, DateTime requestDate)
|
|
{
|
|
var installationRequests = softwareIds.Select(x => new InstallationRequestDataModel(x, id, 1, 1.1)).ToList();
|
|
return new(id, workerId, email, isCancel, installationRequests, requestDate);
|
|
}
|
|
private Request? GetRequestFromDatabaseById(string id) =>
|
|
SmallSoftwareDbContext.Requests.Include(x => x.InstallationRequests).FirstOrDefault(x => x.Id == id);
|
|
private static void AssertElement(Request? actual, RequestDataModel expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
|
Assert.That(actual.WorkerId, Is.EqualTo(expected.WorkerId));
|
|
Assert.That(actual.IsCancel, Is.EqualTo(expected.IsCancel));
|
|
});
|
|
if (expected.Softwares is not null)
|
|
{
|
|
Assert.That(actual.InstallationRequests, Is.Not.Null);
|
|
Assert.That(actual.InstallationRequests, Has.Count.EqualTo(expected.Softwares.Count));
|
|
for (int i = 0; i < actual.InstallationRequests.Count; ++i)
|
|
{
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.InstallationRequests[i].SoftwareId,
|
|
Is.EqualTo(expected.Softwares[i].SoftwareId));
|
|
Assert.That(actual.InstallationRequests[i].Count,
|
|
Is.EqualTo(expected.Softwares[i].Count));
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Assert.That(actual.InstallationRequests, Is.Null);
|
|
}
|
|
|
|
}
|
|
} |