Skip to content
Snippets Groups Projects

Implement ProtocolTemplateEditor

Merged Samuel GAIST requested to merge 210_implement_protocoltemplate_editor into v2
2 files
+ 377
6
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -23,16 +23,131 @@
# #
###############################################################################
import copy
import pytest
import simplejson as json
from PyQt5 import QtCore
from PyQt5.QtWidgets import QInputDialog
from ..backend.assetmodel import AssetModel
from ..backend.assetmodel import AssetType
from ..widgets.protocoltemplateeditor import SetWidget
from ..widgets.protocoltemplateeditor import ProtocolTemplateEditor
@pytest.fixture()
def dataformat_model(test_prefix):
asset_model = AssetModel()
asset_model.asset_type = AssetType.DATAFORMAT
asset_model.prefix_path = test_prefix
return asset_model
@pytest.fixture()
def reference_set_json():
return {"name": "test", "outputs": {"out1": "int8"}}
@pytest.fixture()
def reference_pt_json():
return {"sets": [{"name": "original", "outputs": {"a": "int8"}}]}
class TestSetWidget:
"""Test that the editor dedicated to a set works correctly"""
def test_load_and_dump(self, qtbot, dataformat_model, reference_set_json):
set_widget = SetWidget(dataformat_model)
set_widget.load(reference_set_json)
qtbot.addWidget(set_widget)
assert set_widget.dump() == reference_set_json
def test_add_output(self, qtbot, dataformat_model, reference_set_json):
edited_json = copy.deepcopy(reference_set_json)
edited_json["outputs"]["Change_me"] = "int8"
set_widget = SetWidget(dataformat_model)
set_widget.load(reference_set_json)
qtbot.addWidget(set_widget)
qtbot.mouseClick(set_widget.add_button, QtCore.Qt.LeftButton)
assert set_widget.dump() == edited_json
def test_remove_output(self, qtbot, dataformat_model, reference_set_json):
edited_json = copy.deepcopy(reference_set_json)
edited_json["outputs"] = {}
set_widget = SetWidget(dataformat_model)
set_widget.load(reference_set_json)
qtbot.addWidget(set_widget)
qtbot.mouseClick(set_widget.remove_button, QtCore.Qt.LeftButton)
assert set_widget.dump() == reference_set_json
set_widget.outputs_tablewidget.setCurrentCell(0, 0)
qtbot.mouseClick(set_widget.remove_button, QtCore.Qt.LeftButton)
assert set_widget.dump() == edited_json
class TestProtocolTemplateEditor:
"""Test that the protocol template editor works correctly"""
def test_load_and_dump(self, qtbot):
reference_json = {"description": "test"}
def test_load_and_dump(self, qtbot, test_prefix):
asset_model = AssetModel()
asset_model.asset_type = AssetType.PROTOCOLTEMPLATE
asset_model.prefix_path = test_prefix
asset_name = "double/1"
with open(asset_model.json_path(asset_name), "rt") as json_file:
json_data = json.load(json_file)
editor = ProtocolTemplateEditor()
editor.load_json(json_data)
qtbot.addWidget(editor)
assert editor.dump_json() == json_data
def test_add_set(self, qtbot, monkeypatch, test_prefix, reference_pt_json):
edited_json = copy.deepcopy(reference_pt_json)
edited_json["schema_version"] = 1
edited_json["sets"].append(
{"name": "test_set", "outputs": {"Change_me": "int8"}}
)
monkeypatch.setattr(
QInputDialog, "getText", classmethod(lambda *args: ("test_set", True))
)
editor = ProtocolTemplateEditor()
editor.set_prefix_root(test_prefix)
editor.load_json(reference_pt_json)
qtbot.addWidget(editor)
qtbot.mouseClick(editor.add_set_button, QtCore.Qt.LeftButton)
assert editor.dump_json() == edited_json
def test_remove_set(self, qtbot, test_prefix, reference_pt_json):
edited_json = copy.deepcopy(reference_pt_json)
edited_json["schema_version"] = 1
edited_json["sets"] = []
editor = ProtocolTemplateEditor()
editor.set_prefix_root(test_prefix)
editor.load_json(reference_pt_json)
editor.load_json(reference_json)
qtbot.addWidget(editor)
qtbot.mouseClick(editor.set_widgets[0].delete_button, QtCore.Qt.LeftButton)
assert editor.dump_json() == reference_json
assert editor.dump_json() == edited_json
Loading