From e62506af14010fab573123d09df06a69185d88cf Mon Sep 17 00:00:00 2001 From: Edan Bainglass Date: Thu, 14 Nov 2024 18:29:28 +0000 Subject: [PATCH] Update tests --- src/aiidalab_qe/common/bands_pdos/__init__.py | 4 +-- .../common/bands_pdos/bandpdoswidget.py | 2 +- src/aiidalab_qe/common/bands_pdos/model.py | 5 ++-- .../plugins/bands/result/result.py | 4 +-- .../electronic_structure/result/result.py | 4 +-- src/aiidalab_qe/plugins/pdos/result/result.py | 4 +-- tests/test_plugins_bands.py | 22 +++++++------- tests/test_plugins_electronic_structure.py | 29 ++++++++++--------- tests/test_plugins_pdos.py | 25 +++++++++------- 9 files changed, 55 insertions(+), 44 deletions(-) diff --git a/src/aiidalab_qe/common/bands_pdos/__init__.py b/src/aiidalab_qe/common/bands_pdos/__init__.py index 93285bf58..201006747 100644 --- a/src/aiidalab_qe/common/bands_pdos/__init__.py +++ b/src/aiidalab_qe/common/bands_pdos/__init__.py @@ -1,7 +1,7 @@ -from .bandpdoswidget import BandPdosWidget +from .bandpdoswidget import BandsPdosWidget from .model import BandsPdosModel __all__ = [ - "BandPdosWidget", + "BandsPdosWidget", "BandsPdosModel", ] diff --git a/src/aiidalab_qe/common/bands_pdos/bandpdoswidget.py b/src/aiidalab_qe/common/bands_pdos/bandpdoswidget.py index 540e231ea..05725472a 100644 --- a/src/aiidalab_qe/common/bands_pdos/bandpdoswidget.py +++ b/src/aiidalab_qe/common/bands_pdos/bandpdoswidget.py @@ -8,7 +8,7 @@ from .model import BandsPdosModel -class BandPdosWidget(ipw.VBox): +class BandsPdosWidget(ipw.VBox): """ A widget for plotting band structure and projected density of states (PDOS) data. diff --git a/src/aiidalab_qe/common/bands_pdos/model.py b/src/aiidalab_qe/common/bands_pdos/model.py index bf1eb844c..e3c915a31 100644 --- a/src/aiidalab_qe/common/bands_pdos/model.py +++ b/src/aiidalab_qe/common/bands_pdos/model.py @@ -40,11 +40,12 @@ class BandsPdosModel(Model): project_bands_box = tl.Bool(False) proj_bands_width = tl.Float(0.5) - pdos_data = tl.Dict() - bands_data = tl.Dict() needs_pdos_options = tl.Bool(False) needs_projections_controls = tl.Bool(False) + pdos_data = {} + bands_data = {} + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/src/aiidalab_qe/plugins/bands/result/result.py b/src/aiidalab_qe/plugins/bands/result/result.py index 9a898a2a3..7a4625314 100644 --- a/src/aiidalab_qe/plugins/bands/result/result.py +++ b/src/aiidalab_qe/plugins/bands/result/result.py @@ -2,7 +2,7 @@ import ipywidgets as ipw -from aiidalab_qe.common.bands_pdos import BandPdosWidget, BandsPdosModel +from aiidalab_qe.common.bands_pdos import BandsPdosModel, BandsPdosWidget from aiidalab_qe.common.panel import ResultsPanel from .model import BandsResultsModel @@ -18,7 +18,7 @@ def render(self): return bands_node = self._model.get_bands_node() model = BandsPdosModel() - widget = BandPdosWidget(model=model, bands=bands_node) + widget = BandsPdosWidget(model=model, bands=bands_node) widget.layout = ipw.Layout(width="1000px") widget.render() self.children = [widget] diff --git a/src/aiidalab_qe/plugins/electronic_structure/result/result.py b/src/aiidalab_qe/plugins/electronic_structure/result/result.py index 2a7013e0b..8ee22734d 100644 --- a/src/aiidalab_qe/plugins/electronic_structure/result/result.py +++ b/src/aiidalab_qe/plugins/electronic_structure/result/result.py @@ -2,7 +2,7 @@ import ipywidgets as ipw -from aiidalab_qe.common.bands_pdos import BandPdosWidget, BandsPdosModel +from aiidalab_qe.common.bands_pdos import BandsPdosModel, BandsPdosWidget from aiidalab_qe.common.panel import ResultsPanel from .model import ElectronicStructureResultsModel @@ -19,7 +19,7 @@ def render(self): bands_node = self._model.get_bands_node() pdos_node = self._model.get_pdos_node() model = BandsPdosModel() - widget = BandPdosWidget(model=model, bands=bands_node, pdos=pdos_node) + widget = BandsPdosWidget(model=model, bands=bands_node, pdos=pdos_node) widget.layout = ipw.Layout(width="1000px") widget.render() self.children = [widget] diff --git a/src/aiidalab_qe/plugins/pdos/result/result.py b/src/aiidalab_qe/plugins/pdos/result/result.py index df47b1634..6b433a308 100644 --- a/src/aiidalab_qe/plugins/pdos/result/result.py +++ b/src/aiidalab_qe/plugins/pdos/result/result.py @@ -2,7 +2,7 @@ import ipywidgets as ipw -from aiidalab_qe.common.bands_pdos import BandPdosWidget, BandsPdosModel +from aiidalab_qe.common.bands_pdos import BandsPdosModel, BandsPdosWidget from aiidalab_qe.common.panel import ResultsPanel from .model import PdosResultsModel @@ -18,7 +18,7 @@ def render(self): return pdos_node = self._model.get_pdos_node() model = BandsPdosModel() - widget = BandPdosWidget(model=model, pdos=pdos_node) + widget = BandsPdosWidget(model=model, pdos=pdos_node) widget.layout = ipw.Layout(width="1000px") widget.render() self.children = [widget] diff --git a/tests/test_plugins_bands.py b/tests/test_plugins_bands.py index 8744d8acb..386f711dd 100644 --- a/tests/test_plugins_bands.py +++ b/tests/test_plugins_bands.py @@ -1,20 +1,22 @@ def test_result(generate_qeapp_workchain): import plotly.graph_objects as go - from aiidalab_qe.common.bands_pdos import BandPdosWidget - from aiidalab_qe.plugins.bands.result import BandsResults, BandsResultsModel + from aiidalab_qe.common.bands_pdos import BandsPdosModel, BandsPdosWidget workchain = generate_qeapp_workchain() - # generate structure for scf calculation - model = BandsResultsModel() - model.process_node = workchain.node - result = BandsResults(model=model) - result.render() - widget = result.children[0] - model = widget._model + # NOTE the actual widget fails because the workchain is not actually attached + # to the QeAppWorkchain, so the bands widget receives `None` and raises an + # exception. Instead, we mock the render behavior, but bypass the node fetching + # by setting the node directly from the outputs of the generated workchain. + # TODO rethink test - assert isinstance(widget, BandPdosWidget) + bands_node = workchain.outputs["bands"]["bands"] + model = BandsPdosModel() + widget = BandsPdosWidget(model=model, bands=bands_node) + widget.render() + + assert isinstance(widget, BandsPdosWidget) assert isinstance(widget.plot, go.FigureWidget) # Check if data is correct diff --git a/tests/test_plugins_electronic_structure.py b/tests/test_plugins_electronic_structure.py index b54d0b3b9..62ca4a147 100644 --- a/tests/test_plugins_electronic_structure.py +++ b/tests/test_plugins_electronic_structure.py @@ -1,23 +1,26 @@ +from aiida.common.extendeddicts import AttributeDict + + def test_electronic_structure(generate_qeapp_workchain): import plotly.graph_objects as go - from aiidalab_qe.common.bands_pdos import BandPdosWidget - from aiidalab_qe.plugins.electronic_structure.result import ( - ElectronicStructureResults, - ElectronicStructureResultsModel, - ) + from aiidalab_qe.common.bands_pdos import BandsPdosModel, BandsPdosWidget workchain = generate_qeapp_workchain() - # generate structure for scf calculation - model = ElectronicStructureResultsModel() - model.process_node = workchain.node - result = ElectronicStructureResults(model=model) - result.render() - widget = result.children[0] - model = widget._model + # NOTE the actual widget fails because the workchain is not actually attached + # to the QeAppWorkchain, so the bands widget receives `None` and raises an + # exception. Instead, we mock the render behavior, but bypass the node fetching + # by setting the node directly from the outputs of the generated workchain. + # TODO rethink test + + bands_node = workchain.outputs["bands"]["bands"] + pdos_node = AttributeDict(workchain.outputs["pdos"]) + model = BandsPdosModel() + widget = BandsPdosWidget(model=model, bands=bands_node, pdos=pdos_node) + widget.render() - assert isinstance(widget, BandPdosWidget) + assert isinstance(widget, BandsPdosWidget) assert isinstance(widget.plot, go.FigureWidget) # Check if data is correct diff --git a/tests/test_plugins_pdos.py b/tests/test_plugins_pdos.py index af6ef8a11..275ef6e0e 100644 --- a/tests/test_plugins_pdos.py +++ b/tests/test_plugins_pdos.py @@ -1,20 +1,25 @@ +from aiida.common.extendeddicts import AttributeDict + + def test_result(generate_qeapp_workchain): import plotly.graph_objects as go - from aiidalab_qe.common.bands_pdos import BandPdosWidget - from aiidalab_qe.plugins.pdos.result import PdosResults, PdosResultsModel + from aiidalab_qe.common.bands_pdos import BandsPdosModel, BandsPdosWidget workchain = generate_qeapp_workchain() - # generate structure for scf calculation - model = PdosResultsModel() - model.process_node = workchain.node - result = PdosResults(model=model) - result.render() - widget = result.children[0] - model = widget._model + # NOTE the actual widget fails because the workchain is not actually attached + # to the QeAppWorkchain, so the bands widget receives `None` and raises an + # exception. Instead, we mock the render behavior, but bypass the node fetching + # by setting the node directly from the outputs of the generated workchain. + # TODO rethink test + + pdos_node = AttributeDict(workchain.outputs["pdos"]) + model = BandsPdosModel() + widget = BandsPdosWidget(model=model, pdos=pdos_node) + widget.render() - assert isinstance(widget, BandPdosWidget) + assert isinstance(widget, BandsPdosWidget) assert isinstance(widget.plot, go.FigureWidget) # Check if data is correct