pen-tracker/tests/test_engine.py
2026-05-02 22:25:35 -05:00

83 lines
No EOL
2.9 KiB
Python

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()