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
19 changes: 17 additions & 2 deletions bitcoin_safe/plugin_framework/plugin_list_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,10 @@ def set_status_text(self, status_text: str) -> None:
self.status_label.setText(status_text)
self.status_label.setVisible(bool(status_text))

def set_body_content_visible(self, visible: bool) -> None:
super().set_body_content_visible(visible)
self.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)

def set_enable_toggle(
self,
checked: bool,
Expand Down Expand Up @@ -433,7 +437,7 @@ def _create_additional_sections(self) -> None:
return None

def _create_action_buttons(self) -> None:
return None
self.open_button = self.add_management_button()

def _on_enabled_changed(self, _enabled: bool) -> None:
self.updateUi()
Expand Down Expand Up @@ -461,7 +465,14 @@ def _combined_status_text(self) -> str:
return status_text

def _update_action_buttons(self) -> None:
return None
can_select_node = self._can_select_node()
self._set_button_action(
button=self.open_button,
text=self.tr("Open"),
callback=self._select_plugin_node,
visible=can_select_node,
enable=can_select_node,
)

def _enable_toggle_visible(self) -> bool:
return self.plugin.supports_enable_toggle()
Expand All @@ -487,10 +498,12 @@ def updateUi(self) -> None:

class ExternalPluginWidget(PluginWidget):
def _create_action_buttons(self) -> None:
super()._create_action_buttons()
self.update_button = self.add_spinning_detail_button()
self.delete_button = self.add_spinning_management_button()

def _update_action_buttons(self) -> None:
super()._update_action_buttons()
self._set_button_action(
button=self.update_button,
text=self.plugin.update_button_text(),
Expand Down Expand Up @@ -674,6 +687,7 @@ def _plan_options(self) -> tuple[tuple[str, str], ...]:
return tuple(options)

def _create_action_buttons(self) -> None:
super()._create_action_buttons()
self.start_trial_button = SpinningButton(
text="",
parent=self.subscription_buttons_container,
Expand All @@ -694,6 +708,7 @@ def _enable_toggle_visible(self) -> bool:
return self.plugin.supports_enable_toggle() and self.plugin.subscription_allows_access()

def _update_action_buttons(self) -> None:
super()._update_action_buttons()
self.management_title_label.setText(self.tr("Subscription:"))
displayed_subscription_manager = self.plugin.displayed_subscription_manager
supports_manage_subscription = displayed_subscription_manager.supports_manage_subscription()
Expand Down
5 changes: 3 additions & 2 deletions tests/gui/qt/plugin_framework/test_paid_plugin_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -1827,8 +1827,9 @@ def test_external_paid_plugin_places_update_button_with_action_controls(

assert widget.update_button.parentWidget() is widget.action_buttons_container
assert widget.delete_button.parentWidget() is widget.action_buttons_container
assert widget.action_buttons_layout.itemAt(0).widget() is widget.update_button
assert widget.action_buttons_layout.itemAt(1).widget() is widget.delete_button
assert widget.action_buttons_layout.itemAt(0).widget() is widget.open_button
assert widget.action_buttons_layout.itemAt(1).widget() is widget.update_button
assert widget.action_buttons_layout.itemAt(2).widget() is widget.delete_button
assert widget.manage_subscription_button.parentWidget() is widget.management_buttons_container
assert widget.refresh_subscription_button.parentWidget() is widget.management_buttons_container
finally:
Expand Down
46 changes: 44 additions & 2 deletions tests/non_gui/test_external_plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,14 @@
from btcpay_tools.config import BTCPayConfig, PlanDuration
from packaging.version import Version
from PyQt6.QtGui import QColor, QIcon, QPixmap
from PyQt6.QtWidgets import QApplication, QHBoxLayout, QStackedWidget, QVBoxLayout, QWidget
from PyQt6.QtWidgets import (
QApplication,
QHBoxLayout,
QSizePolicy,
QStackedWidget,
QVBoxLayout,
QWidget,
)

from bitcoin_safe import __version__
from bitcoin_safe.config import UserConfig
Expand Down Expand Up @@ -2349,6 +2356,38 @@ def record_emission() -> None:
manager.close()


def test_plugin_widget_shows_open_button_only_while_enabled(
qapp: QApplication, monkeypatch: pytest.MonkeyPatch
) -> None:
del qapp
client = _DisplayMetadataPluginClient()
opened: list[bool] = []

def record_open() -> bool:
opened.append(True)
return True

monkeypatch.setattr(client.node, "select", record_open)
widget = client.create_plugin_widget()

try:
assert not widget.open_button.isHidden()
assert widget.open_button.text() == "Open"
assert widget.open_button.parentWidget() is widget.action_buttons_container

widget.open_button.click()
assert opened == [True]

client.set_enabled(False)
assert widget.open_button.isHidden()

client.set_enabled(True)
assert not widget.open_button.isHidden()
finally:
widget.close()
client.close()


def test_external_plugin_widget_orders_action_buttons_left_to_right(qapp: QApplication) -> None:
del qapp
client = _DisplayMetadataPluginClient()
Expand All @@ -2373,8 +2412,11 @@ def test_external_plugin_widget_orders_action_buttons_left_to_right(qapp: QAppli
assert not widget.update_button.isHidden()
assert widget.delete_button.parentWidget() is widget.action_buttons_container
assert isinstance(widget.action_buttons_layout, QVBoxLayout)
assert widget.action_buttons_layout.itemAt(0).widget() is widget.delete_button
assert widget.action_buttons_layout.itemAt(0).widget() is widget.open_button
assert widget.action_buttons_layout.itemAt(1).widget() is widget.delete_button
assert widget.open_button.isHidden()
assert not widget.delete_button.isHidden()
assert widget.sizePolicy().verticalPolicy() == QSizePolicy.Policy.Fixed
finally:
widget.close()
client.close()
Expand Down
Loading