Files
python-tdd/src/functional_tests/test_game_kit.py

86 lines
3.1 KiB
Python
Raw Normal View History

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from .base import FunctionalTest
from apps.epic.models import Room
from apps.lyric.models import Token, User
class GameKitTest(FunctionalTest):
"""Game Kit <dialog>: opens from footer, shows token cards, dismisses."""
def setUp(self):
super().setUp()
self.create_pre_authenticated_session("gamer@kit.io")
self.gamer = User.objects.get(email="gamer@kit.io")
self.token = self.gamer.tokens.filter(token_type=Token.COIN).first()
self.room = Room.objects.create(name="Kit Room", owner=self.gamer)
self.gate_url = self.live_server_url + f"/gameboard/room/{self.room.id}/gate/"
def test_kit_btn_in_footer_opens_dialog(self):
self.browser.get(self.gate_url)
kit_btn = self.wait_for(
lambda: self.browser.find_element(By.ID, "id_kit_btn")
)
self.assertTrue(kit_btn.is_displayed())
kit_btn.click()
self.wait_for(
lambda: self.assertTrue(
self.browser.find_element(By.ID, "id_kit_bag_dialog").is_displayed()
)
)
def test_kit_dialog_shows_token_cards(self):
self.browser.get(self.gate_url)
self.browser.find_element(By.ID, "id_kit_btn").click()
self.wait_for(
lambda: self.browser.find_element(
By.CSS_SELECTOR,
f"#id_kit_bag_dialog [data-token-id='{self.token.id}']",
)
)
def test_kit_dialog_closes_on_escape(self):
self.browser.get(self.gate_url)
self.browser.find_element(By.ID, "id_kit_btn").click()
self.wait_for(
lambda: self.assertTrue(
self.browser.find_element(By.ID, "id_kit_bag_dialog").is_displayed()
)
)
dialog = self.browser.find_element(By.ID, "id_kit_bag_dialog")
dialog.send_keys(Keys.ESCAPE)
self.wait_for(
lambda: self.assertFalse(
self.browser.find_element(By.ID, "id_kit_bag_dialog").is_displayed()
)
)
def test_kit_btn_visible_outside_room(self):
self.browser.get(self.live_server_url + "/")
kit_btn = self.wait_for(
lambda: self.browser.find_element(By.ID, "id_kit_btn")
)
self.assertTrue(kit_btn.is_displayed())
def test_kit_dialog_shows_equipped_deck(self):
"""New user auto-gets Earthman equipped; kit bar shows its deck card."""
self.browser.get(self.gate_url)
self.browser.find_element(By.ID, "id_kit_btn").click()
self.wait_for(
lambda: self.browser.find_element(
By.CSS_SELECTOR,
f"#id_kit_bag_dialog .kit-bag-deck[data-deck-id='{self.gamer.equipped_deck.pk}']",
)
)
def test_kit_dialog_always_shows_dice_placeholder(self):
self.browser.get(self.gate_url)
self.browser.find_element(By.ID, "id_kit_btn").click()
self.wait_for(
lambda: self.browser.find_element(
By.CSS_SELECTOR,
"#id_kit_bag_dialog .kit-bag-placeholder",
)
)