fix: изменение нэйминга, добавление тестов для отчетов
This commit is contained in:
@@ -89,7 +89,7 @@ internal static class BankDbContextExtension
|
|||||||
string? name = "bankrot",
|
string? name = "bankrot",
|
||||||
decimal cost = 1_000_000,
|
decimal cost = 1_000_000,
|
||||||
decimal maxCost = 10_000_000,
|
decimal maxCost = 10_000_000,
|
||||||
string? storeleeperId = null,
|
string? storekeeperId = null,
|
||||||
string? periodId = null,
|
string? periodId = null,
|
||||||
List<(string currencyId, string creditProgramId)>? creditProgramCurrency = null // Item1 = ClientId Item2 = CreditProgramId
|
List<(string currencyId, string creditProgramId)>? creditProgramCurrency = null // Item1 = ClientId Item2 = CreditProgramId
|
||||||
)
|
)
|
||||||
@@ -100,7 +100,7 @@ internal static class BankDbContextExtension
|
|||||||
Name = name,
|
Name = name,
|
||||||
Cost = cost,
|
Cost = cost,
|
||||||
MaxCost = maxCost,
|
MaxCost = maxCost,
|
||||||
StorekeeperId = storeleeperId ?? Guid.NewGuid().ToString(),
|
StorekeeperId = storekeeperId ?? Guid.NewGuid().ToString(),
|
||||||
PeriodId = periodId ?? Guid.NewGuid().ToString(),
|
PeriodId = periodId ?? Guid.NewGuid().ToString(),
|
||||||
};
|
};
|
||||||
dbContext.CreditPrograms.Add(creditProgram);
|
dbContext.CreditPrograms.Add(creditProgram);
|
||||||
|
|||||||
129
TheBank/BankTests/ReportContractTests/ReportContractTests.cs
Normal file
129
TheBank/BankTests/ReportContractTests/ReportContractTests.cs
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
using BankBusinessLogic.Implementations;
|
||||||
|
using BankBusinessLogic.OfficePackage;
|
||||||
|
using BankContracts.BusinessLogicContracts;
|
||||||
|
using BankContracts.DataModels;
|
||||||
|
using BankContracts.StorageContracts;
|
||||||
|
using BankDatabase.Implementations;
|
||||||
|
using BankTests.Infrastructure;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BankTests.ReportContractTests;
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
internal class ReportContractTestss
|
||||||
|
{
|
||||||
|
private ReportContract _reportContract;
|
||||||
|
private Mock<IClientStorageContract> _clientStorage;
|
||||||
|
private Mock<ICurrencyStorageContract> _currencyStorage;
|
||||||
|
private Mock<ICreditProgramStorageContract> _creditProgramStorage;
|
||||||
|
private Mock<IDepositStorageContract> _depositStorage;
|
||||||
|
private Mock<BaseWordBuilder> _baseWordBuilder;
|
||||||
|
private Mock<BaseExcelBuilder> _baseExcelBuilder;
|
||||||
|
private Mock<BasePdfBuilder> _basePdfBuilder;
|
||||||
|
|
||||||
|
[OneTimeSetUp]
|
||||||
|
public void OneTimeSetUp()
|
||||||
|
{
|
||||||
|
_clientStorage = new Mock<IClientStorageContract>();
|
||||||
|
_currencyStorage = new Mock<ICurrencyStorageContract>();
|
||||||
|
_creditProgramStorage = new Mock<ICreditProgramStorageContract>();
|
||||||
|
_depositStorage = new Mock<IDepositStorageContract>();
|
||||||
|
_baseWordBuilder = new Mock<BaseWordBuilder>();
|
||||||
|
_baseExcelBuilder = new Mock<BaseExcelBuilder>();
|
||||||
|
_basePdfBuilder = new Mock<BasePdfBuilder>();
|
||||||
|
_reportContract = new ReportContract(_clientStorage.Object, _currencyStorage.Object, _creditProgramStorage.Object, _depositStorage.Object,
|
||||||
|
_baseWordBuilder.Object, _baseExcelBuilder.Object, _basePdfBuilder.Object, new Mock<ILogger>().Object);
|
||||||
|
}
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void SetUp()
|
||||||
|
{
|
||||||
|
_clientStorage.Reset();
|
||||||
|
_currencyStorage.Reset();
|
||||||
|
_creditProgramStorage.Reset();
|
||||||
|
_depositStorage.Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task GetDataDepositByCreditProgramAsync_ReturnsData()
|
||||||
|
{
|
||||||
|
var ct = CancellationToken.None;
|
||||||
|
_creditProgramStorage.Setup(x => x.GetList(It.IsAny<string>(), It.IsAny<string>()))
|
||||||
|
.Returns(new List<CreditProgramDataModel>
|
||||||
|
{
|
||||||
|
new CreditProgramDataModel("1", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1", 100, 200, "sk", "p", new List<CreditProgramCurrencyDataModel>())
|
||||||
|
});
|
||||||
|
_depositStorage.Setup(x => x.GetList(It.IsAny<string>()))
|
||||||
|
.Returns(new List<DepositDataModel>
|
||||||
|
{
|
||||||
|
new DepositDataModel("d1", 5, 1000, 12, "cl", new List<DepositCurrencyDataModel>())
|
||||||
|
});
|
||||||
|
|
||||||
|
var result = await _reportContract.GetDataDepositByCreditProgramAsync(ct);
|
||||||
|
|
||||||
|
Assert.That(result, Is.Not.Null);
|
||||||
|
Assert.That(result.Count, Is.GreaterThanOrEqualTo(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task CreateDocumentDepositByCreditProgramAsync_CallsWordBuilder()
|
||||||
|
{
|
||||||
|
var ct = CancellationToken.None;
|
||||||
|
_creditProgramStorage.Setup(x => x.GetList(It.IsAny<string>(), It.IsAny<string>()))
|
||||||
|
.Returns(new List<CreditProgramDataModel>
|
||||||
|
{
|
||||||
|
new CreditProgramDataModel("1", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1", 100, 200, "sk", "p", new List<CreditProgramCurrencyDataModel>())
|
||||||
|
});
|
||||||
|
_depositStorage.Setup(x => x.GetList(It.IsAny<string>()))
|
||||||
|
.Returns(new List<DepositDataModel>
|
||||||
|
{
|
||||||
|
new DepositDataModel("d1", 5, 1000, 12, "cl", new List<DepositCurrencyDataModel>())
|
||||||
|
});
|
||||||
|
|
||||||
|
_baseWordBuilder.Setup(x => x.AddHeader(It.IsAny<string>())).Returns(_baseWordBuilder.Object);
|
||||||
|
_baseWordBuilder.Setup(x => x.AddTable(It.IsAny<int[]>(), It.IsAny<List<string[]>>())).Returns(_baseWordBuilder.Object);
|
||||||
|
_baseWordBuilder.Setup(x => x.Build()).Returns(new MemoryStream(Encoding.UTF8.GetBytes("test")));
|
||||||
|
|
||||||
|
var stream = await _reportContract.CreateDocumentDepositByCreditProgramAsync(ct);
|
||||||
|
|
||||||
|
Assert.That(stream, Is.Not.Null);
|
||||||
|
_baseWordBuilder.Verify(x => x.AddHeader(It.IsAny<string>()), Times.Once);
|
||||||
|
_baseWordBuilder.Verify(x => x.AddTable(It.IsAny<int[]>(), It.IsAny<List<string[]>>()), Times.Once);
|
||||||
|
_baseWordBuilder.Verify(x => x.Build(), Times.Once);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task CreateDocumentClientsByDepositAsync_CallsPdfBuilder()
|
||||||
|
{
|
||||||
|
var ct = CancellationToken.None;
|
||||||
|
var dateStart = new DateTime(2024, 1, 1);
|
||||||
|
var dateFinish = new DateTime(2024, 12, 31);
|
||||||
|
|
||||||
|
_clientStorage.Setup(x => x.GetList(It.IsAny<string>()))
|
||||||
|
.Returns(new List<ClientDataModel>
|
||||||
|
{
|
||||||
|
new("1", "<22><><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", 1000, "cl", new(), new())
|
||||||
|
});
|
||||||
|
_depositStorage.Setup(x => x.GetListAsync(dateStart, dateFinish, ct))
|
||||||
|
.ReturnsAsync(new List<DepositDataModel>
|
||||||
|
{
|
||||||
|
new("d1", 5, 1000, 12, "cl", new())
|
||||||
|
});
|
||||||
|
|
||||||
|
_basePdfBuilder.Setup(x => x.AddHeader(It.IsAny<string>())).Returns(_basePdfBuilder.Object);
|
||||||
|
_basePdfBuilder.Setup(x => x.AddParagraph(It.IsAny<string>())).Returns(_basePdfBuilder.Object);
|
||||||
|
_basePdfBuilder.Setup(x => x.CreateTable(It.IsAny<int[]>(), It.IsAny<List<string[]>>())).Returns(_basePdfBuilder.Object);
|
||||||
|
_basePdfBuilder.Setup(x => x.Build()).Returns(new MemoryStream(Encoding.UTF8.GetBytes("test")));
|
||||||
|
|
||||||
|
var stream = await _reportContract.CreateDocumentClientsByDepositAsync(dateStart, dateFinish, ct);
|
||||||
|
|
||||||
|
Assert.That(stream, Is.Not.Null);
|
||||||
|
_basePdfBuilder.Verify(x => x.AddHeader(It.IsAny<string>()), Times.Once);
|
||||||
|
_basePdfBuilder.Verify(x => x.AddParagraph(It.IsAny<string>()), Times.Once);
|
||||||
|
_basePdfBuilder.Verify(x => x.CreateTable(It.IsAny<int[]>(), It.IsAny<List<string[]>>()), Times.Once);
|
||||||
|
_basePdfBuilder.Verify(x => x.Build(), Times.Once);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -32,7 +32,7 @@ internal class ClientStorageContractTests : BaseStorageContractTest
|
|||||||
_periodId = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: _storekeeperId).Id;
|
_periodId = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: _storekeeperId).Id;
|
||||||
_creditProgramId = BankDbContext
|
_creditProgramId = BankDbContext
|
||||||
.InsertCreditProgramToDatabaseAndReturn(
|
.InsertCreditProgramToDatabaseAndReturn(
|
||||||
storeleeperId: _storekeeperId,
|
storekeeperId: _storekeeperId,
|
||||||
periodId: _periodId
|
periodId: _periodId
|
||||||
)
|
)
|
||||||
.Id;
|
.Id;
|
||||||
|
|||||||
@@ -42,18 +42,18 @@ internal class CreditProgramStorageContractTests : BaseStorageContractTest
|
|||||||
{
|
{
|
||||||
var creditProgramId = Guid.NewGuid().ToString();
|
var creditProgramId = Guid.NewGuid().ToString();
|
||||||
var creditProgram = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
var creditProgram = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
storeleeperId: _storekeeperId,
|
storekeeperId: _storekeeperId,
|
||||||
periodId: _periodId,
|
periodId: _periodId,
|
||||||
creditProgramCurrency: [( _currenyId, creditProgramId )]
|
creditProgramCurrency: [( _currenyId, creditProgramId )]
|
||||||
);
|
);
|
||||||
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
name: "bankrot2",
|
name: "bankrot2",
|
||||||
storeleeperId: _storekeeperId,
|
storekeeperId: _storekeeperId,
|
||||||
periodId: _periodId
|
periodId: _periodId
|
||||||
);
|
);
|
||||||
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
name: "bankrot3",
|
name: "bankrot3",
|
||||||
storeleeperId: _storekeeperId,
|
storekeeperId: _storekeeperId,
|
||||||
periodId: _periodId
|
periodId: _periodId
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ internal class CreditProgramStorageContractTests : BaseStorageContractTest
|
|||||||
public void Try_GetElementById_WhenHaveRecord_Test()
|
public void Try_GetElementById_WhenHaveRecord_Test()
|
||||||
{
|
{
|
||||||
var creditProgram = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
var creditProgram = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
storeleeperId: _storekeeperId,
|
storekeeperId: _storekeeperId,
|
||||||
periodId: _periodId
|
periodId: _periodId
|
||||||
);
|
);
|
||||||
AssertElement(_storageContract.GetElementById(creditProgram.Id), creditProgram);
|
AssertElement(_storageContract.GetElementById(creditProgram.Id), creditProgram);
|
||||||
@@ -100,7 +100,7 @@ internal class CreditProgramStorageContractTests : BaseStorageContractTest
|
|||||||
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
name: "1",
|
name: "1",
|
||||||
periodId: _periodId,
|
periodId: _periodId,
|
||||||
storeleeperId: _storekeeperId,
|
storekeeperId: _storekeeperId,
|
||||||
creditProgramCurrency: [(_currenyId, credit.Id)]
|
creditProgramCurrency: [(_currenyId, credit.Id)]
|
||||||
);
|
);
|
||||||
Assert.That(
|
Assert.That(
|
||||||
@@ -120,7 +120,7 @@ internal class CreditProgramStorageContractTests : BaseStorageContractTest
|
|||||||
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
credit.Id,
|
credit.Id,
|
||||||
periodId: _periodId,
|
periodId: _periodId,
|
||||||
storeleeperId: _storekeeperId,
|
storekeeperId: _storekeeperId,
|
||||||
creditProgramCurrency: [(_currenyId, credit.Id)]
|
creditProgramCurrency: [(_currenyId, credit.Id)]
|
||||||
);
|
);
|
||||||
_storageContract.UpdElement(credit);
|
_storageContract.UpdElement(credit);
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using BankTests.Infrastructure;
|
using BankContracts.ViewModels;
|
||||||
|
using BankDatabase.Models;
|
||||||
|
using BankTests.Infrastructure;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
namespace BankTests.WebApiControllersTests;
|
namespace BankTests.WebApiControllersTests;
|
||||||
@@ -15,10 +17,276 @@ internal class ReportControllerTests : BaseWebApiControllerTest
|
|||||||
BankDbContext.RemoveCurrenciesFromDatabase();
|
BankDbContext.RemoveCurrenciesFromDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task GetDepositByCreditProgram_WhenHaveRecords_ShouldSuccess_Test()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var storekeeper = BankDbContext.InsertStorekeeperToDatabaseAndReturn(
|
||||||
|
email: $"storekeeper_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"storekeeper_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
var period = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: storekeeper.Id);
|
||||||
|
|
||||||
|
// Создаем валюты
|
||||||
|
var currency1 = BankDbContext.InsertCurrencyToDatabaseAndReturn(
|
||||||
|
name: "Рубль",
|
||||||
|
abbreviation: "RUB",
|
||||||
|
storekeeperId: storekeeper.Id
|
||||||
|
);
|
||||||
|
var currency2 = BankDbContext.InsertCurrencyToDatabaseAndReturn(
|
||||||
|
name: "Доллар",
|
||||||
|
abbreviation: "USD",
|
||||||
|
storekeeperId: storekeeper.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем кредитные программы и связываем их с валютами
|
||||||
|
var creditProgram1 = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
|
name: "Credit Program 1",
|
||||||
|
storekeeperId: storekeeper.Id,
|
||||||
|
periodId: period.Id,
|
||||||
|
creditProgramCurrency: [(currency1.Id, Guid.NewGuid().ToString())]
|
||||||
|
);
|
||||||
|
var creditProgram2 = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
|
name: "Credit Program 2",
|
||||||
|
storekeeperId: storekeeper.Id,
|
||||||
|
periodId: period.Id,
|
||||||
|
creditProgramCurrency: [(currency2.Id, Guid.NewGuid().ToString())]
|
||||||
|
);
|
||||||
|
|
||||||
|
var clerk = BankDbContext.InsertClerkToDatabaseAndReturn(
|
||||||
|
email: $"clerk_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"clerk_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем вклады и связываем их с валютами
|
||||||
|
var deposit1 = BankDbContext.InsertDepositToDatabaseAndReturn(
|
||||||
|
interestRate: 5.5f,
|
||||||
|
cost: 10000,
|
||||||
|
period: 12,
|
||||||
|
clerkId: clerk.Id
|
||||||
|
);
|
||||||
|
var deposit2 = BankDbContext.InsertDepositToDatabaseAndReturn(
|
||||||
|
interestRate: 6.5f,
|
||||||
|
cost: 20000,
|
||||||
|
period: 24,
|
||||||
|
clerkId: clerk.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
// Связываем вклады с валютами
|
||||||
|
BankDbContext.DepositCurrencies.Add(new DepositCurrency { DepositId = deposit1.Id, CurrencyId = currency1.Id });
|
||||||
|
BankDbContext.DepositCurrencies.Add(new DepositCurrency { DepositId = deposit2.Id, CurrencyId = currency2.Id });
|
||||||
|
BankDbContext.SaveChanges();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var response = await HttpClient.GetAsync("/api/report/getdepositbycreditprogram");
|
||||||
|
var result = await GetModelFromResponseAsync<List<DepositByCreditProgramViewModel>>(response);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||||
|
Assert.That(result, Is.Not.Null);
|
||||||
|
Assert.That(result, Has.Count.EqualTo(2));
|
||||||
|
|
||||||
|
var firstProgram = result.First(x => x.CreditProgramName == "Credit Program 1");
|
||||||
|
Assert.That(firstProgram.DepositRate, Has.Count.EqualTo(1));
|
||||||
|
Assert.That(firstProgram.DepositRate[0], Is.EqualTo(5.5f));
|
||||||
|
Assert.That(firstProgram.DepositCost[0], Is.EqualTo(10000));
|
||||||
|
Assert.That(firstProgram.DepositPeriod[0], Is.EqualTo(12));
|
||||||
|
|
||||||
|
var secondProgram = result.First(x => x.CreditProgramName == "Credit Program 2");
|
||||||
|
Assert.That(secondProgram.DepositRate, Has.Count.EqualTo(1));
|
||||||
|
Assert.That(secondProgram.DepositRate[0], Is.EqualTo(6.5f));
|
||||||
|
Assert.That(secondProgram.DepositCost[0], Is.EqualTo(20000));
|
||||||
|
Assert.That(secondProgram.DepositPeriod[0], Is.EqualTo(24));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task LoadDepositByCreditProgram_WhenNoData_ShouldBadRequest_Test()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var storekeeper = BankDbContext.InsertStorekeeperToDatabaseAndReturn(
|
||||||
|
email: $"storekeeper_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"storekeeper_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
var period = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: storekeeper.Id);
|
||||||
|
|
||||||
|
// Создаем валюты
|
||||||
|
var currency = BankDbContext.InsertCurrencyToDatabaseAndReturn(
|
||||||
|
name: "Рубль",
|
||||||
|
abbreviation: "RUB",
|
||||||
|
storekeeperId: storekeeper.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем кредитную программу и связываем её с валютой
|
||||||
|
var creditProgram = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
|
name: "Credit Program 1",
|
||||||
|
storekeeperId: storekeeper.Id,
|
||||||
|
periodId: period.Id,
|
||||||
|
creditProgramCurrency: [(currency.Id, Guid.NewGuid().ToString())]
|
||||||
|
);
|
||||||
|
|
||||||
|
var clerk = BankDbContext.InsertClerkToDatabaseAndReturn(
|
||||||
|
email: $"clerk_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"clerk_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем вклад, но НЕ связываем его с валютой
|
||||||
|
var deposit = BankDbContext.InsertDepositToDatabaseAndReturn(
|
||||||
|
interestRate: 5.5f,
|
||||||
|
cost: 10000,
|
||||||
|
period: 12,
|
||||||
|
clerkId: clerk.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
BankDbContext.SaveChanges();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var response = await HttpClient.GetAsync("/api/report/loaddepositbycreditprogram");
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public async Task LoadDepositByCreditProgram_WhenHaveRecords_ShouldSuccess_Test()
|
public async Task LoadDepositByCreditProgram_WhenHaveRecords_ShouldSuccess_Test()
|
||||||
{
|
{
|
||||||
|
//Arrange
|
||||||
|
var storekeeper = BankDbContext.InsertStorekeeperToDatabaseAndReturn(
|
||||||
|
email: $"storekeeper_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"storekeeper_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
var period = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: storekeeper.Id);
|
||||||
|
|
||||||
|
// Создаем валюты
|
||||||
|
var currency1 = BankDbContext.InsertCurrencyToDatabaseAndReturn(
|
||||||
|
name: "Рубль",
|
||||||
|
abbreviation: "RUB",
|
||||||
|
storekeeperId: storekeeper.Id
|
||||||
|
);
|
||||||
|
var currency2 = BankDbContext.InsertCurrencyToDatabaseAndReturn(
|
||||||
|
name: "Доллар",
|
||||||
|
abbreviation: "USD",
|
||||||
|
storekeeperId: storekeeper.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем кредитные программы и связываем их с валютами
|
||||||
|
var creditProgram1 = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
|
name: "Credit Program 1",
|
||||||
|
storekeeperId: storekeeper.Id,
|
||||||
|
periodId: period.Id,
|
||||||
|
creditProgramCurrency: [(currency1.Id, Guid.NewGuid().ToString())]
|
||||||
|
);
|
||||||
|
var creditProgram2 = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
|
name: "Credit Program 2",
|
||||||
|
storekeeperId: storekeeper.Id,
|
||||||
|
periodId: period.Id,
|
||||||
|
creditProgramCurrency: [(currency2.Id, Guid.NewGuid().ToString())]
|
||||||
|
);
|
||||||
|
|
||||||
|
var clerk = BankDbContext.InsertClerkToDatabaseAndReturn(
|
||||||
|
email: $"clerk_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"clerk_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем вклады и связываем их с валютами
|
||||||
|
var deposit1 = BankDbContext.InsertDepositToDatabaseAndReturn(
|
||||||
|
interestRate: 5.5f,
|
||||||
|
cost: 10000,
|
||||||
|
period: 12,
|
||||||
|
clerkId: clerk.Id
|
||||||
|
);
|
||||||
|
var deposit2 = BankDbContext.InsertDepositToDatabaseAndReturn(
|
||||||
|
interestRate: 6.5f,
|
||||||
|
cost: 20000,
|
||||||
|
period: 24,
|
||||||
|
clerkId: clerk.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
// Связываем вклады с валютами
|
||||||
|
BankDbContext.DepositCurrencies.Add(new DepositCurrency { DepositId = deposit1.Id, CurrencyId = currency1.Id });
|
||||||
|
BankDbContext.DepositCurrencies.Add(new DepositCurrency { DepositId = deposit2.Id, CurrencyId = currency2.Id });
|
||||||
|
BankDbContext.SaveChanges();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var response = await HttpClient.GetAsync("/api/report/loaddepositbycreditprogram");
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
await AssertStreamAsync(response, "deposit_by_credit_program.docx");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task LoadClientsByCreditProgram_WhenHaveRecords_ShouldSuccess_Test()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var storekeeper = BankDbContext.InsertStorekeeperToDatabaseAndReturn(
|
||||||
|
email: $"storekeeper_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"storekeeper_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
var clerk = BankDbContext.InsertClerkToDatabaseAndReturn(
|
||||||
|
email: $"clerk_{Guid.NewGuid()}@email.com",
|
||||||
|
login: $"clerk_{Guid.NewGuid()}",
|
||||||
|
phone: $"+7-{Guid.NewGuid():N}"
|
||||||
|
);
|
||||||
|
var period = BankDbContext.InsertPeriodToDatabaseAndReturn(storekeeperId: storekeeper.Id);
|
||||||
|
|
||||||
|
// Создаем валюты
|
||||||
|
var currency1 = BankDbContext.InsertCurrencyToDatabaseAndReturn(
|
||||||
|
name: "Рубль",
|
||||||
|
abbreviation: "RUB",
|
||||||
|
storekeeperId: storekeeper.Id
|
||||||
|
);
|
||||||
|
var currency2 = BankDbContext.InsertCurrencyToDatabaseAndReturn(
|
||||||
|
name: "Доллар",
|
||||||
|
abbreviation: "USD",
|
||||||
|
storekeeperId: storekeeper.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем кредитные программы и связываем их с валютами
|
||||||
|
var creditProgram1 = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
|
name: "Credit Program 1",
|
||||||
|
storekeeperId: storekeeper.Id,
|
||||||
|
periodId: period.Id,
|
||||||
|
creditProgramCurrency: [(currency1.Id, Guid.NewGuid().ToString())]
|
||||||
|
);
|
||||||
|
var creditProgram2 = BankDbContext.InsertCreditProgramToDatabaseAndReturn(
|
||||||
|
name: "Credit Program 2",
|
||||||
|
storekeeperId: storekeeper.Id,
|
||||||
|
periodId: period.Id,
|
||||||
|
creditProgramCurrency: [(currency2.Id, Guid.NewGuid().ToString())]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Создаем клиентов
|
||||||
|
var client1 = BankDbContext.InsertClientToDatabaseAndReturn(
|
||||||
|
surname: "Ivanov",
|
||||||
|
name: "Ivan",
|
||||||
|
balance: 10000,
|
||||||
|
clerkId: clerk.Id
|
||||||
|
);
|
||||||
|
var client2 = BankDbContext.InsertClientToDatabaseAndReturn(
|
||||||
|
surname: "Petrov",
|
||||||
|
name: "Petr",
|
||||||
|
balance: 20000,
|
||||||
|
clerkId: clerk.Id
|
||||||
|
);
|
||||||
|
|
||||||
|
// Связываем клиентов с кредитными программами
|
||||||
|
BankDbContext.CreditProgramClients.Add(new ClientCreditProgram { ClientId = client1.Id, CreditProgramId = creditProgram1.Id });
|
||||||
|
BankDbContext.CreditProgramClients.Add(new ClientCreditProgram { ClientId = client2.Id, CreditProgramId = creditProgram2.Id });
|
||||||
|
BankDbContext.SaveChanges();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var response = await HttpClient.GetAsync("/api/report/loadclientsbycreditprogram");
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
await AssertStreamAsync(response, "clients_by_credit_program.docx");
|
||||||
|
}
|
||||||
|
|
||||||
private static async Task AssertStreamAsync(HttpResponseMessage response, string fileNameForSave = "")
|
private static async Task AssertStreamAsync(HttpResponseMessage response, string fileNameForSave = "")
|
||||||
{
|
{
|
||||||
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
||||||
|
|||||||
Reference in New Issue
Block a user