summaryrefslogtreecommitdiff
path: root/test_trade_queue.py
diff options
context:
space:
mode:
authoruvok2025-04-14 10:43:35 +0200
committeruvok2025-04-14 10:43:35 +0200
commitceedc4c3c19da7f01e1c315cb5c41bf4a4c59672 (patch)
tree67e3a819d8dbadba7434906246fdd7da7b5cc892 /test_trade_queue.py
parenteb1feb5219bab8398b53f5d80df4f901366b0b59 (diff)
Split files, add zest
Diffstat (limited to 'test_trade_queue.py')
-rw-r--r--test_trade_queue.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/test_trade_queue.py b/test_trade_queue.py
new file mode 100644
index 0000000..958b830
--- /dev/null
+++ b/test_trade_queue.py
@@ -0,0 +1,67 @@
+import unittest
+from datetime import datetime
+
+from trade_queue import FIFOQueue
+
+class TestFIFOQueue(unittest.TestCase):
+ def setUp(self):
+ """
+ Set up a FIFOQueue instance and some test trades.
+ """
+ self.queue = FIFOQueue()
+ self.queue.add(10.0, 100.0, "2025-04-14")
+ self.queue.add(20.0, 200.0, "2025-04-15")
+ self.queue.add(30.0, 300.0, "2025-04-16")
+
+ def test_add(self):
+ """
+ Test adding trades to the queue.
+ """
+ self.assertEqual(len(self.queue.queue), 3) # There should be 3 trades in the queue
+ self.assertEqual(self.queue.queue[0].amount, 10.0) # Check the first trade's amount
+ self.assertEqual(self.queue.queue[1].date, "2025-04-15") # Check the second trade's date
+
+ def test_remove_exact_amount(self):
+ """
+ Test removing an exact amount from the queue.
+ """
+ trades = self.queue.remove(10.0)
+ self.assertEqual(len(trades), 1) # One trade should be returned
+ self.assertEqual(trades[0].amount, 10.0) # Amount should match the request
+ self.assertEqual(len(self.queue.queue), 2) # Two trades should remain in the queue
+
+ def test_remove_partial_trade(self):
+ """
+ Test removing an amount that partially consumes a trade.
+ """
+ trades = self.queue.remove(5.0)
+ self.assertEqual(len(trades), 1) # One partial trade should be returned
+ self.assertEqual(trades[0].amount, 5.0) # Amount should match the request
+ self.assertEqual(self.queue.queue[0].amount, 5.0) # Remaining trade amount should update
+
+ def test_remove_multiple_trades(self):
+ """
+ Test removing an amount that spans multiple trades.
+ """
+ trades = self.queue.remove(25.0)
+ self.assertEqual(len(trades), 2) # Two trades should be returned
+ self.assertEqual(trades[0].amount, 10.0) # The first trade should be fully consumed
+ self.assertEqual(trades[1].amount, 15.0) # The second trade should be partially consumed
+ self.assertEqual(self.queue.queue[0].amount, 5.0) # Remaining trade in queue should update
+
+ def test_remove_insufficient_amount(self):
+ """
+ Test trying to remove more than is available in the queue.
+ """
+ with self.assertRaises(ValueError):
+ self.queue.remove(100.0) # This should raise an exception
+
+ def test_remove_negative_amount(self):
+ """
+ Test trying to remove a negative amount.
+ """
+ with self.assertRaises(ValueError):
+ self.queue.remove(-5.0) # This should raise an exception
+
+if __name__ == "__main__":
+ unittest.main()