77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
"""
|
|
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"
|