Spaces:
Running
Running
| import json | |
| import engine_rust as lovecasim_engine | |
| import pytest | |
| def env(): | |
| # Load the real compiled data to ensure we are testing the actual fix | |
| with open("data/cards_compiled.json", "r", encoding="utf-8") as f: | |
| data = json.load(f) | |
| p0_card = data["member_db"]["565"].copy() | |
| p0_card["cost"] = 0 # Skip energy check | |
| # Minimal card DB for testing | |
| test_db_json = {"member_db": {"565": p0_card, "1": data["member_db"]["1"]}, "live_db": {}} | |
| db = lovecasim_engine.PyCardDatabase(json.dumps(test_db_json)) | |
| state = lovecasim_engine.PyGameState(db) | |
| # P0 has cards in deck. initialize_game will draw 6. | |
| state.initialize_game([565, 1, 1, 1, 1, 1, 1, 1], [1] * 8, [1, 1], [1, 1], [10001], [10001]) | |
| return db, state | |
| def test_card_565_discard_interactivity(env): | |
| db, state = env | |
| # Force hand to have 565 at index 0 | |
| state.set_hand_cards(0, [565, 1, 1, 1, 1, 1]) | |
| # Play card 565 to slot 0 | |
| # Phase is Main (4) | |
| state.phase = 4 | |
| p0 = state.get_player(0) | |
| print(f"\nBefore play: Phase={state.phase}, Hand={p0.hand}") | |
| # Action for play from hand: 1000 + hand_idx*100 + slot*10 + choice | |
| # hand_idx 0 (card 565), slot 0, choice 0 | |
| state.step(1000) | |
| p0 = state.get_player(0) | |
| print(f"After play: Phase={state.phase}, Hand={p0.hand}") | |
| print(f"Stage: {p0.stage}") | |
| # Check if we are in Response phase (10) | |
| # If this fails, it means trigger_abilities didn't pause | |
| assert state.phase == 10 | |
| assert state.pending_card_id == 565 | |
| # Legal actions should include choices for the discard | |
| actions = state.get_legal_action_ids() # PyGameState.get_legal_action_ids doesn't take db anymore in bindings | |
| # AID for choice: 1000... (OnPlay) or 550... (Queued) | |
| choice_actions = [a for a in actions if (1000 <= a < 2000) or (550 <= a < 1000)] | |
| if len(choice_actions) < 1: | |
| print(f"FAILED: Found actions {actions}") | |
| assert len(choice_actions) >= 1 | |
| # Perform discard (choice 0) | |
| state.step(choice_actions[0]) | |
| # Should return to Main phase (4) | |
| assert state.phase == 4 | |
| # Verify hand size decreased (relative to draw) -> 5 | |
| p0 = state.get_player(0) | |
| assert len(p0.hand) == 5 | |
| assert len(p0.discard) == 1 | |