import unittest from core.tracker import Tracker from storage.data_manager import DataManager from core.user import User from core.item import Item import shutil import os class TestTracker(unittest.TestCase): def setUp(self): self.test_dir = "test_data" self.dm = DataManager(self.test_dir) self.tracker = Tracker(self.dm) # Setup dummy user and item self.tracker.users = {"test_user": User("test_user", "Test Alice")} self.tracker.items = {"test_item": Item("test_item", "Test Coffee", 2.50)} self.tracker.debts = {} self.tracker.transactions = [] def tearDown(self): if os.path.exists(self.test_dir): shutil.rmtree(self.test_dir) def test_adjust_debt_new_user(self): # Verify adjust_debt does not raise KeyError on uninitialized user debt res = self.tracker.adjust_debt("test_user", 2.0, "admin123") self.assertEqual(res["status"], "success") self.assertEqual(self.tracker.get_user_debt("test_user"), -2.0) def test_add_purchase(self): res = self.tracker.add_purchase("test_user", "test_item") self.assertEqual(res["status"], "success") self.assertEqual(self.tracker.get_user_debt("test_user"), 2.50) self.assertEqual(len(self.tracker.transactions), 1) def test_default_pin(self): user = User("new_user", "New User") self.assertEqual(user.pin, "4242") def test_add_user(self): res = self.tracker.add_user("test_user_2", "Test Bob") self.assertEqual(res["status"], "success") self.assertEqual(self.tracker.users["test_user_2"].name, "Test Bob") self.assertEqual(self.tracker.users["test_user_2"].pin, "4242") def test_remove_user(self): res = self.tracker.remove_user("test_user") self.assertEqual(res["status"], "success") self.assertNotIn("test_user", self.tracker.users) self.assertNotIn("test_user", self.tracker.debts) def test_edit_user(self): res = self.tracker.edit_user("test_user", "Updated Name", "9999") self.assertEqual(res["status"], "success") self.assertEqual(self.tracker.users["test_user"].name, "Updated Name") self.assertEqual(self.tracker.users["test_user"].pin, "9999") def test_add_item(self): res = self.tracker.add_item("new_item", "Donut", 1.80) self.assertEqual(res["status"], "success") self.assertEqual(self.tracker.items["new_item"].name, "Donut") self.assertEqual(self.tracker.items["new_item"].price, 1.80) def test_remove_item(self): res = self.tracker.remove_item("test_item") self.assertEqual(res["status"], "success") self.assertNotIn("test_item", self.tracker.items) def test_edit_item(self): res = self.tracker.edit_item("test_item", "Premium Coffee", 3.20) self.assertEqual(res["status"], "success") self.assertEqual(self.tracker.items["test_item"].name, "Premium Coffee") self.assertEqual(self.tracker.items["test_item"].price, 3.20) if __name__ == "__main__": unittest.main()