generated from is-oop-y24/oop-repository-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #6 from is-oop-y24/lab-4
Lab 4
- Loading branch information
Showing
32 changed files
with
1,541 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,4 +22,8 @@ | |
</PackageReference> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<Folder Include="Tools\" /> | ||
</ItemGroup> | ||
|
||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} | ||
} |
Oops, something went wrong.