mirror of https://github.com/caronc/apprise
pyobject availability does not impact glib testing (#1384)
parent
808497b58a
commit
782ea79fcb
|
@ -152,11 +152,43 @@ def test_plugin_glib_send_raises_glib_error(mocker, enabled_glib_environment):
|
||||||
|
|
||||||
def test_plugin_glib_send_raises_generic(mocker, enabled_glib_environment):
|
def test_plugin_glib_send_raises_generic(mocker, enabled_glib_environment):
|
||||||
"""Simulate generic error in gio_iface.Notify()"""
|
"""Simulate generic error in gio_iface.Notify()"""
|
||||||
|
# Re: https://github.com/caronc/apprise/issues/1383
|
||||||
|
# This test validates that the NotifyGLib plugin correctly handles a
|
||||||
|
# generic exception raised by the `Notify()` method call on a mocked
|
||||||
|
# DBus interface. However, it is only meaningful in environments that:
|
||||||
|
#
|
||||||
|
# 1. Do NOT have PyGObject (`gi`) installed, OR
|
||||||
|
# 2. Have `gi`, but without introspection or live bindings activated.
|
||||||
|
#
|
||||||
|
# When PyGObject is installed and active, the `gi.repository` namespace
|
||||||
|
# becomes populated by introspected C-based objects that do not behave
|
||||||
|
# like regular Python functions. This causes mock patching via
|
||||||
|
# `mocker.patch("gi.repository.Gio.DBusProxy.new_for_bus_sync")` to
|
||||||
|
# silently fail or be ignored, as Python's mocking machinery cannot
|
||||||
|
# reliably override these introspected symbols.
|
||||||
|
#
|
||||||
|
# This test exists to ensure coverage of legacy or minimal environments
|
||||||
|
# where Apprise's GLib support can still be used through soft mocks,
|
||||||
|
# such as CI/CD pipelines or headless test setups where PyGObject is
|
||||||
|
# absent or stubbed (as done via `enabled_glib_environment`).
|
||||||
|
#
|
||||||
|
# Note: In production environments with active PyGObject, exception
|
||||||
|
# handling is already tested via `GLib.Error` branches or during actual
|
||||||
|
# usage of `NotifyGLib.send()`. This test supplements that by simulating
|
||||||
|
# the rare fallback case of a non-GLib-related exception during Notify().
|
||||||
|
import gi
|
||||||
|
if hasattr(gi, "repository"):
|
||||||
|
pytest.skip(
|
||||||
|
"pygobject introspection active, test won't behave as expected")
|
||||||
|
|
||||||
fake_iface = Mock()
|
fake_iface = Mock()
|
||||||
fake_iface.Notify.side_effect = RuntimeError("boom")
|
fake_iface.Notify.side_effect = RuntimeError("boom")
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"gi.repository.Gio.DBusProxy.new_for_bus_sync",
|
"gi.repository.Gio.DBusProxy.new_for_bus_sync",
|
||||||
return_value=fake_iface)
|
return_value=fake_iface,
|
||||||
|
)
|
||||||
|
|
||||||
obj = apprise.Apprise.instantiate("glib://", suppress_exceptions=False)
|
obj = apprise.Apprise.instantiate("glib://", suppress_exceptions=False)
|
||||||
logger = mocker.spy(obj, "logger")
|
logger = mocker.spy(obj, "logger")
|
||||||
assert obj.notify("boom", title="fail") is False
|
assert obj.notify("boom", title="fail") is False
|
||||||
|
|
Loading…
Reference in New Issue