summaryrefslogtreecommitdiffstatshomepage
path: root/tests/test_canonical_desktop.py
diff options
context:
space:
mode:
authorsommerfeld <sommerfeld@sommerfeld.dev>2026-09-17 15:05:36 +0100
committersommerfeld <sommerfeld@sommerfeld.dev>2026-09-17 15:05:36 +0100
commitaff435a0fb3a56b1d7b738c7dede363440884b3a (patch)
tree07acb41d37760aa169ee42dbeb69da3621cc7489 /tests/test_canonical_desktop.py
parenta7f74c1fa4b89c5829f5896842eb7248c820704c (diff)
downloaddotfiles-aff435a0fb3a56b1d7b738c7dede363440884b3a.tar.gz
dotfiles-aff435a0fb3a56b1d7b738c7dede363440884b3a.tar.bz2
dotfiles-aff435a0fb3a56b1d7b738c7dede363440884b3a.zip
Add the Canonical laptop profile and setup workflows
Diffstat (limited to 'tests/test_canonical_desktop.py')
-rw-r--r--tests/test_canonical_desktop.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/test_canonical_desktop.py b/tests/test_canonical_desktop.py
new file mode 100644
index 0000000..cdbc812
--- /dev/null
+++ b/tests/test_canonical_desktop.py
@@ -0,0 +1,79 @@
+import importlib.util
+import tempfile
+import unittest
+from pathlib import Path
+from unittest.mock import MagicMock, patch
+
+ROOT = Path(__file__).resolve().parents[1]
+SPEC = importlib.util.spec_from_file_location(
+ "desktop", ROOT / "dot_local/lib/dotfiles/canonical_desktop.py"
+)
+assert SPEC and SPEC.loader
+desktop = importlib.util.module_from_spec(SPEC)
+SPEC.loader.exec_module(desktop)
+
+
+class DesktopTests(unittest.TestCase):
+ def test_unknown_keys_fail_without_writing(self):
+ settings = MagicMock()
+ settings.props.settings_schema.list_keys.return_value = []
+ with (
+ patch.object(desktop, "settings_object", return_value=settings),
+ self.assertRaisesRegex(RuntimeError, "Unknown setting"),
+ ):
+ desktop.write_key("schema", "missing", "value", {})
+ settings.set_value.assert_not_called()
+
+ def test_launcher_uses_gnome_application_view_key(self):
+ with (
+ patch.object(desktop, "merge_key"),
+ patch.object(desktop, "shortcuts"),
+ patch.object(desktop, "workspaces"),
+ patch.object(desktop, "write_key") as write,
+ ):
+ desktop.apply_settings({})
+ write.assert_any_call(
+ "org.gnome.shell.keybindings", "toggle-application-view", ["<Super>d"], {}
+ )
+
+ def test_locked_keys_are_never_written(self):
+ settings = MagicMock()
+ settings.props.settings_schema.list_keys.return_value = ["key"]
+ settings.is_writable.return_value = False
+ with patch.object(desktop, "settings_object", return_value=settings):
+ desktop.write_key("schema", "key", "value", {})
+ settings.set_value.assert_not_called()
+
+ def test_first_snapshot_is_kept_on_repeated_apply(self):
+ settings = MagicMock()
+ settings.props.settings_schema.list_keys.return_value = ["key"]
+ settings.get_user_value.return_value.print_.return_value = "'original'"
+ glib = MagicMock()
+ glib.Variant.return_value.print_.return_value = "'managed'"
+ saved = {}
+ with (
+ tempfile.TemporaryDirectory() as directory,
+ patch.object(desktop, "STATE", Path(directory) / "state.json"),
+ patch.object(desktop, "settings_object", return_value=settings),
+ patch.object(desktop.importlib, "import_module", return_value=glib),
+ ):
+ desktop.write_key("schema", "key", "managed", saved)
+ settings.get_user_value.return_value.print_.return_value = "'changed'"
+ desktop.write_key("schema", "key", "managed", saved)
+ self.assertEqual(next(iter(saved.values()))["before"], "'original'")
+
+ def test_merge_keeps_unrelated_entries(self):
+ settings = MagicMock()
+ settings.get_strv.return_value = ["company", "personal"]
+ with (
+ patch.object(desktop, "settings_object", return_value=settings),
+ patch.object(desktop, "write_key") as write,
+ ):
+ desktop.merge_key("schema", "key", ["personal", "new"], {})
+ write.assert_called_once_with(
+ "schema", "key", ["company", "personal", "new"], {}
+ )
+
+
+if __name__ == "__main__":
+ unittest.main()