Esempio n. 1
0
    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()
        assert first_var.start_run == self.run_number
        assert first_var.experiment_reference is None
        assert first_var.value == "value1"

        assert second_var.start_run is None
        assert second_var.experiment_reference == self.rb_number
        assert second_var.value == "new_value"

        assert third_var.start_run is None
        assert third_var.experiment_reference == self.rb_number + 100
        assert third_var.value == "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()
Esempio n. 2
0
    def test_submit_multiple_run_ranges(self):
        """Test submitting variables for multiple run ranges, and that they show up correctly in 'see instrument variablers'"""
        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()
        assert first_var.start_run == self.run_number
        assert first_var.experiment_reference is None
        assert first_var.value == "value1"

        assert second_var.start_run == self.run_number + 1
        assert second_var.experiment_reference is None
        assert second_var.value == "new_value"

        assert third_var.start_run == self.run_number + 101
        assert third_var.experiment_reference is None
        assert third_var.value == "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()
Esempio n. 3
0
    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.experiment_edit_button_for(1234567)[0].click()

        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.experiment_delete_button_for(1234567)[0].click()

        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.experiment_edit_button_for(2345678)[0].click()

        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.experiment_delete_button_for(2345678)[0].click()

        # only the current variables panel left
        assert len(summary.panels) == 1
        assert "Runs\n99999\nOngoing\nvariable1: value1" in summary.panels[
            0].text
Esempio n. 4
0
class TestSeeInstrumentVariablesPageWithMissingFiles(BaseTestCase,
                                                     NavbarTestMixin,
                                                     FooterTestMixin):
    """
    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:
        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):
        btn, url = self.page.run_edit_button_for(100100, 100150)
        btn.click()
        assert url in self.driver.current_url
        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
Esempio n. 5
0
    def test_submit_experiment_var(self):
        self._submit_var_value("new_value", experiment_number=self.rb_number)

        assert InstrumentVariable.objects.count() == 2
        new_var = InstrumentVariable.objects.last()
        assert new_var.start_run is None
        assert new_var.experiment_reference == self.rb_number
        assert new_var.value == "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()
Esempio n. 6
0
    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()
        assert new_var.start_run == self.run_number + 1
        assert new_var.value == "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()
Esempio n. 7
0
    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.run_number + 101)
        self._submit_var_value("the newest value", self.run_number + 201,
                               self.run_number + 401)
        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() == 7
        first_var, second_var, third_var, fourth_var, fifth_var, exp_var1, exp_var2 = InstrumentVariable.objects.all(
        )

        assert first_var.start_run == self.run_number
        assert first_var.experiment_reference is None
        assert first_var.value == "value1"

        assert second_var.start_run == self.run_number + 1
        assert second_var.experiment_reference is None
        assert second_var.value == "new_value"

        assert third_var.start_run == self.run_number + 102
        assert third_var.experiment_reference is None
        assert third_var.value == REDUCE_VARS_DEFAULT_VALUE  # back to the default value from the reduce_vars!

        assert fourth_var.start_run == self.run_number + 201
        assert fourth_var.experiment_reference is None
        assert fourth_var.value == "the newest value"

        assert fifth_var.start_run == self.run_number + 402
        assert fifth_var.experiment_reference is None
        assert fifth_var.value == REDUCE_VARS_DEFAULT_VALUE  # back to the default value from the reduce_vars!

        assert exp_var1.start_run is None
        assert exp_var1.experiment_reference == self.rb_number
        assert exp_var1.value == "some value for experiment"

        assert exp_var2.start_run is None
        assert exp_var2.experiment_reference == self.rb_number + 100
        assert exp_var2.value == "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()
Esempio n. 8
0
    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()
Esempio n. 9
0
 def setUp(self) -> None:
     super().setUp()
     self.page = VariableSummaryPage(self.driver, self.instrument_name)
     self.page.launch()
Esempio n. 10
0
class TestSeeInstrumentVariablesPage(BaseTestCase):

    fixtures = BaseTestCase.fixtures + ["one_run_mixed_vars"]

    @classmethod
    def setUpClass(cls):
        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:
        cls.data_archive.delete()
        super().tearDownClass()

    def setUp(self) -> None:
        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]):
        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")

        btn, url = self.page.run_edit_button_for(start, end)
        btn.click()
        assert url in self.driver.current_url
        new_runs_page = ConfigureNewRunsPage(self.driver, self.instrument_name,
                                             start, end)
        assert new_runs_page.run_start_val == str(start)
        if end > 0:
            assert new_runs_page.run_end_val == str(end)

        # this is actually the wrong value - known issue and documented at
        # https://github.com/ISISScientificComputing/autoreduce/issues/1133
        # Once it's fixed this test should fail - the correct assertion would be
        # assert new_runs_page.variable1_field_val == "value2"
        assert new_runs_page.variable1_field_val == "value1"

        new_runs_page.variable1_field = "some new value"
        new_runs_page.submit_button.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):

        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

        btn, _ = self.page.run_delete_button_for(start, end)
        btn.click()

        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):
        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")

        btn, url = self.page.experiment_edit_button_for(experiment_reference)
        btn.click()
        assert url in self.driver.current_url
        new_runs_page = ConfigureNewRunsPage(
            self.driver,
            self.instrument_name,
            experiment_reference=experiment_reference)

        # this is actually the wrong value - known issue and documented at
        # https://github.com/ISISScientificComputing/autoreduce/issues/1133
        # Once it's fixed this test should fail - the correct assertion would be
        # assert new_runs_page.variable1_field_val == f"experiment {experiment_reference} var"
        assert new_runs_page.variable1_field_val == "value1"

        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):
        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")

        btn, _ = self.page.experiment_delete_button_for(experiment_reference)
        btn.click()
        experiment_panel = self.page.panels[2]
        assert f"experiment {experiment_reference} var" not in experiment_panel.get_attribute(
            "textContent")
Esempio n. 11
0
    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.run_number + 101)
        self._submit_var_value("the newest value", self.run_number + 201,
                               self.run_number + 401)

        summary = VariableSummaryPage(self.driver, self.instrument_name)

        summary.run_edit_button_for(self.run_number + 1,
                                    self.run_number + 101)[0].click()

        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.run_delete_button_for(self.run_number + 1,
                                      self.run_number + 101)[0].click()

        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 "100101" in incoming_run_numbers[0].text
        assert "100199" in incoming_run_numbers[0].text
        assert "100200" in incoming_run_numbers[1].text
        assert "100400" in incoming_run_numbers[1].text
        assert "100401" in incoming_run_numbers[2].text
        assert "Ongoing" in incoming_run_numbers[2].text

        # now for the 2nd variable we made
        summary.run_edit_button_for(self.run_number + 201,
                                    self.run_number + 401)[0].click()
        self.page.variable1_field = "another new test value 321"
        self.page.submit_button.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.run_delete_button_for(self.run_number + 201,
                                      self.run_number + 401)[0].click()

        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 "100101" in incoming_run_numbers[0].text
        assert "100400" in incoming_run_numbers[0].text
        assert "100401" in incoming_run_numbers[1].text
        assert "Ongoing" in incoming_run_numbers[1].text