From c70276e91ffe9918d5f9ec04b11ece754d901702 Mon Sep 17 00:00:00 2001 From: danbusse <81775558+danbusse@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:14:07 -0600 Subject: [PATCH] test: add manabox parser tests --- backend/tests/test_manabox.py | 76 +++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 backend/tests/test_manabox.py diff --git a/backend/tests/test_manabox.py b/backend/tests/test_manabox.py new file mode 100644 index 0000000..dd46bbe --- /dev/null +++ b/backend/tests/test_manabox.py @@ -0,0 +1,76 @@ +""" +Tests for manabox.py — CSV parsing with foil/non-foil merging. +""" +import pytest +from app.services.imports.manabox import parse + + +class TestManaboxCSV: + def _csv(self, header, rows): + lines = [header] + rows + return "\n".join(lines).encode("utf-8") + + def test_standard_columns(self): + data = self._csv( + "Name,Set code,Collector number,Foil,Quantity", + ["Sol Ring,cmm,1,No,2"] + ) + result = parse(data) + assert len(result) == 1 + assert result[0].card_name == "Sol Ring" + assert result[0].quantity == 2 + assert result[0].foil_quantity == 0 + + def test_foil_row(self): + data = self._csv( + "Name,Set code,Collector number,Foil,Quantity", + ["Sol Ring,cmm,1,Yes,1"] + ) + result = parse(data) + assert result[0].quantity == 0 + assert result[0].foil_quantity == 1 + + def test_foil_and_nonfoil_merged(self): + data = self._csv( + "Name,Set code,Collector number,Foil,Quantity", + [ + "Sol Ring,cmm,1,No,2", + "Sol Ring,cmm,1,Yes,1" + ] + ) + result = parse(data) + assert len(result) == 1 + assert result[0].quantity == 2 + assert result[0].foil_quantity == 1 + + def test_different_cards_not_merged(self): + data = self._csv( + "Name,Set code,Collector number,Foil,Quantity", + [ + "Sol Ring,cmm,1,No,1", + "Command Tower,cmm,2,No,1" + ] + ) + result = parse(data) + assert len(result) == 2 + + def test_foil_bool_variations(self): + for foil_val in ["Yes", "yes", "1", "true", "True", "y"]: + data = self._csv( + "Name,Set code,Collector number,Foil,Quantity", + [f"Sol Ring,cmm,1,{foil_val},1"] + ) + result = parse(data) + assert result[0].foil_quantity == 1, f"Failed for foil value: {foil_val}" + + def test_empty_csv_raises(self): + with pytest.raises(ValueError): + parse(b"") + + def test_set_code_lowercased(self): + data = self._csv( + "Name,Set code,Collector number,Foil,Quantity", + ["Sol Ring,CMM,1,No,1"] + ) + result = parse(data) + assert result[0].set_code == "cmm"