Commit 40855e52 authored by Duggan, John's avatar Duggan, John
Browse files

Clean up tests

parent 75c9acbb
Loading
Loading
Loading
Loading
Loading
+19 −18
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ class NeutronDataSelector(DataSelector):
        instrument: Union[str, Tuple] = "",
        experiment: Union[str, Tuple] = "",
        extensions: Union[List[str], Tuple, None] = None,
        prefix: Union[str, Tuple] = "",
        subdirectory: Union[str, Tuple] = "",
        refresh_rate: Union[int, Tuple] = 30,
        select_strategy: Union[str, Tuple] = "all",
@@ -57,8 +56,6 @@ class NeutronDataSelector(DataSelector):
            The experiment to restrict data selection to.
        extensions : Union[List[str], Tuple], optional
            A list of file extensions to restrict selection to. If unset, then all files will be shown.
        prefix : Union[str, Tuple], optional
            Deprecated. Please refer to the `subdirectory` parameter.
        subdirectory : Union[str, Tuple], optional
            A subdirectory within the user's chosen experiment to show files. If not specified as a string, the user
            will be shown a folder browser and will be able to see all files in the experiment that they have access to.
@@ -80,14 +77,12 @@ class NeutronDataSelector(DataSelector):
            warn("allow_custom_directories will be ignored since the facility parameter is fixed.", stacklevel=1)

        self._facility = facility
        self._last_facility = get_state_param(self.state, self._facility)
        self._instrument = instrument
        self._last_instrument = get_state_param(self.state, self._instrument)
        self._experiment = experiment
        self._last_experiment = get_state_param(self.state, self._experiment)
        self._allow_custom_directories = allow_custom_directories
        self._last_allow_custom_directories = self._allow_custom_directories

        self._state_name = f"nova__dataselector_{self._next_id}_state"
        self._facilities_name = f"nova__neutrondataselector_{self._next_id}_facilities"
        self._selected_facility_name = (
            self._facility[0] if isinstance(self._facility, tuple) else f"{self._state_name}.facility"
@@ -164,9 +159,9 @@ class NeutronDataSelector(DataSelector):

    def on_update(self, results: Dict[str, Any]) -> None:
        self._vm.set_binding_parameters(
            facility=get_state_param(self.state, self._facility),
            instrument=get_state_param(self.state, self._instrument),
            experiment=get_state_param(self.state, self._experiment),
            facility=get_state_param(self.state, self._selected_facility_name),
            instrument=get_state_param(self.state, self._selected_instrument_name),
            experiment=get_state_param(self.state, self._selected_experiment_name),
            allow_custom_directories=get_state_param(self.state, self._allow_custom_directories),
        )

@@ -176,6 +171,10 @@ class NeutronDataSelector(DataSelector):
        set_state_param(self.state, self._experiment)
        set_state_param(self.state, self._allow_custom_directories)

        self._last_facility = get_state_param(self.state, self._facility)
        self._last_instrument = get_state_param(self.state, self._instrument)
        self._last_experiment = get_state_param(self.state, self._experiment)

        self._vm.set_binding_parameters(
            facility=get_state_param(self.state, self._facility),
            instrument=get_state_param(self.state, self._instrument),
@@ -190,7 +189,9 @@ class NeutronDataSelector(DataSelector):
                facility = rgetdictvalue(kwargs, self._facility[0])
                if facility != self._last_facility:
                    self._last_facility = facility
                    self._vm.set_binding_parameters(facility=set_state_param(self.state, self._facility, facility))
                    self._vm.set_binding_parameters(
                        facility=set_state_param(self.state, (self._selected_facility_name,), facility)
                    )
                    self._vm.reset()

        if isinstance(self._instrument, tuple):
@@ -201,7 +202,7 @@ class NeutronDataSelector(DataSelector):
                if instrument != self._last_instrument:
                    self._last_instrument = instrument
                    self._vm.set_binding_parameters(
                        instrument=set_state_param(self.state, self._instrument, instrument)
                        instrument=set_state_param(self.state, (self._selected_instrument_name,), instrument)
                    )
                    self._vm.reset()

@@ -213,7 +214,7 @@ class NeutronDataSelector(DataSelector):
                if experiment != self._last_experiment:
                    self._last_experiment = experiment
                    self._vm.set_binding_parameters(
                        experiment=set_state_param(self.state, self._experiment, experiment)
                        experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment)
                    )
                    self._vm.reset()

@@ -232,21 +233,21 @@ class NeutronDataSelector(DataSelector):

    def update_facility(self, facility: str) -> None:
        self._vm.set_binding_parameters(
            facility=set_state_param(self.state, self._facility, facility),
            instrument=set_state_param(self.state, self._instrument, ""),
            experiment=set_state_param(self.state, self._experiment, ""),
            facility=set_state_param(self.state, (self._selected_facility_name,), facility),
            instrument=set_state_param(self.state, (self._selected_instrument_name,), ""),
            experiment=set_state_param(self.state, (self._selected_experiment_name,), ""),
        )
        self._vm.reset()

    def update_instrument(self, instrument: str) -> None:
        self._vm.set_binding_parameters(
            instrument=set_state_param(self.state, self._instrument, instrument),
            experiment=set_state_param(self.state, self._experiment, ""),
            instrument=set_state_param(self.state, (self._selected_instrument_name,), instrument),
            experiment=set_state_param(self.state, (self._selected_experiment_name,), ""),
        )
        self._vm.reset()

    def update_experiment(self, experiment: str) -> None:
        self._vm.set_binding_parameters(
            experiment=set_state_param(self.state, self._experiment, experiment),
            experiment=set_state_param(self.state, (self._selected_experiment_name,), experiment),
        )
        self._vm.reset()
+45 −25
Original line number Diff line number Diff line
"""Unit tests for DataSelector."""

from warnings import catch_warnings
from typing import List

from pydantic import BaseModel, Field
from trame.app import get_server
from trame_server.core import Server

from nova.trame.view.components.ornl import NeutronDataSelector
from nova.mvvm.trame_binding import TrameBinding
from nova.trame.view.components import DataSelector
from nova.trame.view.theme import ThemedApp


@@ -19,30 +21,48 @@ def test_data_selector() -> None:
        def create_ui(self) -> None:
            with super().create_ui() as layout:
                with layout.content:
                    input = NeutronDataSelector(v_model="test", extensions=[".tiff"])
                    input = DataSelector(v_model="test", directory="/", extensions=[".tiff"])
                    assert input.v_model == "test"
                    assert input._directory == "/"
                    assert input._extensions == [".tiff"]
                    assert input._model.state.facility == ""
                    assert input._model.state.instrument == ""
                    assert input._model.state.experiment == ""

                    input.set_state(facility="HFIR", instrument="CG-2", experiment="IPTS-27744")
                    assert input._model.state.facility == "HFIR"
                    assert input._model.state.instrument == "CG-2"
                    assert input._model.state.experiment == "IPTS-27744"

                    with catch_warnings(record=True) as captured_warnings:
                        input.set_state(facility="NSS")
                        assert str(captured_warnings[0].message).startswith("Facility 'NSS' could not be found.")

                    with catch_warnings(record=True) as captured_warnings:
                        NeutronDataSelector(v_model="test", facility="HIFR")
                        assert str(captured_warnings[0].message).startswith("Facility 'HIFR' could not be found.")

                    with catch_warnings(record=True) as captured_warnings:
                        NeutronDataSelector(v_model="test", facility="SNS", instrument="BL1B")
                        assert str(captured_warnings[0].message).startswith(
                            "Instrument 'BL1B' could not be found in 'SNS'."

    MyTrameApp()


def test_parameter_bindings() -> None:
    class TestModel(BaseModel):
        v_model: List[str] = Field(default=[])
        directory: str = Field(default="")
        extensions: List[str] = Field(default=[])
        prefix: str = Field(default="")
        refresh_rate: int = Field(default=0)
        select_strategy: str = Field(default="")

    class MyTrameApp(ThemedApp):
        def __init__(self, server: Server = None) -> None:
            self.server = get_server(None, client_type="vue3")
            super().__init__(server=self.server)

            self.create_binding()
            self.create_ui()

        def create_binding(self) -> None:
            self.test_obj = TestModel()

            binding = TrameBinding(self.server.state)
            self.test_binding = binding.new_bind(self.test_obj)
            self.test_binding.connect("test_ds")

        def create_ui(self) -> None:
            with super().create_ui() as layout:
                with layout.content:
                    DataSelector(
                        v_model=("test_ds.v_model", ["test.txt"]),
                        directory=("test_ds.directory", "/"),
                        extensions=("test_ds.extensions", [".txt"]),
                        prefix=("test_ds.prefix", "bin"),
                        refresh_rate=("test_ds.refresh_rate", 15),
                        select_strategy=("test_ds.select_strategy", "page"),
                    )

    MyTrameApp()
+87 −0
Original line number Diff line number Diff line
"""Unit tests for NeutronDataSelector."""

from typing import List
from warnings import catch_warnings

from pydantic import BaseModel, Field
from trame.app import get_server
from trame_server.core import Server

from nova.mvvm.trame_binding import TrameBinding
from nova.trame.view.components.ornl import NeutronDataSelector
from nova.trame.view.theme import ThemedApp


def test_data_selector() -> None:
    class MyTrameApp(ThemedApp):
        def __init__(self, server: Server = None) -> None:
            server = get_server(None, client_type="vue3")
            super().__init__(server=server)
            self.create_ui()

        def create_ui(self) -> None:
            with super().create_ui() as layout:
                with layout.content:
                    input = NeutronDataSelector(v_model="test", extensions=[".tiff"])
                    assert input.v_model == "test"
                    assert input._extensions == [".tiff"]
                    assert input._model.state.facility == ""
                    assert input._model.state.instrument == ""
                    assert input._model.state.experiment == ""

                    input.update_facility("HFIR")
                    input.update_instrument("CG-2")
                    input.update_experiment("IPTS-27744")

                    with catch_warnings(record=True) as captured_warnings:
                        input.update_facility(facility="NSS")
                        assert str(captured_warnings[0].message).startswith("Facility 'NSS' could not be found.")

                    with catch_warnings(record=True) as captured_warnings:
                        NeutronDataSelector(v_model="test", facility="HIFR")
                        assert str(captured_warnings[0].message).startswith("Facility 'HIFR' could not be found.")

                    with catch_warnings(record=True) as captured_warnings:
                        NeutronDataSelector(v_model="test", facility="SNS", instrument="BL1B")
                        assert str(captured_warnings[0].message).startswith(
                            "Instrument 'BL1B' could not be found in 'SNS'."
                        )

    MyTrameApp()


def test_parameter_bindings() -> None:
    class TestModel(BaseModel):
        v_model: List[str] = Field(default=[])
        facility: str = Field(default="")
        instrument: str = Field(default="")
        experiment: str = Field(default="")
        allow_custom_directories: bool = Field(default=False)

    class MyTrameApp(ThemedApp):
        def __init__(self, server: Server = None) -> None:
            self.server = get_server(None, client_type="vue3")
            super().__init__(server=self.server)

            self.create_binding()
            self.create_ui()

        def create_binding(self) -> None:
            self.test_obj = TestModel()

            binding = TrameBinding(self.server.state)
            self.test_binding = binding.new_bind(self.test_obj)
            self.test_binding.connect("test_nds")

        def create_ui(self) -> None:
            with super().create_ui() as layout:
                with layout.content:
                    NeutronDataSelector(
                        v_model=("test_nds.v_model", ["test.txt"]),
                        facility=("test_nds.facility", "SNS"),
                        instrument=("test_nds.instrument", "BL-12"),
                        experiment=("test_nds.experiment",),
                        allow_custom_directories=("test_nds.allow_custom_directories", True),
                    )

    MyTrameApp()

tests/test_parameter_bindings.py

deleted100644 → 0
+0 −50
Original line number Diff line number Diff line
"""Unit tests for DataSelector."""

from typing import List

from pydantic import BaseModel, Field
from trame.app import get_server
from trame_server.core import Server

from nova.mvvm.trame_binding import TrameBinding
from nova.trame.view.components import DataSelector
from nova.trame.view.theme import ThemedApp


def test_parameter_bindings() -> None:
    class TestModel(BaseModel):
        v_model: List[str] = Field(default=[])
        directory: str = Field(default="")
        extensions: List[str] = Field(default=[])
        prefix: str = Field(default="")
        refresh_rate: int = Field(default=0)
        select_strategy: str = Field(default="")

    class MyTrameApp(ThemedApp):
        def __init__(self, server: Server = None) -> None:
            self.server = get_server(None, client_type="vue3")
            super().__init__(server=self.server)

            self.create_binding()
            self.create_ui()

        def create_binding(self) -> None:
            self.test_obj = TestModel()

            binding = TrameBinding(self.server.state)
            self.test_binding = binding.new_bind(self.test_obj)
            self.test_binding.connect("test_ds")

        def create_ui(self) -> None:
            with super().create_ui() as layout:
                with layout.content:
                    DataSelector(
                        v_model=("test_ds.v_model", ["test.txt"]),
                        directory=("test_ds.directory", "/"),
                        extensions=("test_ds.extensions", [".txt"]),
                        prefix=("test_ds.prefix", "bin"),
                        refresh_rate=("test_ds.refresh_rate", 15),
                        select_strategy=("test_ds.select_strategy", "page"),
                    )

    MyTrameApp()