def test_jump_backwards(self, exp): main = al.Section(name="main") smart = al.HideOnForwardSection(name="smart") main += al.Page(name="first") smart += al.Page(name="second") smart += al.Page(name="third") exp += main exp += smart exp.start() exp.forward() assert exp.current_page.name == "first" exp.forward() assert exp.current_page.name == "second" exp.backward() assert exp.current_page.name == "first" exp.forward() exp.forward() assert exp.current_page.name == "third" exp.backward() assert exp.current_page.name == "first" exp.forward() assert exp.current_page.name == "third" assert exp.second.is_closed
def test_allow_backward_to(self, exp, caplog): caplog.set_level(logging.DEBUG) exp.basic_section.allow_backward = False inner = al.Section(name="inner") outer = al.Section(name="outer") outer += inner inner += al.Page(name="inner_page") outer += al.Page(name="outer_page") exp += outer inner.allow_backward = False exp.start() exp.jump("inner_page") exp.movement_manager.move("forward") assert exp.current_page.name == "outer_page" exp.movement_manager.move("backward") assert exp.current_page.name == "outer_page" assert "inner_page" in caplog.text assert "does not allow movement in direction 'backward'" in caplog.text
def test_last_page(self): main = al.Section(name="main") main += al.Page(name="p1") main += al.Page(name="p2") assert main.p1 is not main.last_page assert main.p2 is main.last_page
def test_admin_without_password(self, tmp_path): exp = al.Experiment() exp.admin += al.Page(name="admin_test") config = ExperimentConfig(tmp_path) secrets = ExperimentSecrets(tmp_path) urlargs = {"admin": "true"} with pytest.raises(AlfredError): exp.create_session("sid1", config, secrets, **urlargs)
def exp(tmp_path): script = "tests/res/script-hello_world.py" secrets = "tests/res/secrets-default.conf" exp = get_exp_session(tmp_path, script_path=script, secrets_path=secrets) exp += al.Page(title="Testpage", name="testpage") yield exp clear_db()
def test_admin_missing_password(self, tmp_path): exp = al.Experiment() exp.admin += al.Page(name="admin_test") config = ExperimentConfig(tmp_path) secrets = ExperimentSecrets(tmp_path) urlargs = {"admin": "true"} secrets.read_dict({"general": {"adminpass_lvl2": "test"}}) with pytest.raises(AlfredError) as excinfo: exp.create_session("sid1", config, secrets, **urlargs) msg = str(excinfo.value) assert "lvl1" in msg and "lvl3" in msg and not "lvl2" in msg
def test_admin(self, tmp_path): exp = al.Experiment() exp.admin += al.Page(name="admin_test") config = ExperimentConfig(tmp_path) secrets = ExperimentSecrets(tmp_path) secrets.read_dict({ "general": { "adminpass_lvl1": "test1", "adminpass_lvl2": "test2", "adminpass_lvl3": "test3" } }) urlargs = {"admin": "true"} session = exp.create_session("sid1", config, secrets, **urlargs) assert session.admin_mode
def test_skip_on_hiding(self, blank_exp, caplog): caplog.set_level(logging.DEBUG) exp = blank_exp class TestPage(al.Page): def on_first_hide(self): self.log.info(f"{self.name}: on_first_hide executed") self.exp.my_target_test_page.should_be_shown = False exp += TestPage(name="test_page") exp += al.Page(name="my_target_test_page") exp.start() assert exp.current_page.name == "test_page" exp.forward() assert exp.finished assert not "my_target_test_page: on_first_show executed" in caplog.text assert not "my_target_test_page: on_each_show executed" in caplog.text assert not "my_target_test_page: on_first_hide executed" in caplog.text assert not "my_target_test_page: on_each_show executed" in caplog.text
def test_admin_equal_passwords(self, tmp_path): exp = al.Experiment() exp.admin += al.Page(name="admin_test") config = ExperimentConfig(tmp_path) secrets = ExperimentSecrets(tmp_path) urlargs = {"admin": "true"} secrets.read_dict({ "general": { "adminpass_lvl1": "test", "adminpass_lvl2": "test", "adminpass_lvl3": "test1" } }) with pytest.raises(AlfredError) as excinfo: exp.create_session("sid1", config, secrets, **urlargs) msg = str(excinfo.value) assert "Passwords must be unique to a level" in msg
import alfred3 as al exp = al.Experiment() exp += al.Page(title="Page 1", name="p1")
def on_first_hide(self): self.log.info(f"{self.name}: on_first_hide executed") self.exp += al.Page(name="added_page") return super().on_first_hide()
""" You can run the experiment by executing the following command in a terminal from inside the experiment directory:: $ alfred3 run Refer to the alfred documentation for more guidance. """ import alfred3 as al exp = al.Experiment() exp += al.Page(title="Hello, world!", name="hello_world") if __name__ == "__main__": exp.run()
import alfred3 as al from alfred3 import admin exp = al.Experiment() class MySpectatorPage(admin.SpectatorPage): def on_exp_access(self): self += al.Text("My spectator page") class MyOperatorPage(admin.OperatorPage): def on_exp_access(self): self += al.Text("My operator page") class MyManagerPage(admin.ManagerPage): def on_exp_access(self): self += al.Text("My manager page") exp.admin += MySpectatorPage(title="Spectator", name="spectator") exp.admin += MyOperatorPage(title="Operator", name="operator") exp.admin += MyManagerPage(title="Manager", name="manager") exp += al.Page(title="normal", name="normal") if __name__ == "__main__": exp.run(open_browser=False)