From bc3400ee34ac945f708e483980348ba95b5a8c9a Mon Sep 17 00:00:00 2001 From: uvok Date: Mon, 14 Apr 2025 20:40:23 +0200 Subject: Add trade class tests --- test_trade.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 test_trade.py diff --git a/test_trade.py b/test_trade.py new file mode 100644 index 0000000..691ca1a --- /dev/null +++ b/test_trade.py @@ -0,0 +1,55 @@ +import unittest +from decimal import Decimal + +from trade import Trade + +class TestTrade(unittest.TestCase): + def setUp(self) -> None: + """ + Set up a Trade instance for testing. + """ + self.trade = Trade(amount=10.0, total_cost=100.0, date="2025-04-14") + + def test_initialization(self): + """ + Test that the Trade instance initializes correctly. + """ + self.assertEqual(self.trade.amount, 10.0) + self.assertEqual(self.trade.total_cost, 100.0) + self.assertEqual(self.trade.date, "2025-04-14") + self.assertAlmostEqual(self.trade.price_per_coin, 10.0) + + def test_remove_coins_valid(self): + """ + Test removing a valid amount of coins. + """ + self.trade.remove_coins(5.0) + self.assertEqual(self.trade.amount, 5.0) + self.assertAlmostEqual(self.trade.total_cost, 50.0) + self.assertAlmostEqual(self.trade.price_per_coin, 10.0) + + def test_remove_coins_exceeds_amount(self): + """ + Test removing more coins than available. + """ + with self.assertRaises(ValueError): + self.trade.remove_coins(15.0) + + def test_price_per_coin_division_by_zero(self): + """ + Test the price_per_coin property when the amount is zero. + """ + self.trade.remove_coins(10.0) # Reduce amount to zero + with self.assertRaises(ZeroDivisionError): + _ = self.trade.price_per_coin + + def test_repr(self): + """ + Test the __repr__ method for correct string representation. + """ + expected_repr = "Trade(amount=10.0, price_per_coin=10.00, total_cost=100.00, date=2025-04-14)" + self.assertEqual(repr(self.trade), expected_repr) + + +if __name__ == "__main__": + unittest.main() -- cgit v1.2.3