feat: новые тесты
Добавлены тесты для клерка, кредитной программы, валюты, вклада
This commit is contained in:
@@ -111,6 +111,7 @@ internal class DepositStorageContract : IDepositStorageContract
|
||||
|
||||
element.DepositCurrencies = _mapper.Map<List<DepositCurrency>>(depositDataModel.Currencies);
|
||||
}
|
||||
_mapper.Map(depositDataModel, element);
|
||||
_dbContext.SaveChanges();
|
||||
transaction.Commit();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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 ?? []);
|
||||
|
||||
|
||||
@@ -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));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user