feat: создание проекта тестов
добавление двух с половиной классов тестов, пока не проверяет многие ко многим
This commit is contained in:
@@ -5,6 +5,7 @@ using BankContracts.Exceptions;
|
||||
using BankContracts.Extensions;
|
||||
using BankContracts.StorageContracts;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using static System.Single;
|
||||
|
||||
namespace BankBusinessLogic.Implementations;
|
||||
|
||||
@@ -57,8 +58,10 @@ internal class DepositBusinessLogicContract(
|
||||
return _depositStorageContract.GetElementById(data)
|
||||
?? throw new ElementNotFoundException($"element not found: {data}");
|
||||
}
|
||||
return _depositStorageContract.GetElementByInterestRate(data)
|
||||
?? throw new ElementNotFoundException($"element not found: {data}");
|
||||
return TryParse(data, out var result) // пофиксить!!!
|
||||
? _depositStorageContract.GetElementByInterestRate(result) ??
|
||||
throw new ElementNotFoundException($"element not found: {data}")
|
||||
: throw new ElementNotFoundException($"element not found: {data}");
|
||||
}
|
||||
|
||||
public void InsertDeposit(DepositDataModel depositDataModel)
|
||||
|
||||
@@ -120,6 +120,11 @@ internal class ClerkStorageContract : IClerkStorageContract
|
||||
_dbContext.Clerks.Update(_mapper.Map(clerkDataModel, element));
|
||||
_dbContext.SaveChanges();
|
||||
}
|
||||
catch (ElementNotFoundException)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw;
|
||||
}
|
||||
catch (DbUpdateException ex) when (ex.InnerException is PostgresException { ConstraintName: "IX_Clerks_Email" })
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
|
||||
@@ -31,7 +31,7 @@ internal class ClientStorageContract : IClientStorageContract
|
||||
{
|
||||
try
|
||||
{
|
||||
var query = _dbContext.Deposits.Include(x => x.Clerk).AsQueryable();
|
||||
var query = _dbContext.Clients.Include(x => x.Clerk).AsQueryable();
|
||||
if (clerkId is not null)
|
||||
{
|
||||
query = query.Where(x => x.ClerkId == clerkId);
|
||||
@@ -137,6 +137,7 @@ internal class ClientStorageContract : IClientStorageContract
|
||||
element.DepositClients = _mapper.Map<List<DepositClient>>(clientDataModel.Deposits);
|
||||
element.DepositClients = _mapper.Map<List<DepositClient>>(clientDataModel.CreditPrograms);
|
||||
}
|
||||
_mapper.Map(element, clientDataModel);
|
||||
_dbContext.SaveChanges();
|
||||
transaction.Commit();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using BankDatabase.Models;
|
||||
using BankDatabase;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace BankTests.Infrastructure;
|
||||
|
||||
@@ -24,9 +25,85 @@ internal static class BankDbContextExtension
|
||||
return clerck;
|
||||
}
|
||||
|
||||
public static Client InsertClientToDatabaseAndReturn(this BankDbContext dbContext, string? id = null, string? name = "slava", string? surname = "fomichev", decimal balance = 1_000_000, string? clerkId = null)
|
||||
{
|
||||
var client = new Client()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
Name = name,
|
||||
Surname = surname,
|
||||
Balance = balance,
|
||||
ClerkId = clerkId ?? Guid.NewGuid().ToString(),
|
||||
};
|
||||
dbContext.Clients.Add( client );
|
||||
dbContext.SaveChanges();
|
||||
return client;
|
||||
}
|
||||
|
||||
public static CreditProgram InsertCreditProgramToDatabaseAndReturn(this BankDbContext dbContext, string? id = null, string? name = "bankrot", decimal cost = 1_000_000, decimal maxCost = 10_000_000, string? storeleeperId = null, string? periodId = null)
|
||||
{
|
||||
var creditProgram = new CreditProgram()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
Name = name,
|
||||
Cost = cost,
|
||||
MaxCost = maxCost,
|
||||
StorekeeperId = storeleeperId ?? Guid.NewGuid().ToString(),
|
||||
PeriodId = periodId ?? Guid.NewGuid().ToString(),
|
||||
};
|
||||
dbContext.CreditPrograms.Add(creditProgram);
|
||||
dbContext.SaveChanges();
|
||||
return creditProgram;
|
||||
}
|
||||
|
||||
public static Storekeeper InsertStorekeeperToDatabaseAndReturn(this BankDbContext dbContext,
|
||||
string? id = null, string? name = "slava", string? surname = "fomichev", string? middlename = "sergeevich", string? login = "xomyak", string? password = "****", string? email = "email@email.com", string? phone = "+9-888-888-88-88")
|
||||
{
|
||||
var storekeeper = new Storekeeper()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
Name = name,
|
||||
Surname = surname,
|
||||
MiddleName = middlename,
|
||||
Login = login,
|
||||
Password = password,
|
||||
Email = email,
|
||||
PhoneNumber = phone,
|
||||
};
|
||||
dbContext.Storekeepers.Add(storekeeper);
|
||||
dbContext.SaveChanges();
|
||||
return storekeeper;
|
||||
}
|
||||
|
||||
public static Period InsertPeriodToDatabaseAndReturn(this BankDbContext dbContext, string? id = null, DateTime? start = null, DateTime? end = null, string? storekeeperId = null)
|
||||
{
|
||||
var period = new Period()
|
||||
{
|
||||
Id = id ?? Guid.NewGuid().ToString(),
|
||||
StartTime = start ?? DateTime.UtcNow,
|
||||
EndTime = end ?? DateTime.UtcNow,
|
||||
StorekeeperId = storekeeperId ?? Guid.NewGuid().ToString()
|
||||
};
|
||||
dbContext.Periods.Add(period);
|
||||
dbContext.SaveChanges();
|
||||
return period;
|
||||
}
|
||||
|
||||
public static void RemoveClientsFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Clients\" CASCADE");
|
||||
|
||||
public static void RemoveStorekeepersFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Storekeepers\" CASCADE");
|
||||
|
||||
public static void RemovePeriodsFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Periods\" CASCADE");
|
||||
|
||||
public static void RemoveClerksFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Clerks\" CASCADE");
|
||||
|
||||
public static void RemoveCreditProgramsFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"CreditPrograms\" CASCADE");
|
||||
|
||||
public static Client? GetClientFromDatabase(this BankDbContext dbContext, string id) => dbContext.Clients.FirstOrDefault(x => x.Id == id);
|
||||
|
||||
public static Clerk? GetClerkFromDatabase(this BankDbContext dbContext, string id) => dbContext.Clerks.FirstOrDefault(x => x.Id == id);
|
||||
|
||||
public static CreditProgram? GetCreditProgramFromDatabase(this BankDbContext dbContext, string id) => dbContext.CreditPrograms.FirstOrDefault(x => x.Id == id);
|
||||
|
||||
private static void ExecuteSqlRaw(this BankDbContext dbContext, string command) => dbContext.Database.ExecuteSqlRaw(command);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ using BankContracts.StorageContracts;
|
||||
using BankDatabase.Implementations;
|
||||
using BankDatabase.Models;
|
||||
using BankTests.Infrastructure;
|
||||
using Microsoft.VisualStudio.CodeCoverage;
|
||||
|
||||
namespace BankTests.StorageContactsTests;
|
||||
|
||||
@@ -49,8 +48,8 @@ internal class ClerkStorageContractTests : BaseStorageContractTest
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var certificate = BankDbContext.InsertClerkToDatabaseAndReturn();
|
||||
AssertElement(_storageContract.GetElementById(certificate.Id), certificate);
|
||||
var clerk = BankDbContext.InsertClerkToDatabaseAndReturn();
|
||||
AssertElement(_storageContract.GetElementById(clerk.Id), clerk);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -69,6 +68,37 @@ internal class ClerkStorageContractTests : BaseStorageContractTest
|
||||
Assert.That(() => _storageContract.AddElement(clerk), Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_WhenHaveRecordWithSameEmail_Test()
|
||||
{
|
||||
var clerk = CreateModel();
|
||||
BankDbContext.InsertClerkToDatabaseAndReturn(email: clerk.Email);
|
||||
Assert.That(() => _storageContract.AddElement(clerk), Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_WhenHaveRecordWithSameLogin_Test()
|
||||
{
|
||||
var clerk = CreateModel(login: "cheburek");
|
||||
BankDbContext.InsertClerkToDatabaseAndReturn(email: "email@email.ru", login: "cheburek");
|
||||
Assert.That(() => _storageContract.AddElement(clerk), Throws.TypeOf<ElementExistsException>());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_Test()
|
||||
{
|
||||
var clerk = CreateModel();
|
||||
BankDbContext.InsertClerkToDatabaseAndReturn(clerk.Id, name: "Женя");
|
||||
_storageContract.UpdElement(clerk);
|
||||
AssertElement(BankDbContext.GetClerkFromDatabase(clerk.Id), clerk);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
|
||||
{
|
||||
Assert.That(() => _storageContract.UpdElement(CreateModel()), Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
|
||||
private static ClerkDataModel CreateModel(string? id = null, string? name = "vasya", string? surname = "petrov", string? middlename = "petrovich", string? login = "vasyapupkin", string? passwd = "*******", string? email = "email@email.com", string? phone = "+7-777-777-77-77")
|
||||
=> new (id ?? Guid.NewGuid().ToString(), name, surname, middlename, login, passwd, email, phone);
|
||||
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
using BankContracts.DataModels;
|
||||
using BankContracts.Exceptions;
|
||||
using BankContracts.StorageContracts;
|
||||
using BankDatabase.Implementations;
|
||||
using BankDatabase.Models;
|
||||
using BankTests.Infrastructure;
|
||||
|
||||
namespace BankTests.StorageContactsTests;
|
||||
|
||||
[TestFixture]
|
||||
internal class ClientStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
private string _clerkId;
|
||||
|
||||
private IClientStorageContract _clientStorageContract;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_clerkId = BankDbContext.InsertClerkToDatabaseAndReturn().Id;
|
||||
_clientStorageContract = new ClientStorageContract(BankDbContext);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
BankDbContext.RemoveClientsFromDatabase();
|
||||
BankDbContext.RemoveClerksFromDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryGetListWhenHaveRecords_ShouldSucces_Test()
|
||||
{
|
||||
var client = BankDbContext.InsertClientToDatabaseAndReturn(clerkId: _clerkId);
|
||||
BankDbContext.InsertClientToDatabaseAndReturn(clerkId: _clerkId);
|
||||
BankDbContext.InsertClientToDatabaseAndReturn(clerkId: _clerkId);
|
||||
|
||||
var list = _clientStorageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(3));
|
||||
AssertElement(list.First(x => x.Id == client.Id), client);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryGetList_WhenNoRecords_Test()
|
||||
{
|
||||
var list = _clientStorageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Is.Empty);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryGetList_ByClerk_WhenHaveRecords_Test()
|
||||
{
|
||||
var clerk = BankDbContext.InsertClerkToDatabaseAndReturn(email: "slava@ilya.com", login: "login",phone: "+7-987-555-55-55");
|
||||
|
||||
BankDbContext.InsertClientToDatabaseAndReturn(clerkId: clerk.Id);
|
||||
BankDbContext.InsertClientToDatabaseAndReturn(clerkId: clerk.Id);
|
||||
BankDbContext.InsertClientToDatabaseAndReturn(clerkId: clerk.Id);
|
||||
BankDbContext.InsertClientToDatabaseAndReturn(clerkId: clerk.Id);
|
||||
|
||||
var list = _clientStorageContract.GetList(clerkId: clerk.Id);
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(4));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var client = BankDbContext.InsertClientToDatabaseAndReturn(clerkId: _clerkId);
|
||||
AssertElement(_clientStorageContract.GetElementById(client.Id), client);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_Test()
|
||||
{
|
||||
var client = CreateModel(_clerkId);
|
||||
_clientStorageContract.AddElement(client);
|
||||
AssertElement(BankDbContext.GetClientFromDatabase(client.Id), client);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_Test()
|
||||
{
|
||||
var client = CreateModel(_clerkId);
|
||||
BankDbContext.InsertClientToDatabaseAndReturn(id: client.Id, clerkId: _clerkId);
|
||||
_clientStorageContract.UpdElement(client);
|
||||
AssertElement(BankDbContext.GetClientFromDatabase(client.Id), client);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
|
||||
{
|
||||
Assert.That(() => _clientStorageContract.UpdElement(CreateModel(_clerkId)), Throws.TypeOf<ElementNotFoundException>());
|
||||
}
|
||||
|
||||
private static ClientDataModel CreateModel(string clerkid, string? id = null, string? name = "null", string? surname = "surname", decimal balance = 1, List<DepositClientDataModel>? depositClients = null, List<ClientCreditProgramDataModel>? clientCredits = null)
|
||||
=> new(id ?? Guid.NewGuid().ToString(), name, surname, balance, clerkid, depositClients ?? [], clientCredits ?? []);
|
||||
|
||||
private static void AssertElement(ClientDataModel actual, Client? expected)
|
||||
{
|
||||
Assert.That(expected, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.Name, Is.EqualTo(expected.Name));
|
||||
Assert.That(actual.Surname, Is.EqualTo(expected.Surname));
|
||||
Assert.That(actual.Balance, Is.EqualTo(expected.Balance));
|
||||
Assert.That(actual.ClerkId, Is.EqualTo(expected.ClerkId));
|
||||
});
|
||||
}
|
||||
|
||||
private static void AssertElement(Client actual, ClientDataModel? expected)
|
||||
{
|
||||
Assert.That(expected, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.Name, Is.EqualTo(expected.Name));
|
||||
Assert.That(actual.Surname, Is.EqualTo(expected.Surname));
|
||||
Assert.That(actual.Balance, Is.EqualTo(expected.Balance));
|
||||
Assert.That(actual.ClerkId, Is.EqualTo(expected.ClerkId));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
using BankContracts.DataModels;
|
||||
using BankContracts.StorageContracts;
|
||||
using BankDatabase.Implementations;
|
||||
using BankDatabase.Models;
|
||||
using BankTests.Infrastructure;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace BankTests.StorageContactsTests;
|
||||
|
||||
[TestFixture]
|
||||
internal class CreditProgramStorageContractTests : BaseStorageContractTest
|
||||
{
|
||||
private ICreditProgramStorageContract _storageContract;
|
||||
|
||||
private string _storekeeperId;
|
||||
|
||||
private string _periodId;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_storageContract = new CreditProgramStorageContract(BankDbContext);
|
||||
_storekeeperId = BankDbContext.InsertStorekeeperToDatabaseAndReturn().Id;
|
||||
_periodId = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: _storekeeperId).Id;
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
BankDbContext.RemoveCreditProgramsFromDatabase();
|
||||
BankDbContext.RemovePeriodsFromDatabase();
|
||||
BankDbContext.RemoveStorekeepersFromDatabase();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryGetListWhenHaveRecords_ShouldSucces_Test()
|
||||
{
|
||||
var clerk = BankDbContext.InsertCreditProgramToDatabaseAndReturn(storeleeperId: _storekeeperId, periodId: _periodId);
|
||||
BankDbContext.InsertCreditProgramToDatabaseAndReturn(name: "bankrot2", storeleeperId: _storekeeperId, periodId: _periodId);
|
||||
BankDbContext.InsertCreditProgramToDatabaseAndReturn(name: "bankrot3", storeleeperId: _storekeeperId, periodId: _periodId);
|
||||
|
||||
var list = _storageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Has.Count.EqualTo(3));
|
||||
AssertElement(list.First(x => x.Id == clerk.Id), clerk);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetList_WhenNoRecords_Test()
|
||||
{
|
||||
var list = _storageContract.GetList();
|
||||
Assert.That(list, Is.Not.Null);
|
||||
Assert.That(list, Is.Empty);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||
{
|
||||
var creditProgram = BankDbContext.InsertCreditProgramToDatabaseAndReturn(storeleeperId: _storekeeperId, periodId: _periodId);
|
||||
AssertElement(_storageContract.GetElementById(creditProgram.Id), creditProgram);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Try_AddElement_Test()
|
||||
{
|
||||
var credit = CreateModel(name: "unique name", periodId: _periodId, storekeeperId: _storekeeperId);
|
||||
_storageContract.AddElement(credit);
|
||||
AssertElement(BankDbContext.GetCreditProgramFromDatabase(credit.Id), credit);
|
||||
}
|
||||
|
||||
private static CreditProgramDataModel CreateModel(string? id = null, string? name = "name", decimal cost = 1, decimal maxCost = 2, string? storekeeperId = null, string? periodId = null, List<CreditProgramCurrencyDataModel>? currency = null)
|
||||
=> new(id ?? Guid.NewGuid().ToString(), name, cost, maxCost, storekeeperId ?? Guid.NewGuid().ToString(), periodId ?? Guid.NewGuid().ToString(), currency ?? []);
|
||||
|
||||
private static void AssertElement(CreditProgramDataModel actual, CreditProgram? expected)
|
||||
{
|
||||
Assert.That(expected, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.Name, Is.EqualTo(expected.Name));
|
||||
Assert.That(actual.Cost, Is.EqualTo(expected.Cost));
|
||||
Assert.That(actual.MaxCost, Is.EqualTo(expected.MaxCost));
|
||||
Assert.That(actual.StorekeeperId, Is.EqualTo(expected.StorekeeperId));
|
||||
Assert.That(actual.PeriodId, Is.EqualTo(expected.PeriodId));
|
||||
});
|
||||
}
|
||||
|
||||
private static void AssertElement(CreditProgram actual, CreditProgramDataModel? expected)
|
||||
{
|
||||
Assert.That(expected, Is.Not.Null);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(actual.Id, Is.EqualTo(expected.Id));
|
||||
Assert.That(actual.Name, Is.EqualTo(expected.Name));
|
||||
Assert.That(actual.Cost, Is.EqualTo(expected.Cost));
|
||||
Assert.That(actual.MaxCost, Is.EqualTo(expected.MaxCost));
|
||||
Assert.That(actual.StorekeeperId, Is.EqualTo(expected.StorekeeperId));
|
||||
Assert.That(actual.PeriodId, Is.EqualTo(expected.PeriodId));
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user