Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion tests/test_bin_phase_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,13 @@ def test_plot_requires_different_compounds(self, mock_warning):
self.assertIn("select two different compounds", mock_warning.call_args[0][2])


@patch('platform.system')
@patch('python.utils.Bin_Phase_env.os.path.exists')
@patch('python.utils.Bin_Phase_env.shutil.which')
@patch('python.utils.Bin_Phase_env.os.environ.get')
def test_get_omc_path_resolution(self, mock_env, mock_which, mock_exists):
def test_get_omc_path_resolution(self, mock_env, mock_which, mock_exists, mock_system):
"""Verify OMC path resolution without requiring OpenModelica installation."""
mock_system.return_value = 'Linux'
"""Verify OMC path resolution without requiring OpenModelica installation."""
mock_env.return_value = None
mock_exists.side_effect = lambda path: path == '/usr/bin/omc'
Expand Down
77 changes: 77 additions & 0 deletions tests/test_dock_widget_compound_separator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import os
import sys
from unittest.mock import MagicMock
import pytest
from PyQt5.QtWidgets import QApplication

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
for p in [os.path.join(PROJECT_ROOT, 'src', 'main'), os.path.join(PROJECT_ROOT, 'src', 'main', 'python')]:
if p not in sys.path:
sys.path.insert(0, p)

_saved_modules = {k: sys.modules.get(k) for k in [
'utils.Graphics', 'python.utils.Graphics', 'utils.Container', 'python.utils.Container'
]}

mock_graphics = MagicMock()
mock_container = MagicMock()
mock_graphics.lst = []

sys.modules['utils.Graphics'] = mock_graphics
sys.modules['python.utils.Graphics'] = mock_graphics
sys.modules['utils.Container'] = mock_container
sys.modules['python.utils.Container'] = mock_container

app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)

from DockWidgets.DockWidgetCompoundSeparator import DockWidgetCompoundSeparator

for k, v in _saved_modules.items():
if v is None:
sys.modules.pop(k, None)
else:
sys.modules[k] = v


class MockCompoundSeparatorObj:
def __init__(self, name="CompSep1"):
self.name = name
self.variables = {
"comp_list": ["Water", "Ethanol"],
"sep_stream": {"name": "Separation Stream", "value": "Top"},
"split_ratio": {"name": "Split Ratio", "value": [0.9, 0.1]}
}
self.param_setter = MagicMock()


class MockContainerInstance:
def __init__(self):
self.graphics = MagicMock()
self.graphics.graphicsView = MagicMock()
self.graphics.graphicsView.horizontalScrollBar = MagicMock()
self.graphics.graphicsView.horizontalScrollBar.return_value.value.return_value = 100


@pytest.fixture
def comp_sep_widget():
obj = MockCompoundSeparatorObj()
container = MockContainerInstance()
widget = DockWidgetCompoundSeparator("CompSep1", "CompoundSeparator", obj, container)
return widget, obj, container


def test_dock_widget_compound_separator_init(comp_sep_widget):
widget, obj, _ = comp_sep_widget
assert widget.name == "CompSep1"
assert widget.type == "CompoundSeparator"
assert widget.obj == obj
assert widget.windowTitle() == "CompSep1"


def test_dock_widget_compound_separator_param_submission(comp_sep_widget):
widget, obj, _ = comp_sep_widget
if hasattr(widget, 'param'):
widget.param()
assert obj.param_setter.called or hasattr(widget, 'dict')
96 changes: 96 additions & 0 deletions tests/test_dock_widget_compressor_expander.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import os
import sys
from unittest.mock import MagicMock
import pytest
from PyQt5.QtWidgets import QApplication

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
for p in [os.path.join(PROJECT_ROOT, 'src', 'main'), os.path.join(PROJECT_ROOT, 'src', 'main', 'python')]:
if p not in sys.path:
sys.path.insert(0, p)

_saved_modules = {k: sys.modules.get(k) for k in [
'utils.Graphics', 'python.utils.Graphics', 'utils.Container', 'python.utils.Container'
]}

mock_graphics = MagicMock()
mock_container = MagicMock()
mock_graphics.lst = []

sys.modules['utils.Graphics'] = mock_graphics
sys.modules['python.utils.Graphics'] = mock_graphics
sys.modules['utils.Container'] = mock_container
sys.modules['python.utils.Container'] = mock_container

app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)

from DockWidgets.DockWidgetCompressorExpander import DockWidgetCompressorExpander

for k, v in _saved_modules.items():
if v is None:
sys.modules.pop(k, None)
else:
sys.modules[k] = v


class MockCompressorObj:
def __init__(self, name="Compressor1"):
self.name = name
self.type = "Compressor"
self.modes_list = ["Outlet Pressure", "Pressure Ratio"]
self.variables = {
"Outlet Pressure": {"name": "Outlet Pressure", "unit": "Pa"},
"Pressure Ratio": {"name": "Pressure Ratio", "unit": ""},
"Pout": {"name": "Outlet Pressure", "unit": "Pa"},
"eff": {"name": "Adiabatic Efficiency", "unit": "%"}
}
self.param_setter = MagicMock()

def param_getter(self, mode="Outlet Pressure"):
return {"Pout": "200000", "eff": "75"}


class MockContainerInstance:
def __init__(self):
self.graphics = MagicMock()
self.graphics.graphicsView = MagicMock()
self.graphics.graphicsView.horizontalScrollBar = MagicMock()
self.graphics.graphicsView.horizontalScrollBar.return_value.value.return_value = 100


@pytest.fixture
def comp_widget():
obj = MockCompressorObj()
container = MockContainerInstance()
widget = DockWidgetCompressorExpander("Compressor1", "Compressor", obj, container)
return widget, obj, container


def test_dock_widget_compressor_initialization(comp_widget):
widget, obj, _ = comp_widget
assert widget.name == "Compressor1"
assert widget.type == "Compressor"
assert widget.obj == obj
assert widget.windowTitle() == "Compressor1"
assert widget.comboBox.count() >= 2


def test_dock_widget_compressor_mode_selection(comp_widget):
widget, _, _ = comp_widget
widget.comboBox.setCurrentIndex(1)
assert len(widget.input_dict) > 0


def test_dock_widget_compressor_param_submission(comp_widget):
widget, obj, _ = comp_widget
if "Pout" in widget.input_dict and hasattr(widget.input_dict["Pout"], "setText"):
widget.input_dict["Pout"].setText("300000")
if "eff" in widget.input_dict and hasattr(widget.input_dict["eff"], "setText"):
widget.input_dict["eff"].setText("80")

widget.param()
obj.param_setter.assert_called_once()
assert widget.dict.get("Pout") == "300000"
assert widget.dict.get("eff") == "80"
79 changes: 79 additions & 0 deletions tests/test_dock_widget_distillation_column.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import os
import sys
from unittest.mock import MagicMock
import pytest
from PyQt5.QtWidgets import QApplication

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
for p in [os.path.join(PROJECT_ROOT, 'src', 'main'), os.path.join(PROJECT_ROOT, 'src', 'main', 'python')]:
if p not in sys.path:
sys.path.insert(0, p)

_saved_modules = {k: sys.modules.get(k) for k in [
'utils.Graphics', 'python.utils.Graphics', 'utils.Container', 'python.utils.Container'
]}

mock_graphics = MagicMock()
mock_container = MagicMock()
mock_graphics.lst = []

sys.modules['utils.Graphics'] = mock_graphics
sys.modules['python.utils.Graphics'] = mock_graphics
sys.modules['utils.Container'] = mock_container
sys.modules['python.utils.Container'] = mock_container

app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)

from DockWidgets.DockWidgetDistillationColumn import DockWidgetDistillationColumn

for k, v in _saved_modules.items():
if v is None:
sys.modules.pop(k, None)
else:
sys.modules[k] = v


class MockDistillationColumnObj:
def __init__(self, name="DistCol1"):
self.name = name
self.variables = {
"thermo_package": {"name": "Thermo Package", "value": "Raoults Law"},
"stages": {"name": "Number of Stages", "value": "10", "unit": ""},
"condenser_type": {"name": "Condenser Type", "value": "Total"},
"reflux_ratio": {"name": "Reflux Ratio", "value": "2.0", "unit": ""}
}
self.comp_list = ["Ethanol", "Water"]
self.param_setter = MagicMock()


class MockContainerInstance:
def __init__(self):
self.graphics = MagicMock()
self.graphics.graphicsView = MagicMock()
self.graphics.graphicsView.horizontalScrollBar = MagicMock()
self.graphics.graphicsView.horizontalScrollBar.return_value.value.return_value = 100


@pytest.fixture
def dist_col_widget():
obj = MockDistillationColumnObj()
container = MockContainerInstance()
widget = DockWidgetDistillationColumn("DistCol1", "DistillationColumn", obj, container)
return widget, obj, container


def test_dock_widget_distillation_column_init(dist_col_widget):
widget, obj, _ = dist_col_widget
assert widget.name == "DistCol1"
assert widget.type == "DistillationColumn"
assert widget.obj == obj
assert widget.windowTitle() == "DistCol1"


def test_dock_widget_distillation_column_param_submission(dist_col_widget):
widget, obj, _ = dist_col_widget
if hasattr(widget, 'param'):
widget.param()
assert obj.param_setter.called or hasattr(widget, 'dict')
103 changes: 103 additions & 0 deletions tests/test_dock_widget_flash.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import os
import sys
from unittest.mock import MagicMock
import pytest
from PyQt5.QtWidgets import QApplication

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
for p in [os.path.join(PROJECT_ROOT, 'src', 'main'), os.path.join(PROJECT_ROOT, 'src', 'main', 'python')]:
if p not in sys.path:
sys.path.insert(0, p)

_saved_modules = {k: sys.modules.get(k) for k in [
'utils.Graphics', 'python.utils.Graphics', 'utils.Container', 'python.utils.Container'
]}

mock_graphics = MagicMock()
mock_container = MagicMock()
mock_graphics.lst = []

sys.modules['utils.Graphics'] = mock_graphics
sys.modules['python.utils.Graphics'] = mock_graphics
sys.modules['utils.Container'] = mock_container
sys.modules['python.utils.Container'] = mock_container

app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)

from DockWidgets.DockWidgetFlash import DockWidgetFlash

for k, v in _saved_modules.items():
if v is None:
sys.modules.pop(k, None)
else:
sys.modules[k] = v


class MockFlashObj:
def __init__(self, name="Flash1"):
self.name = name
self.variables = {
"thermo_package": {"name": "Thermo Package", "value": "Raoults Law"},
"Tdef": {"name": "Flash Temperature", "value": "300", "unit": "K"},
"BTdef": {"value": True},
"Pdef": {"name": "Flash Pressure", "value": "101325", "unit": "Pa"},
"BPdef": {"value": True}
}
self.param_setter = MagicMock()


class MockContainerInstance:
def __init__(self):
self.graphics = MagicMock()
self.graphics.graphicsView = MagicMock()
self.graphics.graphicsView.horizontalScrollBar = MagicMock()
self.graphics.graphicsView.horizontalScrollBar.return_value.value.return_value = 100


@pytest.fixture
def flash_widget():
obj = MockFlashObj()
container = MockContainerInstance()
widget = DockWidgetFlash("Flash1", "Flash", obj, container)
return widget, obj, container


def test_dock_widget_flash_initialization(flash_widget):
widget, obj, _ = flash_widget
assert widget.name == "Flash1"
assert widget.type == "Flash"
assert widget.obj == obj
assert widget.windowTitle() == "Flash1"
assert len(widget.input_dict) == 5
assert widget.check1.isChecked() is True
assert widget.check2.isChecked() is True


def test_dock_widget_flash_toggle_checkboxes(flash_widget):
widget, _, _ = flash_widget
widget.check1.setChecked(False)
assert widget.le2.isEnabled() is False

widget.check1.setChecked(True)
assert widget.le2.isEnabled() is True

widget.check2.setChecked(False)
assert widget.le3.isEnabled() is False


def test_dock_widget_flash_param_submission(flash_widget):
widget, obj, _ = flash_widget
widget.check1.setChecked(True)
widget.le2.setText("350.5")
widget.check2.setChecked(True)
widget.le3.setText("200000")

widget.param()

obj.param_setter.assert_called_once()
assert widget.dict[1] is True
assert widget.dict[2] == 350.5
assert widget.dict[3] is True
assert widget.dict[4] == 200000.0
2 changes: 1 addition & 1 deletion tests/test_dock_widget_material_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,4 @@ def test_dynamic_switching_resets_columns(self):


if __name__ == "__main__":
unittest.main()
unittest.main()
Loading
Loading