From 0d8e18430da9afba258d92e8c7081a24260c7d8d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:43:51 +0000 Subject: [PATCH 1/3] Initial plan From 87415da8c57f168730245cc225018554b9df072e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:50:46 +0000 Subject: [PATCH 2/3] Implement Modules summary with AccordionExpander expansion Agent-Logs-Url: https://github.com/DirektDSP/PluginConfiguratorApp/sessions/bbfbd3b0-3081-4cda-aa6c-68229138aec1 Co-authored-by: SeamusMullan <43112447+SeamusMullan@users.noreply.github.com> --- src/ui/tabs/generate_tab.py | 14 ++++++++- tests/test_generate_tab.py | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/ui/tabs/generate_tab.py b/src/ui/tabs/generate_tab.py index a5d2963..eb28fcf 100644 --- a/src/ui/tabs/generate_tab.py +++ b/src/ui/tabs/generate_tab.py @@ -17,6 +17,7 @@ from core.base_tab import BaseTab from core.project_worker import ProjectWorker +from ui.components.accordion_expander import AccordionExpander from ui.components.validation_footer import ValidationFooter from ui.dialogs.success_dialog import SuccessDialog @@ -111,7 +112,17 @@ def setup_ui(self): content_layout.addWidget(ui_group) self._modules_lbl = self._make_summary_label() - modules_group = self._make_section_group("Modules", self._modules_lbl) + self._modules_expander = AccordionExpander( + "Active Modules", + subtitle="Expand to review selected optional modules", + start_expanded=True, + ) + self._modules_expander.body_layout.addWidget(self._modules_lbl) + modules_group = QGroupBox("Modules") + modules_inner = QVBoxLayout() + modules_inner.setContentsMargins(6, 6, 6, 6) + modules_inner.addWidget(self._modules_expander) + modules_group.setLayout(modules_inner) self._section_groups["Modules"] = modules_group content_layout.addWidget(modules_group) @@ -198,6 +209,7 @@ def reset(self) -> None: icon.setToolTip("") for group in self._section_groups.values(): group.setStyleSheet("") + self._modules_expander.set_expanded(True) self._overall_status_lbl.setText("") self._log_text.clear() self._progress_bar.setValue(0) diff --git a/tests/test_generate_tab.py b/tests/test_generate_tab.py index 90e7c61..7df3ae1 100644 --- a/tests/test_generate_tab.py +++ b/tests/test_generate_tab.py @@ -5,6 +5,7 @@ import pytest from PySide6.QtWidgets import QApplication, QGroupBox, QScrollArea +from ui.components.accordion_expander import AccordionExpander from ui.tabs.generate_tab import GenerateTab @@ -570,3 +571,59 @@ def test_scroll_area_is_qscrollarea(self, generate_tab): def test_section_groups_are_qgroupbox_instances(self, generate_tab): for group in generate_tab._section_groups.values(): assert isinstance(group, QGroupBox) + + +class TestGenerateTabModulesAccordion: + """The Modules section uses an AccordionExpander for expand/collapse.""" + + def test_modules_expander_attribute_exists(self, generate_tab): + assert hasattr(generate_tab, "_modules_expander") + + def test_modules_expander_is_accordion_expander(self, generate_tab): + assert isinstance(generate_tab._modules_expander, AccordionExpander) + + def test_modules_expander_starts_expanded(self, generate_tab): + assert generate_tab._modules_expander.is_expanded is True + + def test_modules_expander_can_be_collapsed(self, generate_tab): + generate_tab._modules_expander.set_expanded(False) + assert generate_tab._modules_expander.is_expanded is False + + def test_modules_expander_can_be_re_expanded(self, generate_tab): + generate_tab._modules_expander.set_expanded(False) + generate_tab._modules_expander.set_expanded(True) + assert generate_tab._modules_expander.is_expanded is True + + def test_modules_expander_contains_modules_label(self, generate_tab): + # The body layout of the expander should contain _modules_lbl + body_layout = generate_tab._modules_expander.body_layout + found = False + for i in range(body_layout.count()): + item = body_layout.itemAt(i) + if item and item.widget() is generate_tab._modules_lbl: + found = True + break + assert found + + def test_modules_label_content_visible_when_expander_expanded(self, generate_tab): + generate_tab.update_full_config(SAMPLE_CONFIG) + generate_tab._modules_expander.set_expanded(True) + assert "Moonbase" in generate_tab._modules_lbl.text() + + def test_modules_section_group_wraps_expander(self, generate_tab): + modules_group = generate_tab._section_groups["Modules"] + # The QGroupBox layout must contain the AccordionExpander + layout = modules_group.layout() + found = False + for i in range(layout.count()): + item = layout.itemAt(i) + if item and item.widget() is generate_tab._modules_expander: + found = True + break + assert found + + def test_reset_leaves_expander_expanded(self, generate_tab): + generate_tab._modules_expander.set_expanded(False) + generate_tab.reset() + # reset() should restore the expander to its default expanded state + assert generate_tab._modules_expander.is_expanded is True From 3a18224d5f2638971a932e9b089ae7de9ddaf2c1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:52:20 +0000 Subject: [PATCH 3/3] Address review: remove redundant accordion title, rename test Agent-Logs-Url: https://github.com/DirektDSP/PluginConfiguratorApp/sessions/bbfbd3b0-3081-4cda-aa6c-68229138aec1 Co-authored-by: SeamusMullan <43112447+SeamusMullan@users.noreply.github.com> --- src/ui/tabs/generate_tab.py | 2 +- tests/test_generate_tab.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/tabs/generate_tab.py b/src/ui/tabs/generate_tab.py index eb28fcf..bbefb0a 100644 --- a/src/ui/tabs/generate_tab.py +++ b/src/ui/tabs/generate_tab.py @@ -113,7 +113,7 @@ def setup_ui(self): self._modules_lbl = self._make_summary_label() self._modules_expander = AccordionExpander( - "Active Modules", + "", subtitle="Expand to review selected optional modules", start_expanded=True, ) diff --git a/tests/test_generate_tab.py b/tests/test_generate_tab.py index 7df3ae1..6e0fcae 100644 --- a/tests/test_generate_tab.py +++ b/tests/test_generate_tab.py @@ -605,7 +605,7 @@ def test_modules_expander_contains_modules_label(self, generate_tab): break assert found - def test_modules_label_content_visible_when_expander_expanded(self, generate_tab): + def test_modules_label_contains_expected_content_after_config_update(self, generate_tab): generate_tab.update_full_config(SAMPLE_CONFIG) generate_tab._modules_expander.set_expanded(True) assert "Moonbase" in generate_tab._modules_lbl.text()