Some checks failed
CI / lint (pull_request) Has been cancelled
CI / type (pull_request) Has been cancelled
CI / test-headless (macos-latest, 3.10) (pull_request) Has been cancelled
CI / test-headless (macos-latest, 3.11) (pull_request) Has been cancelled
CI / test-headless (macos-latest, 3.12) (pull_request) Has been cancelled
CI / test-headless (ubuntu-latest, 3.10) (pull_request) Has been cancelled
CI / test-headless (ubuntu-latest, 3.11) (pull_request) Has been cancelled
CI / test-headless (ubuntu-latest, 3.12) (pull_request) Has been cancelled
CI / test-headless (windows-latest, 3.10) (pull_request) Has been cancelled
CI / test-headless (windows-latest, 3.11) (pull_request) Has been cancelled
CI / test-headless (windows-latest, 3.12) (pull_request) Has been cancelled
CI / test-gui (pull_request) Has been cancelled
CI / test-integration (macos-latest) (pull_request) Has been cancelled
CI / test-integration (ubuntu-latest) (pull_request) Has been cancelled
CI / test-integration (windows-latest) (pull_request) Has been cancelled
Auto-fixes (UP037, UP038, F401, I001, SIM105, RUF100) plus hand-fixes: drop the now-unused `Union` imports, annotate mutable class attributes with ClassVar, raise ValidationError instead of blind Exception in the zero-length test, delete two dead locals, and bind the per-iteration grid-builder closures to their loop variables (B023).
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
"""GUI tests for analysis case forms."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
pytest.importorskip("PySide6")
|
|
|
|
from otko.core import (
|
|
NodalLoad,
|
|
PlainLoadPattern,
|
|
StaticCase,
|
|
TransientCase,
|
|
)
|
|
from otko.views.dialogs.case_forms import TransientCaseForm
|
|
|
|
|
|
def _patterns(): # type: ignore[no-untyped-def]
|
|
return [
|
|
PlainLoadPattern(
|
|
id=1,
|
|
name="Gravity",
|
|
time_series_id=1,
|
|
nodal_loads=[NodalLoad(node_id=1, forces=(0.0, -1.0, 0.0, 0.0, 0.0, 0.0))],
|
|
),
|
|
PlainLoadPattern(
|
|
id=2,
|
|
name="EQ",
|
|
time_series_id=1,
|
|
nodal_loads=[NodalLoad(node_id=1, forces=(1.0, 0.0, 0.0, 0.0, 0.0, 0.0))],
|
|
),
|
|
]
|
|
|
|
|
|
@pytest.mark.gui
|
|
def test_transient_case_form_round_trips_preload_and_damping(qtbot) -> None: # type: ignore[no-untyped-def]
|
|
analyses = [
|
|
StaticCase(id=1, name="Gravity", pattern_ids=[1], n_steps=10),
|
|
StaticCase(id=2, name="Wind", pattern_ids=[2], n_steps=5),
|
|
]
|
|
form = TransientCaseForm(_patterns(), analyses)
|
|
qtbot.addWidget(form)
|
|
|
|
case = TransientCase(
|
|
id=3,
|
|
name="Earthquake",
|
|
pattern_ids=[2],
|
|
preload_case_ids=[1],
|
|
remove_patterns=[1],
|
|
dt=0.01,
|
|
n_steps=3995,
|
|
rayleigh_alpha_m=0.01,
|
|
rayleigh_beta_k=2.5e-4,
|
|
rayleigh_mode1_damping=0.02,
|
|
)
|
|
form.populate(case)
|
|
|
|
rebuilt = form.read()
|
|
assert rebuilt.pattern_ids == [2]
|
|
assert rebuilt.preload_case_ids == [1]
|
|
assert rebuilt.remove_patterns == [1]
|
|
assert rebuilt.dt == pytest.approx(0.01)
|
|
assert rebuilt.n_steps == 3995
|
|
assert rebuilt.rayleigh_alpha_m == pytest.approx(0.01)
|
|
assert rebuilt.rayleigh_beta_k == pytest.approx(2.5e-4)
|
|
assert rebuilt.rayleigh_mode1_damping == pytest.approx(0.02)
|
|
|
|
|
|
@pytest.mark.gui
|
|
def test_transient_case_form_zero_mode1_damping_reads_as_none(qtbot) -> None: # type: ignore[no-untyped-def]
|
|
form = TransientCaseForm(_patterns(), [StaticCase(id=1, name="Gravity", pattern_ids=[1])])
|
|
qtbot.addWidget(form)
|
|
|
|
form._name_edit.setText("Transient")
|
|
form._dt.setValue(0.02)
|
|
form._n_steps.setValue(100)
|
|
form._mode1_damping.setValue(0.0)
|
|
form._beta_k.setValue(1.0e-4)
|
|
form._patterns_picker.item(1).setSelected(True)
|
|
|
|
rebuilt = form.read(case_id=2)
|
|
assert rebuilt.pattern_ids == [2]
|
|
assert rebuilt.rayleigh_beta_k == pytest.approx(1.0e-4)
|
|
assert rebuilt.rayleigh_mode1_damping is None
|