feat: новые тесты

Добавлены тесты для клерка, кредитной программы, валюты, вклада
This commit is contained in:
2025-04-29 15:34:46 +04:00
parent 46bfedef8d
commit 8d90b79a44
7 changed files with 372 additions and 1 deletions

View File

@@ -111,6 +111,7 @@ internal class DepositStorageContract : IDepositStorageContract
element.DepositCurrencies = _mapper.Map<List<DepositCurrency>>(depositDataModel.Currencies);
}
_mapper.Map(depositDataModel, element);
_dbContext.SaveChanges();
transaction.Commit();
}

View File

@@ -89,6 +89,38 @@ internal static class BankDbContextExtension
return period;
}
public static Currency InsertCurrencyToDatabaseAndReturn(this BankDbContext dbContext, string? id = null, string? name = "pop", string? abbreviation = "rub", decimal cost = 10, string? storekeeperId = null)
{
var currency = new Currency()
{
Id = id ?? Guid.NewGuid().ToString(),
Name = name,
Abbreviation = abbreviation,
Cost = cost,
StorekeeperId = storekeeperId ?? Guid.NewGuid().ToString(),
};
dbContext.Currencies.Add(currency);
dbContext.SaveChanges();
return currency;
}
public static Deposit InsertDepositToDatabaseAndReturn(this BankDbContext dbContext, string? id = null, float interestRate = 1f, decimal cost = 10, int period = 1, string? clerkId = null)
{
var deposit = new Deposit()
{
Id = id ?? Guid.NewGuid().ToString(),
InterestRate = interestRate,
Cost = cost,
Period = period,
ClerkId = clerkId ?? Guid.NewGuid().ToString(),
};
dbContext.Deposits.Add(deposit);
dbContext.SaveChanges();
return deposit;
}
public static void RemoveCurrenciesFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Currencies\" CASCADE");
public static void RemoveClientsFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Clients\" CASCADE");
public static void RemoveStorekeepersFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Storekeepers\" CASCADE");
@@ -98,6 +130,8 @@ internal static class BankDbContextExtension
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 void RemoveDepositsFromDatabase(this BankDbContext dbContext) => dbContext.ExecuteSqlRaw("TRUNCATE \"Deposits\" CASCADE");
public static Client? GetClientFromDatabase(this BankDbContext dbContext, string id) => dbContext.Clients.FirstOrDefault(x => x.Id == id);
@@ -105,5 +139,9 @@ internal static class BankDbContextExtension
public static CreditProgram? GetCreditProgramFromDatabase(this BankDbContext dbContext, string id) => dbContext.CreditPrograms.FirstOrDefault(x => x.Id == id);
public static Currency? GetCurrencyFromDatabase(this BankDbContext dbContext, string id) => dbContext.Currencies.FirstOrDefault(x => x.Id == id);
public static Deposit? GetDepositFromDatabase(this BankDbContext dbContext, string id) => dbContext.Deposits.FirstOrDefault(x => x.Id == id);
private static void ExecuteSqlRaw(this BankDbContext dbContext, string command) => dbContext.Database.ExecuteSqlRaw(command);
}

View File

@@ -25,7 +25,7 @@ internal class ClerkStorageContractTests : BaseStorageContractTest
}
[Test]
public void TryGetListWhenHaveRecords_ShouldSucces_Test()
public void TryGetListWhenHaveRecords_ShouldSuccess_Test()
{
var clerk = BankDbContext.InsertClerkToDatabaseAndReturn();
BankDbContext.InsertClerkToDatabaseAndReturn(login: "xomyak", email: "email1@email.com", phone: "+9-888-888-88-88");

View File

@@ -1,4 +1,5 @@
using BankContracts.DataModels;
using BankContracts.Exceptions;
using BankContracts.StorageContracts;
using BankDatabase.Implementations;
using BankDatabase.Models;
@@ -68,6 +69,29 @@ internal class CreditProgramStorageContractTests : BaseStorageContractTest
AssertElement(BankDbContext.GetCreditProgramFromDatabase(credit.Id), credit);
}
[Test]
public void Try_AddElement_WhenHaveRecordWithSameName_Test()
{
var credit = CreateModel(name: "1", storekeeperId: _storekeeperId, periodId: _periodId);
BankDbContext.InsertCreditProgramToDatabaseAndReturn(name: "1", periodId: _periodId, storeleeperId: _storekeeperId);
Assert.That(() => _storageContract.AddElement(credit), Throws.TypeOf<ElementExistsException>());
}
[Test]
public void Try_UpdElement_Test()
{
var credit = CreateModel(name: "unique name", periodId: _periodId, storekeeperId: _storekeeperId);
BankDbContext.InsertCreditProgramToDatabaseAndReturn(credit.Id, periodId: _periodId, storeleeperId: _storekeeperId);
_storageContract.UpdElement(credit);
AssertElement(BankDbContext.GetCreditProgramFromDatabase(credit.Id), credit);
}
[Test]
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
{
Assert.That(() => _storageContract.UpdElement(CreateModel(storekeeperId: _storekeeperId, periodId: _periodId)), Throws.TypeOf<ElementNotFoundException>());
}
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 ?? []);

View File

@@ -0,0 +1,134 @@
using BankContracts.DataModels;
using BankContracts.Exceptions;
using BankContracts.StorageContracts;
using BankDatabase.Implementations;
using BankDatabase.Models;
using BankTests.Infrastructure;
namespace BankTests.StorageContactsTests;
[TestFixture]
internal class CurrencyStorageContractTests : BaseStorageContractTest
{
private ICurrencyStorageContract _storageContract;
private string _storekeeperId;
[SetUp]
public void SetUp()
{
_storageContract = new CurrencyStorageContract(BankDbContext);
_storekeeperId = BankDbContext.InsertStorekeeperToDatabaseAndReturn().Id;
}
[TearDown]
public void TearDown()
{
BankDbContext.RemoveCurrenciesFromDatabase();
BankDbContext.RemoveStorekeepersFromDatabase();
}
[Test]
public void TryGetListWhenHaveRecords_ShouldSuccess_Test()
{
var currency = BankDbContext.InsertCurrencyToDatabaseAndReturn(storekeeperId: _storekeeperId);
BankDbContext.InsertCurrencyToDatabaseAndReturn(abbreviation: "$", storekeeperId: _storekeeperId);
BankDbContext.InsertCurrencyToDatabaseAndReturn(abbreviation: "eur", storekeeperId: _storekeeperId);
var list = _storageContract.GetList();
Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3));
AssertElement(_storageContract.GetElementById(currency.Id), currency);
}
[Test]
public void Try_GetElementById_WhenHaveRecord_Test()
{
var currency = BankDbContext.InsertCurrencyToDatabaseAndReturn(storekeeperId: _storekeeperId);
AssertElement(_storageContract.GetElementById(currency.Id), currency);
}
[Test]
public void Try_GetElementByAbbreviation_WhenHaveRecord_Test()
{
var currency = BankDbContext.InsertCurrencyToDatabaseAndReturn(abbreviation: "X", storekeeperId: _storekeeperId);
AssertElement(_storageContract.GetElementByAbbreviation(currency.Abbreviation), currency);
}
[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_AddElement_Test()
{
var currency = CreateModel(storekeeperId: _storekeeperId);
_storageContract.AddElement(currency);
AssertElement(BankDbContext.GetCurrencyFromDatabase(currency.Id), currency);
}
[Test]
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
{
var currency = CreateModel(storekeeperId: _storekeeperId);
BankDbContext.InsertCurrencyToDatabaseAndReturn(id: currency.Id, storekeeperId: _storekeeperId);
Assert.That(() => _storageContract.AddElement(currency), Throws.TypeOf<ElementExistsException>());
}
[Test]
public void Try_AddElement_WhenHaveRecordWithSameAbbreviation_Test()
{
var currency = CreateModel(storekeeperId: _storekeeperId, abbreviation: "хамстер коин");
BankDbContext.InsertCurrencyToDatabaseAndReturn(storekeeperId: _storekeeperId, abbreviation: currency.Abbreviation);
Assert.That(() => _storageContract.AddElement(currency), Throws.TypeOf<ElementExistsException>());
}
[Test]
public void Try_UpdElement_Test()
{
var currency = CreateModel(storekeeperId: _storekeeperId, abbreviation: "хамстер коин");
BankDbContext.InsertCurrencyToDatabaseAndReturn(id: currency.Id, storekeeperId: _storekeeperId);
_storageContract.UpdElement(currency);
AssertElement(BankDbContext.GetCurrencyFromDatabase(currency.Id), currency);
}
[Test]
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
{
Assert.That(() => _storageContract.UpdElement(CreateModel()), Throws.TypeOf<ElementNotFoundException>());
}
private static CurrencyDataModel CreateModel(string? id = null, string? name = "pop", string? abbreviation = "rub", decimal cost = 10, string? storekeeperId = null)
=> new(id ?? Guid.NewGuid().ToString(), name, abbreviation, cost, storekeeperId ?? Guid.NewGuid().ToString());
private static void AssertElement(CurrencyDataModel actual, Currency? 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.Abbreviation, Is.EqualTo(expected.Abbreviation));
Assert.That(actual.Cost, Is.EqualTo(expected.Cost));
Assert.That(actual.StorekeeperId, Is.EqualTo(expected.StorekeeperId));
});
}
private static void AssertElement(Currency actual, CurrencyDataModel? 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.Abbreviation, Is.EqualTo(expected.Abbreviation));
Assert.That(actual.Cost, Is.EqualTo(expected.Cost));
Assert.That(actual.StorekeeperId, Is.EqualTo(expected.StorekeeperId));
});
}
}

View File

@@ -0,0 +1,122 @@
using BankContracts.DataModels;
using BankContracts.Exceptions;
using BankContracts.StorageContracts;
using BankDatabase.Implementations;
using BankDatabase.Models;
using BankTests.Infrastructure;
namespace BankTests.StorageContactsTests;
[TestFixture]
internal class DepositStorageContractTests : BaseStorageContractTest
{
private IDepositStorageContract _storageContract;
private string _clerkId;
[SetUp]
public void SetUp()
{
_storageContract = new DepositStorageContract(BankDbContext);
_clerkId = BankDbContext.InsertClerkToDatabaseAndReturn().Id;
}
[TearDown]
public void TearDown()
{
BankDbContext.RemoveDepositsFromDatabase();
BankDbContext.RemoveClerksFromDatabase();
}
[Test]
public void TryGetListWhenHaveRecords_ShouldSuccess_Test()
{
var deposit = BankDbContext.InsertDepositToDatabaseAndReturn(clerkId: _clerkId);
BankDbContext.InsertDepositToDatabaseAndReturn(clerkId: _clerkId);
BankDbContext.InsertDepositToDatabaseAndReturn(clerkId: _clerkId);
var list = _storageContract.GetList();
Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(x => x.Id == deposit.Id), deposit);
}
[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 deposit = BankDbContext.InsertDepositToDatabaseAndReturn(clerkId: _clerkId);
AssertElement(_storageContract.GetElementById(deposit.Id), deposit);
}
[Test]
public void Try_AddElement_Test()
{
var deposit = CreateModel(clerkId: _clerkId);
_storageContract.AddElement(deposit);
AssertElement(BankDbContext.GetDepositFromDatabase(deposit.Id), deposit);
}
[Test]
public void Try_AddElement_WhenHaveRecordWithSameId_Test()
{
var deposit = CreateModel(clerkId: _clerkId);
BankDbContext.InsertDepositToDatabaseAndReturn(id: deposit.Id, clerkId: _clerkId);
Assert.That(() => _storageContract.AddElement(deposit), Throws.TypeOf<ElementExistsException>());
}
[Test]
public void Try_UpdElement_Test()
{
var deposit = CreateModel(clerkId: _clerkId);
BankDbContext.InsertDepositToDatabaseAndReturn(id: deposit.Id, clerkId: _clerkId);
_storageContract.UpdElement(deposit);
AssertElement(BankDbContext.GetDepositFromDatabase(deposit.Id), deposit);
}
[Test]
public void Try_UpdElement_WhenNoRecordWithThisId_Test()
{
Assert.That(() => _storageContract.UpdElement(CreateModel(clerkId: _clerkId)), Throws.TypeOf<ElementNotFoundException>());
}
private static DepositDataModel CreateModel(string? id = null, float interestRate = 10, decimal cost = 10, int period = 10, string? clerkId = null, List<DepositCurrencyDataModel>? deposits = null)
=> new (id ?? Guid.NewGuid().ToString(), interestRate, cost, period, clerkId ?? Guid.NewGuid().ToString(), deposits ?? []);
private static void AssertElement(DepositDataModel actual, Deposit? expected)
{
Assert.That(expected, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.InterestRate, Is.EqualTo(expected.InterestRate));
Assert.That(actual.Cost, Is.EqualTo(expected.Cost));
Assert.That(actual.Period, Is.EqualTo(expected.Period));
Assert.That(actual.ClerkId, Is.EqualTo(expected.ClerkId));
});
}
private static void AssertElement(Deposit actual, DepositDataModel? expected)
{
Assert.That(expected, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.InterestRate, Is.EqualTo(expected.InterestRate));
Assert.That(actual.Cost, Is.EqualTo(expected.Cost));
Assert.That(actual.Period, Is.EqualTo(expected.Period));
Assert.That(actual.ClerkId, Is.EqualTo(expected.ClerkId));
});
}
}

View File

@@ -0,0 +1,52 @@
using BankContracts.DataModels;
using BankContracts.StorageContracts;
using BankDatabase.Implementations;
using BankDatabase.Models;
using BankTests.Infrastructure;
namespace BankTests.StorageContactsTests;
[TestFixture]
internal class PeriodStorageContractTests : BaseStorageContractTest
{
private IPeriodStorageContract _storageContract;
private string _storekeeperId;
[SetUp]
public void SetUp()
{
_storageContract = new PeriodStorageContract(BankDbContext);
_storekeeperId = BankDbContext.InsertStorekeeperToDatabaseAndReturn().Id;
}
[TearDown]
public void TearDown()
{
BankDbContext.RemovePeriodsFromDatabase();
BankDbContext.RemoveStorekeepersFromDatabase();
}
[Test]
public void TryGetListWhenHaveRecords_ShouldSuccess_Test()
{
var period = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: _storekeeperId);
var list = _storageContract.GetList();
Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(x => x.Id == period.Id), period);
}
private static void AssertElement(PeriodDataModel actual, Period? expected)
{
Assert.That(expected, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(actual.Id, Is.EqualTo(expected.Id));
Assert.That(actual.StartTime, Is.EqualTo(expected.StartTime));
Assert.That(actual.EndTime, Is.EqualTo(expected.EndTime));
Assert.That(actual.StorekeeperId, Is.EqualTo(expected.StorekeeperId));
});
}
}