Skip to content

Commit

Permalink
Merge pull request #6 from is-oop-y24/lab-4
Browse files Browse the repository at this point in the history
Lab 4
  • Loading branch information
lievvl authored Nov 28, 2021
2 parents b2cc10a + b4be591 commit a6889ef
Show file tree
Hide file tree
Showing 32 changed files with 1,541 additions and 2 deletions.
6 changes: 5 additions & 1 deletion Banks.Tests/Banks.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@
<ItemGroup>
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.16.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Banks\Banks.csproj" />
</ItemGroup>

</Project>
142 changes: 142 additions & 0 deletions Banks.Tests/BanksTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
using Banks.Entities;
using Banks.Entities.Command;
using Banks.Entities.DepositHandlers;
using Banks.Entities.Factories;
using Banks.Services;
using Banks.Tools;
using NUnit.Framework;

namespace Banks.Tests
{
public class Tests
{
private CentralBank centralBank;
private Bank bank1;
private Client client1;
private Client client2;
private AbstractAccount account1;
private AbstractAccount account2;
private AbstractAccount account3;
private ICommand command1;
private ICommand command2;
private ICommand command3;
private ICommand command4;

[SetUp]
public void Setup()
{
centralBank = CentralBank.GetSingleton();
IBankBuilder bankBuilder = centralBank.BankBuilder;
bankBuilder.SetCreditCommission(1000);
bankBuilder.SetDebitInterestRate(0.01);
bankBuilder.SetYearsLiveOfAccount(2);
IHandler depositHandler = new UsualDepositHandler(1001, 0.01);
depositHandler.SetNext(new LastDepositHandler(0.02));
bankBuilder.SetDepositHandler(depositHandler);
bankBuilder.SetFishyLimit(500);
bank1 = bankBuilder.GetBank();
centralBank.AddBank(bank1);

IClientBuilder clientBuilder = bank1.ClientBuilder;
clientBuilder.SetName("Fishy");
clientBuilder.SetSurname("Fishy");
client1 = clientBuilder.GetClient();
clientBuilder.SetName("Investor");
clientBuilder.SetSurname("Investor");
clientBuilder.SetAddress("l");
clientBuilder.SetPassport("0000 000000");
client2 = clientBuilder.GetClient();

bank1.SetAccountCreator(new DebitAccountFactory());
account1 = bank1.CreateAccount(client1);
bank1.SetAccountCreator(new DepositAccountFactory());
account2 = bank1.CreateAccount(client2);
bank1.SetAccountCreator(new CreditAccountFactory());
account3 = bank1.CreateAccount(client2);

command1 = new RefillCommand(account1, 400);
command2 = new RefillCommand(account1, 400);
command3 = new RefillCommand(account2, 1000);
command4 = new RefillCommand(account3, 2000);
command1.Execute();
command2.Execute();
command3.Execute();
command4.Execute();
}

[Test]
public void TryToTransactionWithFishyAccount_CatchException()
{
Assert.Catch<BankException>(() =>
{
new TransferCommand(account1, account3, 600);
}
);
}

[Test]
public void SetPassportAddress_TryToTransferWithAccount()
{
client1.Address = "l";
client1.Passport = "1111 111111";
ICommand command = new TransferCommand(account1, account3, 600);
command.Execute();
Assert.AreEqual(200, account1.Money);
Assert.AreEqual(2600, account3.Money);
}

[Test]
public void TryToWithdrawDeposit_CatchException()
{
Assert.Catch<BankException>(() =>
{
var command = new WithdrawCommand(account2, 1);
command.Execute();
}
);
}

[Test]
public void DenyCommand1_DenyCommand2()
{
command1.DenyCommand();
command2.DenyCommand();
Assert.AreEqual(0, account1.Money);
}

[Test]
public void DenyCommand1Twice_CatchException()
{
Assert.Catch<BankException>(() =>
{
command1.DenyCommand();
command1.DenyCommand();
}
);
}

[Test]
public void UseKingCrimson_PayInterest_CheckDepositAccount_UseKingCrimson_CheckDepositAccount()
{
centralBank.CalculateInterests(1);
centralBank.PayInterests();
Assert.AreEqual(1010, account2.Money);

centralBank.CalculateInterests(1);
centralBank.PayInterests();
Assert.AreEqual(1030.2, account2.Money);
}

[Test]
public void Withdraw3000FromCredit_UseKingCrimson_Check()
{
ICommand command = new WithdrawCommand(account3, 3000);
command.Execute();

centralBank.CalculateInterests(1);
centralBank.PayInterests();

Assert.AreEqual(-2000, account3.Money);
}
}
}
4 changes: 4 additions & 0 deletions Banks/Banks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,8 @@
</PackageReference>
</ItemGroup>

<ItemGroup>
<Folder Include="Tools\" />
</ItemGroup>

</Project>
55 changes: 55 additions & 0 deletions Banks/Builders/BankBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using Banks.Entities;
using Banks.Services;

namespace Banks.Builders
{
public class BankBuilder : IBankBuilder
{
private int _id;
private Bank _bank;

internal BankBuilder()
{
_id = 0;
_bank = new Bank(_id);
}

public void Reset()
{
_bank = new Bank(_id);
}

public void SetDebitInterestRate(double interestRate)
{
_bank.DebitInterestRate = interestRate;
}

public void SetDepositHandler(IHandler depositHandler)
{
_bank.DepositHandler = depositHandler;
}

public void SetCreditCommission(double commission)
{
_bank.CreditCommission = commission;
}

public void SetYearsLiveOfAccount(int years)
{
_bank.YearsLiveOfAccounts = years;
}

public void SetFishyLimit(double fishyLimit)
{
_bank.FishyLimit = fishyLimit;
}

public Bank GetBank()
{
Bank result = _bank;
_id++;
Reset();
return result;
}
}
}
62 changes: 62 additions & 0 deletions Banks/Builders/ClientBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using Banks.Entities;
using Banks.Services;
using Banks.Tools;

namespace Banks.Builders
{
public class ClientBuilder : IClientBuilder
{
private int _id;
private Client _client;
private Bank _bank;

internal ClientBuilder(Bank bank)
{
_id = 0;
_bank = bank;
Reset();
}

public void Reset()
{
_client = new Client(_id);
_client.AttachedBank = _bank;
}

public void SetName(string name)
{
_client.Name = name;
}

public void SetSurname(string surname)
{
_client.Surname = surname;
}

public void SetAddress(string address)
{
_client.Address = address;
}

public void SetPassport(string passport)
{
_client.Passport = passport;
}

public Client GetClient()
{
if (_client.Name == null || _client.Surname == null)
{
throw new BankException("ClientBuilder hasn't setted Name and Surname!");
}

Client result = _client;

_bank.AddClient(result);

_id++;
Reset();
return result;
}
}
}
44 changes: 44 additions & 0 deletions Banks/Entities/Accounts/CreditAccount.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System;
using Banks.Services;
using Banks.Tools;

namespace Banks.Entities.Accounts
{
public class CreditAccount : AbstractAccount
{
private double _commission;
public CreditAccount(Client client, DateTime expiredDate, double commission)
: base(client, expiredDate)
{
_commission = commission;
}

internal override void CalculateInterest()
{
if (Money < 0)
{
InterestMoney -= _commission;
}
}

internal override void AddMoney(double money)
{
if (money < 0)
{
throw new BankException("Money cannot be < 0!");
}

SetMoney(Money + money);
}

internal override void DecreaseMoney(double money)
{
if (money < 0)
{
throw new BankException("Money cannot be < 0!");
}

SetMoney(Money - money);
}
}
}
46 changes: 46 additions & 0 deletions Banks/Entities/Accounts/DebitAccount.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using System;
using Banks.Services;
using Banks.Tools;

namespace Banks.Entities.Accounts
{
public class DebitAccount : AbstractAccount
{
private double _interestRate;
public DebitAccount(Client client, DateTime expiredDate, double interestRate)
: base(client, expiredDate)
{
_interestRate = interestRate;
}

internal override void CalculateInterest()
{
InterestMoney += Money * _interestRate;
}

internal override void AddMoney(double money)
{
if (money < 0)
{
throw new BankException("Money cannot be < 0!");
}

SetMoney(Money + money);
}

internal override void DecreaseMoney(double money)
{
if (money < 0)
{
throw new BankException("Money cannot be < 0!");
}

if (Money - money < 0)
{
throw new BankException("DebitAccount cannot be negative!");
}

SetMoney(Money - money);
}
}
}
Loading

0 comments on commit a6889ef

Please sign in to comment.