import unittest import tempfile import os from pen_tracker.engine import PenTracker, Pen, InkTracker, Ink class TestPenTracker(unittest.TestCase): def setUp(self): self.temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.csv') self.temp_file.close() self.tracker = PenTracker(self.temp_file.name) def tearDown(self): os.unlink(self.temp_file.name) def test_add_and_load_pen(self): pen = Pen(Make="Pilot", Model="Metropolitan", Nib="F") self.tracker.pens.append(pen) self.tracker.save_data() # Load in new tracker new_tracker = PenTracker(self.temp_file.name) self.assertEqual(len(new_tracker.pens), 1) self.assertEqual(new_tracker.pens[0].Make, "Pilot") self.assertEqual(new_tracker.pens[0].Model, "Metropolitan") def test_sorting(self): self.tracker.pens = [ Pen(Make="Z", Model="A"), Pen(Make="A", Model="B") ] self.tracker.save_data() new_tracker = PenTracker(self.temp_file.name) self.assertEqual(new_tracker.pens[0].Make, "A") self.assertEqual(new_tracker.pens[1].Make, "Z") class TestInkTracker(unittest.TestCase): def setUp(self): self.temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.csv') self.temp_file.close() self.tracker = InkTracker(self.temp_file.name) def tearDown(self): os.unlink(self.temp_file.name) def test_add_and_load_ink(self): ink = Ink(Vendor="Diamine", Name="Pumpkin", Color="Orange") self.tracker.inks.append(ink) self.tracker.save_data() new_tracker = InkTracker(self.temp_file.name) self.assertEqual(len(new_tracker.inks), 1) self.assertEqual(new_tracker.inks[0].Vendor, "Diamine") self.assertEqual(new_tracker.inks[0].Name, "Pumpkin") def test_sorting(self): self.tracker.inks = [ Ink(Vendor="Z", Name="A"), Ink(Vendor="A", Name="B") ] self.tracker.save_data() new_tracker = InkTracker(self.temp_file.name) self.assertEqual(new_tracker.inks[0].Vendor, "A") self.assertEqual(new_tracker.inks[1].Vendor, "Z") def test_loads_row_with_extra_trailing_field(self): csv_content = ( "Vendor,Name,Color,Purchased,Size,Notes\n" "Waterman,Intense Black,Black,,\"Cartridge,International Short\",\n" "Pilot,Black Cartridge,Black,2024-01-01,Cartridge,Good ink\n" ) with open(self.temp_file.name, 'w', encoding='utf-8') as f: f.write(csv_content) new_tracker = InkTracker(self.temp_file.name) self.assertEqual(len(new_tracker.inks), 2) self.assertEqual(new_tracker.inks[0].Vendor, "Pilot") self.assertEqual(new_tracker.inks[1].Vendor, "Waterman") self.assertEqual(new_tracker.inks[1].Notes, "N/A") if __name__ == '__main__': unittest.main()