"""Ombre portée (panneau de propriétés, tout widget) : 6 sous-réglages (décalage X/Y, flou, étendue, couleur, opacité) combinés en une seule valeur CSS box-shadow.""" import re import screens def _create_element(client, slug, widget="conteneur"): resp = client.post(f"/game/{slug}/screens/new", data={"name": "Accueil"}, follow_redirects=False) screen_id = int(re.search(r"/screens/(\d+)/edit", resp.headers["Location"]).group(1)) resp = client.post(f"/game/{slug}/screens/{screen_id}/elements/add", data={"widget": widget}, follow_redirects=False) element_id = int(re.search(r"selected=(\d+)", resp.headers["Location"]).group(1)) return screen_id, element_id def test_shadow_controls_appear_in_the_properties_panel(client, game): screen_id, element_id = _create_element(client, game) html = client.get(f"/game/{game}/screens/{screen_id}/edit?selected={element_id}").data.decode() assert "ctrl_box-shadow_x" in html assert "ctrl_box-shadow_color" in html def test_saving_a_shadow_composes_box_shadow_css(client, game): screen_id, element_id = _create_element(client, game) client.post(f"/game/{game}/elements/{element_id}/save", data={ "ctrl_box-shadow_x": "2", "ctrl_box-shadow_y": "6", "ctrl_box-shadow_blur": "20", "ctrl_box-shadow_spread": "3", "ctrl_box-shadow_color": "#ff0000", "ctrl_box-shadow_opacity": "0.5", }) el = screens.get_element(game, element_id) assert el["style"]["box-shadow"] == "2px 6px 20px 3px rgba(255, 0, 0, 0.5)" def test_shadow_value_round_trips_back_into_the_form(client, game): screen_id, element_id = _create_element(client, game) client.post(f"/game/{game}/elements/{element_id}/save", data={ "ctrl_box-shadow_x": "2", "ctrl_box-shadow_y": "6", "ctrl_box-shadow_blur": "20", "ctrl_box-shadow_spread": "3", "ctrl_box-shadow_color": "#ff0000", "ctrl_box-shadow_opacity": "0.5", }) html = client.get(f"/game/{game}/screens/{screen_id}/edit?selected={element_id}").data.decode() assert 'name="ctrl_box-shadow_x" value="2.0"' in html or 'name="ctrl_box-shadow_x" value="2"' in html assert 'name="ctrl_box-shadow_color" value="#ff0000"' in html def test_all_zero_offsets_remove_the_shadow(client, game): screen_id, element_id = _create_element(client, game) client.post(f"/game/{game}/elements/{element_id}/save", data={ "ctrl_box-shadow_x": "2", "ctrl_box-shadow_y": "6", "ctrl_box-shadow_blur": "20", "ctrl_box-shadow_spread": "3", "ctrl_box-shadow_color": "#ff0000", "ctrl_box-shadow_opacity": "0.5", }) client.post(f"/game/{game}/elements/{element_id}/save", data={ "ctrl_box-shadow_x": "0", "ctrl_box-shadow_y": "0", "ctrl_box-shadow_blur": "0", "ctrl_box-shadow_spread": "0", "ctrl_box-shadow_color": "#ff0000", "ctrl_box-shadow_opacity": "0.5", }) el = screens.get_element(game, element_id) assert "box-shadow" not in el["style"]