finskaybank/TestProject1/UnitTest1.cs

290 lines
8.7 KiB
C#
Raw Normal View History

2025-05-15 02:54:37 +00:00
using System;
using System.IO;
using finskaybank;
using NUnit.Framework;
namespace BankAccountTests
{
[TestFixture]
public class BankAccountOperationsTests
{
private account[] _accounts;
private StringReader _inputSimulator;
private StringWriter _outputCapture;
[SetUp]
public void InitializeTestEnvironment()
{
_accounts = new account[100];
_outputCapture = new StringWriter();
Console.SetOut(_outputCapture);
}
[TearDown]
public void CleanupTestEnvironment()
{
_outputCapture?.Dispose();
_inputSimulator?.Dispose();
}
[Test]
public void otk_ValidInput_SetsCorrectProperties()
{
_inputSimulator = new StringReader("fio\n1500\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
Assert.That(_accounts[0].GetName(), Is.EqualTo("fio"));
Assert.That(_accounts[0].GetSum(), Is.EqualTo(1500.00));
Assert.That(_accounts[0].GetNum(), Is.Not.Empty);
}
[Test]
public void otk_InsufficientDeposit_PrintsRetryMessage()
{
_inputSimulator = new StringReader("fio\n500\nfio1\n2000\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
string consoleOutput = _outputCapture.ToString();
Assert.That(consoleOutput, Does.Contain("Сумма слишком мала, попробуйте ещё раз!"));
}
[Test]
public void otk_NumericNameInput_StoresNameCorrectly()
{
_inputSimulator = new StringReader("12345\n2500\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
Assert.That(_accounts[0].GetName(), Is.EqualTo("12345"));
}
[Test]
public void otk_InvalidDepositInput_ThrowsFormatException()
{
_inputSimulator = new StringReader("fio\ninvalidAmount\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
Assert.Throws<FormatException>(() => _accounts[0].otk());
}
[Test]
public void num_gen_GeneratesTwentyDigitNumber()
{
_accounts[0] = new account();
_accounts[0].num_gen();
Assert.That(_accounts[0].GetNum().Length, Is.EqualTo(20));
}
[Test]
public void otk_AfterCreation_AccountFileContainsCorrectInfo()
{
_inputSimulator = new StringReader("fio\n3000\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
string accountFile = $"{_accounts[0].GetNum()}.txt";
Assert.That(File.Exists(accountFile), Is.True);
string fileContents = File.ReadAllText(accountFile);
Assert.That(fileContents, Does.Contain(_accounts[0].GetNum()));
Assert.That(fileContents, Does.Contain(_accounts[0].GetName()));
Assert.That(fileContents, Does.Contain(_accounts[0].GetSum().ToString()));
}
[Test]
public void top_up_PositiveAmount_IncreasesBalance()
{
_inputSimulator = new StringReader("fio\n1000\n750\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
float expected = _accounts[0].GetSum() + 750;
_accounts[0].top_up();
Assert.That(_accounts[0].GetSum(), Is.EqualTo(expected));
}
[Test]
public void top_up_NegativeAmount_DecreasesBalance()
{
_inputSimulator = new StringReader("fio\n2000\n-500\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
float expected = _accounts[0].GetSum() - 500;
_accounts[0].top_up();
Assert.That(_accounts[0].GetSum(), Is.EqualTo(expected));
}
[Test]
public void top_up_ZeroAmount_LeavesBalanceUnchanged()
{
_inputSimulator = new StringReader("fio\n1500\n0\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
float original = _accounts[0].GetSum();
_accounts[0].top_up();
Assert.That(_accounts[0].GetSum(), Is.EqualTo(original));
}
[Test]
public void top_up_InvalidInput_ThrowsFormatException()
{
_inputSimulator = new StringReader("fio\n1000\nnotANumber\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
Assert.Throws<FormatException>(() => _accounts[0].top_up());
}
[Test]
public void umen_PositiveAmount_DecreasesBalance()
{
_inputSimulator = new StringReader("fio\n3000\n1000\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
float expected = _accounts[0].GetSum() - 1000;
_accounts[0].umen();
Assert.That(_accounts[0].GetSum(), Is.EqualTo(expected));
}
[Test]
public void umen_NegativeAmount_IncreasesBalance()
{
_inputSimulator = new StringReader("fio\n4000\n-1000\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
float expected = _accounts[0].GetSum() + 1000;
_accounts[0].umen();
Assert.That(_accounts[0].GetSum(), Is.EqualTo(expected));
}
[Test]
public void umen_ZeroAmount_LeavesBalanceUnchanged()
{
_inputSimulator = new StringReader("fio\n2500\n0\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
float original = _accounts[0].GetSum();
_accounts[0].umen();
Assert.That(_accounts[0].GetSum(), Is.EqualTo(original));
}
[Test]
public void umen_InvalidInput_ThrowsFormatException()
{
_inputSimulator = new StringReader("fio\n2000\nabc\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
Assert.Throws<FormatException>(() => _accounts[0].umen());
}
[Test]
public void obnul_ClearsBalanceToZero()
{
_inputSimulator = new StringReader("fio\n5000\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
_accounts[0].obnul();
Assert.That(_accounts[0].GetSum(), Is.EqualTo(0.00));
}
[Test]
public void perevod_SufficientFunds_TransfersAmountCorrectly()
{
_inputSimulator = new StringReader("fio\n5000\nfio1\n3000\n2000\n1\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
_accounts[1] = new account();
_accounts[1].otk();
float senderExpected = _accounts[0].GetSum() - 2000;
float recipientExpected = _accounts[1].GetSum() + 2000;
_accounts[0].perevod();
_accounts[1].sum += 2000;
Assert.That(_accounts[0].GetSum(), Is.EqualTo(senderExpected));
Assert.That(_accounts[1].GetSum(), Is.EqualTo(recipientExpected));
}
[Test]
public void perevod_InsufficientFunds_PrintsErrorMessage()
{
_inputSimulator = new StringReader("fio\n1000\nfio1\n5000\n2000\n1\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
_accounts[1] = new account();
_accounts[1].otk();
_accounts[0].perevod();
string output = _outputCapture.ToString();
Assert.That(output, Does.Contain("На счету недостаточно средств!"));
}
[Test]
public void perevod_InvalidAmount_ThrowsFormatException()
{
_inputSimulator = new StringReader("fio\n3000\nfio1\n5000\ninvalid\n1\n");
Console.SetIn(_inputSimulator);
_accounts[0] = new account();
_accounts[0].otk();
_accounts[1] = new account();
_accounts[1].otk();
Assert.Throws<FormatException>(() => _accounts[0].perevod());
}
}
}