class TestSeeInstrumentVariablesPageWithMissingFiles(BaseTestCase, NavbarTestMixin, FooterTestMixin, AccessibilityTestMixin): """ Test the SeeInstrumentVariablesPage without creating the test archive files first. This tests error cases, e.g. when reduce_vars is missing. """ fixtures = BaseTestCase.fixtures + ["one_run_mixed_vars"] def setUp(self) -> None: """ Sets up the VariableSummaryPage before each test """ super().setUp() self.instrument_name = "TestInstrument" self.page = VariableSummaryPage(self.driver, self.instrument_name) self.page.launch() def test_edit_no_reduce_vars_shows_error(self): """Tests: Error is shown when no reduce_vars.py exists and edit variables is clicked.""" self.page.click_run_edit_button_for(100100, 100150) message = self.page.message assert message.is_displayed() assert "No such file or directory" in message.text assert "user/scripts/autoreduction/reduce_vars.py" in message.text
def setUp(self) -> None: """ Sets up the VariableSummaryPage before each test """ super().setUp() self.instrument_name = "TestInstrument" self.page = VariableSummaryPage(self.driver, self.instrument_name) self.page.launch()
def test_submit_multiple_run_ranges_and_then_experiment(self): """Test submitting both run range vars and experiment vars""" self._submit_var_value("new_value", self.run_number + 1) self._submit_var_value("the newest value", self.run_number + 201) self._submit_var_value("some value for experiment", experiment_number=self.rb_number) self._submit_var_value("some different value for experiment", experiment_number=self.rb_number + 100) assert InstrumentVariable.objects.count() == 5 first_var, second_var, fourth_var, exp_var1, exp_var2 = InstrumentVariable.objects.all( ) self.assert_expected_var(first_var, self.run_number, None, "value1") self.assert_expected_var(second_var, self.run_number + 1, None, "new_value") self.assert_expected_var(fourth_var, self.run_number + 201, None, "the newest value") self.assert_expected_var(exp_var1, None, self.rb_number, "some value for experiment") self.assert_expected_var(exp_var2, None, self.rb_number + 100, "some different value for experiment") summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() assert summary.upcoming_variables_by_experiment.is_displayed() assert summary.upcoming_variables_by_run.is_displayed()
def test_configure_skipped_only_run_vars(self): """Test that configuring new runs works even with only skipped runs present""" self.page.variable1_field = "the new value in the field" self.page.submit_button.click() summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() assert summary.current_variables_by_run.text == "Current Variables\nNo current variables found" assert "Runs\n100000\nOngoing" in summary.upcoming_variables_by_run.text
def test_submit_then_edit_then_delete_experiment_vars(self): """Test submitting new variables for experiment reference, then editing them, then deleting them""" self._submit_var_value("new_value", experiment_number=1234567) self._submit_var_value("the newest value", experiment_number=2345678) summary = VariableSummaryPage(self.driver, self.instrument_name) summary.click_experiment_edit_button_for(1234567) self.page.variable1_field = "a new test value 123" self.page.submit_button.click() experiment_panel = summary.panels[1] assert "new_value" not in experiment_panel.get_attribute("textContent") assert "a new test value 123" in experiment_panel.get_attribute( "textContent") summary.click_experiment_delete_button_for(1234567) experiment_panel = summary.panels[1] incoming_exp_numbers = experiment_panel.find_elements_by_class_name( "run-numbers") assert "2345678" in incoming_exp_numbers[0].text summary.click_experiment_edit_button_for(2345678) self.page.variable1_field = "a new value for experiment 2345678" self.page.submit_button.click() experiment_panel = summary.panels[1] assert "the newest value" not in experiment_panel.get_attribute( "textContent") assert "a new value for experiment 2345678" in experiment_panel.get_attribute( "textContent") summary.click_experiment_delete_button_for(2345678) # only the current variables panel left assert len(summary.panels) == 1 assert "Runs\n99999\nOngoing\nvariable1: value1" in summary.panels[ 0].text
def test_configure_skipped_only_exp_vars(self): """Test that configuring new runs works even with only skipped runs present""" self.page = ConfigureNewRunsPage(self.driver, self.instrument_name, experiment_reference=1234567) self.page.launch() self.page.variable1_field = "the new value in the field" self.page.submit_button.click() summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() assert summary.current_variables_by_run.text == "Current Variables\nNo current variables found" assert summary.upcoming_variables_by_experiment.is_displayed() assert "Experiment\n#1234567" in summary.upcoming_variables_by_experiment.text
def test_submit_experiment_var(self): """Tests the functionality foe submitting a new variable for an experiment""" self._submit_var_value("new_value", experiment_number=self.rb_number) assert InstrumentVariable.objects.count() == 2 new_var = InstrumentVariable.objects.last() self.assert_expected_var(new_var, None, self.rb_number, "new_value") summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() assert summary.upcoming_variables_by_experiment.is_displayed() with self.assertRaises(NoSuchElementException): summary.upcoming_variables_by_run.is_displayed()
def test_submit_new_value(self): """ Test: Just opening the submit page and clicking rerun """ self._submit_var_value("new_value", self.run_number + 1) assert InstrumentVariable.objects.count() == 2 new_var = InstrumentVariable.objects.last() self.assert_expected_var(new_var, self.run_number + 1, None, "new_value") summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() assert summary.upcoming_variables_by_run.is_displayed() with self.assertRaises(NoSuchElementException): summary.upcoming_variables_by_experiment.is_displayed()
def test_submit_submit_same_variables_does_not_add_new_variables(self): """ Test: Just opening the submit page and clicking rerun """ self.page = ConfigureNewRunsPage(self.driver, self.instrument_name, run_start=self.run_number + 1) self.page.launch() self.page.submit_button.click() assert InstrumentVariable.objects.count() == 1 summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() with self.assertRaises(NoSuchElementException): summary.upcoming_variables_by_run.is_displayed() with self.assertRaises(NoSuchElementException): summary.upcoming_variables_by_experiment.is_displayed()
def test_submit_multiple_experiments(self): """Test submitting vars for multiple experiments""" self._submit_var_value("new_value", experiment_number=self.rb_number) self._submit_var_value("the newest value", experiment_number=self.rb_number + 100) assert InstrumentVariable.objects.count() == 3 first_var, second_var, third_var = InstrumentVariable.objects.all() self.assert_expected_var(first_var, self.run_number, None, "value1") self.assert_expected_var(second_var, None, self.rb_number, "new_value") self.assert_expected_var(third_var, None, self.rb_number + 100, "the newest value") summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() assert summary.upcoming_variables_by_experiment.is_displayed() with self.assertRaises(NoSuchElementException): summary.upcoming_variables_by_run.is_displayed()
def test_submit_multiple_run_ranges(self): """ Test submitting variables for multiple run ranges, and that they show up correctly in 'see instrument variables' """ self._submit_var_value("new_value", self.run_number + 1) self._submit_var_value("the newest value", self.run_number + 101) assert InstrumentVariable.objects.count() == 3 first_var, second_var, third_var = InstrumentVariable.objects.all() self.assert_expected_var(first_var, self.run_number, None, "value1") self.assert_expected_var(second_var, self.run_number + 1, None, "new_value") self.assert_expected_var(third_var, self.run_number + 101, None, "the newest value") summary = VariableSummaryPage(self.driver, self.instrument_name) assert summary.current_variables_by_run.is_displayed() assert summary.upcoming_variables_by_run.is_displayed() with self.assertRaises(NoSuchElementException): assert summary.upcoming_variables_by_experiment.is_displayed()
class TestSeeInstrumentVariablesPage(BaseTestCase): fixtures = BaseTestCase.fixtures + ["one_run_mixed_vars"] @classmethod def setUpClass(cls): """Sets up the data archive with a reduce and reduce_vars script to be shared between test cases""" super().setUpClass() cls.instrument_name = "TestInstrument" cls.data_archive = DataArchive([cls.instrument_name], 21, 21) cls.data_archive.create() cls.data_archive.add_reduction_script(cls.instrument_name, """print('some text')""") # NOTE the value here must match the value of the last variable in the fixture # if it doesn't it's value will be updated once the previous range (100151-100199) is updated # this is expected, as the final variable (valid for 100200 onwards) should have the default script value! cls.data_archive.add_reduce_vars_script( cls.instrument_name, """standard_vars={"variable1":"value4"}""") @classmethod def tearDownClass(cls) -> None: """Destroys the created DataArchive""" cls.data_archive.delete() super().tearDownClass() def setUp(self) -> None: """Sets up the VariableSummaryPage before each test case""" super().setUp() self.page = VariableSummaryPage(self.driver, self.instrument_name) self.page.launch() @parameterized.expand([ (100100, 100150, "value2", ["some new value", "value3", "value4"]), (100151, 100199, "value3", ["value2", "some new value", "value4"]), (100200, 0, "value4", ["value2", "value3", "some new value"]) ]) def test_edit(self, start: int, end: int, value_to_modify: str, expected_strings: List[str]): """Test: That run variables can be edited for upcoming runs.""" upcoming_panel = self.page.panels[1] # makes sure the value we are going to modify is present in the initial values assert value_to_modify in upcoming_panel.get_attribute("textContent") self.page.click_run_edit_button_for(start, end) new_runs_page = ConfigureNewRunsPage(self.driver, self.instrument_name, start, end) assert new_runs_page.run_start_val == str(start) assert new_runs_page.variable1_field_val == value_to_modify new_runs_page.variable1_field = "some new value" new_runs_page.submit_button.click() new_runs_page.replace_confirm.click() upcoming_panel = self.page.panels[1] # make sure the value we are modifying is no longer visible assert value_to_modify not in upcoming_panel.get_attribute( "textContent") # checks that the newly edited value is present, but also that the unaffected ones are still there for expected in expected_strings: assert expected in upcoming_panel.get_attribute("textContent") @parameterized.expand([(100100, 100150, "value2", 100150), (100151, 100199, "value3", 100099), (100200, 0, "value4", 100099)]) def test_delete_variable_for_run(self, start: int, end: int, value_to_delete: str, end_run_for_current_vars: int): """Tests that variables can be deleted from upcoming runs""" upcoming_panel = self.page.panels[1] # makes sure the value we are going to modify is present in the initial values assert value_to_delete in upcoming_panel.get_attribute("textContent") incoming_run_numbers = upcoming_panel.find_elements_by_class_name( "run-numbers") assert "100100" in incoming_run_numbers[0].text assert "100150" in incoming_run_numbers[0].text assert "100151" in incoming_run_numbers[1].text assert "100199" in incoming_run_numbers[1].text assert "100200" in incoming_run_numbers[2].text assert "Ongoing" in incoming_run_numbers[2].text self.page.click_run_delete_button_for(start, end) current_panel_runs = self.page.panels[0].find_element_by_class_name( "run-numbers") # check that the current variables end at the correct run assert str(end_run_for_current_vars) in current_panel_runs.text upcoming_panel = self.page.panels[1] # make sure the value we are modifying is no longer visible assert value_to_delete not in upcoming_panel.get_attribute( "textContent") @parameterized.expand([[1234567], [7654321]]) def test_edit_experiment(self, experiment_reference): """Tests: Variables can be edited for upcoming runs for an experiment""" experiment_panel = self.page.panels[2] # makes sure the value we are going to modify is present in the initial values assert f"experiment {experiment_reference} var" in experiment_panel.get_attribute( "textContent") self.page.click_experiment_edit_button_for(experiment_reference) new_runs_page = ConfigureNewRunsPage( self.driver, self.instrument_name, experiment_reference=experiment_reference) assert new_runs_page.variable1_field_val == f"experiment {experiment_reference} var" new_runs_page.variable1_field = "some new value" new_runs_page.submit_button.click() experiment_panel = self.page.panels[2] assert f"experiment {experiment_reference} var" not in experiment_panel.get_attribute( "textContent") assert "some new value" in experiment_panel.get_attribute( "textContent") @parameterized.expand([[1234567], [7654321]]) def test_delete_variable_for_experiment(self, experiment_reference): """Tests: Variables can be deleted for an experiment""" experiment_panel = self.page.panels[2] # makes sure the value we are going to modify is present in the initial values assert f"experiment {experiment_reference} var" in experiment_panel.get_attribute( "textContent") self.page.click_experiment_delete_button_for(experiment_reference) experiment_panel = self.page.panels[2] assert f"experiment {experiment_reference} var" not in experiment_panel.get_attribute( "textContent")
def test_submit_then_edit_then_delete_run_vars(self): """Test submitting new variables for run ranges, then editing them, then deleting them""" self._submit_var_value("new_value", self.run_number + 1) self._submit_var_value("the newest value", self.run_number + 101) self._submit_var_value("value for 201", self.run_number + 201) self._submit_var_value("value for 301", self.run_number + 301) summary = VariableSummaryPage(self.driver, self.instrument_name) summary.click_run_edit_button_for(self.run_number + 1, self.run_number + 100) self.page.variable1_field = "a new test value 123" self.page.submit_button.click() self.page.replace_confirm.click() upcoming_panel = summary.panels[1] assert "new_value" not in upcoming_panel.get_attribute("textContent") assert "a new test value 123" in upcoming_panel.get_attribute( "textContent") summary.click_run_delete_button_for(self.run_number + 1, self.run_number + 100) upcoming_panel = summary.panels[1] assert "a new test value 123" not in upcoming_panel.get_attribute( "textContent") incoming_run_numbers = upcoming_panel.find_elements_by_class_name( "run-numbers") assert "100100" in incoming_run_numbers[0].text assert "100199" in incoming_run_numbers[0].text assert "100200" in incoming_run_numbers[1].text assert "100299" in incoming_run_numbers[1].text assert "100300" in incoming_run_numbers[2].text assert "Ongoing" in incoming_run_numbers[2].text # now for the 2nd variable we made summary.click_run_edit_button_for(self.run_number + 201, self.run_number + 300) self.page.variable1_field = "another new test value 321" self.page.submit_button.click() self.page.replace_confirm.click() upcoming_panel = summary.panels[1] assert "new_value" not in upcoming_panel.get_attribute("textContent") assert "another new test value 321" in upcoming_panel.get_attribute( "textContent") summary.click_run_delete_button_for(self.run_number + 201, self.run_number + 300) upcoming_panel = summary.panels[1] assert "another new test value 321" not in upcoming_panel.get_attribute( "textContent") incoming_run_numbers = upcoming_panel.find_elements_by_class_name( "run-numbers") # there's a few leftover default variables, but that's OK because the user can remove them assert "100100" in incoming_run_numbers[0].text assert "100299" in incoming_run_numbers[0].text assert "100300" in incoming_run_numbers[1].text assert "Ongoing" in incoming_run_numbers[1].text