mtg_python_deckbuilder/code/tests/test_compare_diffs.py

52 lines
1.6 KiB
Python

import os
import tempfile
from pathlib import Path
import importlib
from starlette.testclient import TestClient
def _write_csv(p: Path, rows):
p.write_text('\n'.join(rows), encoding='utf-8')
def test_compare_diffs_with_temp_exports(monkeypatch):
with tempfile.TemporaryDirectory() as tmpd:
tmp = Path(tmpd)
# Create two CSV exports with small differences
a = tmp / 'A.csv'
b = tmp / 'B.csv'
header = 'Name,Count,Type,ManaValue\n'
_write_csv(a, [
header.rstrip('\n'),
'Card One,1,Creature,2',
'Card Two,2,Instant,1',
'Card Three,1,Sorcery,3',
])
_write_csv(b, [
header.rstrip('\n'),
'Card Two,1,Instant,1', # decreased in B
'Card Four,1,Creature,2', # only in B
'Card Three,1,Sorcery,3',
])
# Touch mtime so B is newer
os.utime(a, None)
os.utime(b, None)
# Point DECK_EXPORTS at this temp dir
monkeypatch.setenv('DECK_EXPORTS', str(tmp))
app_module = importlib.import_module('code.web.app')
client = TestClient(app_module.app)
# Compare A vs B
r = client.get(f'/decks/compare?A={a.name}&B={b.name}')
assert r.status_code == 200
body = r.text
# Only in A: Card One
assert 'Only in A' in body
assert 'Card One' in body
# Only in B: Card Four
assert 'Only in B' in body
assert 'Card Four' in body
# Changed list includes Card Two with delta -1
assert 'Card Two' in body
assert 'Decreased' in body or '( -1' in body or '(-1)' in body