extensive refactor push to continue to liberate applets from dashboard; new _applets.html & .gear.html template partials for use across all -board views; all applets.html sections have been liberated into their own _applet-<applet-name>.html template partials in their respective templates/apps/*board/_partials/ dirs; gameboard.html & home.html greatly simplified; .gear-btn describes gear menu now, #id_<*board nickname>*gear IDs abandoned; as such, .gear-btn styling moved from _dashboard.scss to _base.scss; new applets.js file contains related initGearMenus scripts, which no longer waits for window reload; new apps.applets.utils file manages applet_context() fn; new gameboard.js file but currently empty (false start); updates across all sorts of ITs & dash- & gameboard FTs
This commit is contained in:
@@ -1,10 +1,18 @@
|
||||
from selenium.common.exceptions import NoSuchElementException
|
||||
from selenium.webdriver.common.action_chains import ActionChains
|
||||
from selenium.webdriver.common.by import By
|
||||
|
||||
from .base import FunctionalTest
|
||||
from apps.applets.models import Applet
|
||||
|
||||
|
||||
class GameboardNavigationTest(FunctionalTest):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
Applet.objects.get_or_create(slug="new-game", defaults={"name": "New Game", "context": "gameboard"})
|
||||
Applet.objects.get_or_create(slug="my-games", defaults={"name": "My Games", "context": "gameboard"})
|
||||
Applet.objects.get_or_create(slug="game-kit", defaults={"name": "Game Kit", "context": "gameboard"})
|
||||
|
||||
def test_footer_links_to_gameboard(self):
|
||||
# 1. Log in, nav to dashboard
|
||||
self.create_pre_authenticated_session("capman@test.io")
|
||||
@@ -45,7 +53,7 @@ class GameboardNavigationTest(FunctionalTest):
|
||||
self.wait_for(
|
||||
lambda: self.browser.find_element(By.ID, "id_game_kit_btn")
|
||||
)
|
||||
self.browser.find_element(By.ID, "id_game_gear")
|
||||
self.browser.find_element(By.CSS_SELECTOR, ".gear-btn")
|
||||
# 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
|
||||
@@ -91,3 +99,75 @@ class GameboardNavigationTest(FunctionalTest):
|
||||
# 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")
|
||||
|
||||
|
||||
class GameboardAppletMenuTest(FunctionalTest):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
Applet.objects.get_or_create(slug="new-game", defaults={"name": "New Game", "context": "gameboard"})
|
||||
Applet.objects.get_or_create(slug="my-games", defaults={"name": "My Games", "context": "gameboard"})
|
||||
self.create_pre_authenticated_session("gamer@test.io")
|
||||
self.browser.get(self.live_server_url + "/gameboard/")
|
||||
|
||||
def test_user_can_toggle_applet_visibility_via_gear_menu(self):
|
||||
# 1. Assert both applets present
|
||||
self.wait_for(
|
||||
lambda: self.browser.find_element(By.ID, "id_applet_my_games")
|
||||
)
|
||||
self.browser.find_element(By.ID, "id_applet_new_game")
|
||||
# 2. Click gear; wait for menu
|
||||
self.browser.find_element(By.CSS_SELECTOR, ".gear-btn").click()
|
||||
self.wait_for(
|
||||
lambda: self.assertTrue(
|
||||
self.browser.find_element(By.ID, "id_game_applet_menu").is_displayed()
|
||||
)
|
||||
)
|
||||
# 3. Find checkboxes; assert both checked
|
||||
menu = self.browser.find_element(By.ID, "id_game_applet_menu")
|
||||
my_games_cb = menu.find_element(By.CSS_SELECTOR, '[name="applets"][value="my-games"]')
|
||||
new_game_cb = menu.find_element(By.CSS_SELECTOR, '[name="applets"][value="new-game"]')
|
||||
self.assertTrue(my_games_cb.is_selected())
|
||||
self.assertTrue(new_game_cb.is_selected())
|
||||
# 4. Uncheck my-games; plant no-reload marker; submit
|
||||
my_games_cb.click()
|
||||
self.assertFalse(my_games_cb.is_selected())
|
||||
self.browser.execute_script("window.__no_reload_marker = true")
|
||||
menu.find_element(By.CSS_SELECTOR, '[type="submit"]').click()
|
||||
# 5. Wait for menu to close; assert my-games gone, new game remains
|
||||
self.wait_for(
|
||||
lambda: self.assertFalse(
|
||||
self.browser.find_element(By.ID, "id_game_applet_menu").is_displayed()
|
||||
)
|
||||
)
|
||||
self.wait_for(
|
||||
lambda: self.assertRaises(
|
||||
NoSuchElementException,
|
||||
self.browser.find_element,
|
||||
By.ID, "id_applet_my_games",
|
||||
)
|
||||
)
|
||||
self.browser.find_element(By.ID, "id_applet_new_game")
|
||||
# 6. Re-check my-games; assert it reappears
|
||||
self.browser.find_element(By.CSS_SELECTOR, ".gear-btn").click()
|
||||
self.wait_for(
|
||||
lambda: self.assertTrue(
|
||||
self.browser.find_element(By.ID, "id_game_applet_menu").is_displayed()
|
||||
)
|
||||
)
|
||||
menu = self.browser.find_element(By.ID, "id_game_applet_menu")
|
||||
my_games_cb = menu.find_element(By.CSS_SELECTOR, '[name="applets"][value="my-games"]')
|
||||
self.assertFalse(my_games_cb.is_selected())
|
||||
my_games_cb.click()
|
||||
menu.find_element(By.CSS_SELECTOR, '[type="submit"]').click()
|
||||
self.wait_for(
|
||||
lambda: self.assertFalse(
|
||||
self.browser.find_element(By.ID, "id_game_applet_menu").is_displayed()
|
||||
)
|
||||
)
|
||||
self.wait_for(
|
||||
lambda: self.assertTrue(
|
||||
self.browser.find_element(By.ID, "id_applet_my_games")
|
||||
)
|
||||
)
|
||||
# 7. Assert no full page reload occurred
|
||||
self.assertTrue(self.browser.execute_script("return window.__no_reload_marker === true"))
|
||||
|
||||
Reference in New Issue
Block a user