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

94 lines
4.2 KiB
Python
Raw Normal View History

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from .base import FunctionalTest
class GameboardNavigationTest(FunctionalTest):
def test_footer_links_to_gameboard(self):
# 1. Log in, nav to dashboard
self.create_pre_authenticated_session("capman@test.io")
self.browser.get(self.live_server_url)
# 2. Assert footer nav present w. dash- & gameboard tabs
self.browser.find_element(By.ID, "id_footer_nav")
self.browser.find_element(By.CSS_SELECTOR, '#id_footer_nav a[href="/"]')
self.browser.find_element(By.CSS_SELECTOR, '#id_footer_nav a[href="/gameboard/"]')
# 3. Click the gameboard tab
self.browser.find_element(
By.CSS_SELECTOR, '#id_footer_nav a[href="/gameboard/"]'
).click()
# 4. Assert user landed on gameboard
self.wait_for(
lambda: self.assertRegex(self.browser.current_url, r"/gameboard/$")
)
def test_gameboard_shows_game_applets(self):
# 1. Log in, nav directly to gameboard
self.create_pre_authenticated_session("capman@test.io")
self.browser.get(self.live_server_url + "/gameboard/")
# 2. Assert My Games applet present
self.wait_for(
lambda: self.browser.find_element(By.ID, "id_applet_my_games")
)
# 3. Assert no games listed yet for new user
my_games = self.browser.find_element(By.ID, "id_applet_my_games")
game_items = my_games.find_elements(By.CSS_SELECTOR, ".game-item")
self.assertEqual(len(game_items), 0)
# 4. Assert New Game applet present
self.browser.find_element(By.ID, "id_applet_new_game")
def test_game_kit_panel_shows_token_inventory(self):
# 1. Log in, nav to gameboard
self.create_pre_authenticated_session("capman@test.io")
self.browser.get(self.live_server_url + "/gameboard/")
# 2. Assert game kit & gear btns both present (stacked vertically)
self.wait_for(
lambda: self.browser.find_element(By.ID, "id_game_kit_btn")
)
self.browser.find_element(By.ID, "id_game_gear")
# 3. Click game kit btn to open panel
self.browser.find_element(By.ID, "id_game_kit_btn").click()
# 4. Wait for game kit panel to become visible
self.wait_for(
lambda: self.assertTrue(
self.browser.find_element(By.ID, "id_game_kit").is_displayed()
)
)
# 5. Assert Coin-on-a-String present in kit
coin = self.browser.find_element(By.ID, "id_kit_coin_on_a_string")
# 6. Hover over it; assert tooltip shows name, entry text & reuse description
ActionChains(self.browser).move_to_element(coin).perform()
self.wait_for(
lambda: self.assertTrue(
self.browser.find_element(
By.CSS_SELECTOR, "#id_kit_coin_on_a_string .token-tooltip"
).is_displayed()
)
)
coin_tooltip = self.browser.find_element(
By.CSS_SELECTOR, "#id_kit_coin_on_a_string .token-tooltip"
).text
self.assertIn("Coin-on-a-String", coin_tooltip)
self.assertIn("Admit 1 Entry", coin_tooltip)
self.assertIn("and another after that", coin_tooltip)
# 7. Assert 1× Free Token (complimentary) present in kit
free_token = self.browser.find_element(By.ID, "id_kit_free_token_0")
# 8. Hover over it; assert tooltip shows name, entry text & expiry date
ActionChains(self.browser).move_to_element(free_token).perform()
self.wait_for(
lambda: self.assertTrue(
self.browser.find_element(
By.CSS_SELECTOR, "#id_kit_free_token_0 .token-tooltip"
).is_displayed()
)
)
free_tooltip = self.browser.find_element(
By.CSS_SELECTOR, "#id_kit_free_token_0 .token-tooltip"
).text
self.assertIn("Free Token", free_tooltip)
self.assertIn("Admit 1 Entry", free_tooltip)
self.assertIn("Expires", free_tooltip)
# 9. Assert card deck & dice set placeholder present
self.browser.find_element(By.ID, "id_kit_card_deck")
self.browser.find_element(By.ID, "id_kit_dice_set")