summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorxXJSONDeruloXx <danielhimebauch@gmail.com>2026-09-11 09:05:14 -0400
committerxXJSONDeruloXx <danielhimebauch@gmail.com>2026-09-11 09:05:14 -0400
commitd2bfdafa92f3d31cc5392bf8a5a1f1df5c2358ce (patch)
tree102c12dc843ce64dd21599c2cf8ae3d5a3bd0104 /tests
parent904e2e6131071c3b132d3148947b613c2830b1bb (diff)
downloaddecky-lsfg-vk-d2bfdafa92f3d31cc5392bf8a5a1f1df5c2358ce.tar.gz
decky-lsfg-vk-d2bfdafa92f3d31cc5392bf8a5a1f1df5c2358ce.zip
flatpak correctness, ui alignment, tests
Diffstat (limited to 'tests')
-rw-r--r--tests/nowPlaying.test.ts76
-rw-r--r--tests/test_flatpak_profile_service.py25
-rw-r--r--tests/test_flatpak_service.py6
3 files changed, 106 insertions, 1 deletions
diff --git a/tests/nowPlaying.test.ts b/tests/nowPlaying.test.ts
new file mode 100644
index 0000000..3f0d891
--- /dev/null
+++ b/tests/nowPlaying.test.ts
@@ -0,0 +1,76 @@
+import assert from "node:assert/strict";
+import test from "node:test";
+import { resolveNowPlayingTarget, selectMostRecentRunningFlatpak } from "../src/utils/nowPlaying.ts";
+
+const flatpak = (app_id: string, app_name = app_id) => ({
+ app_id,
+ app_name,
+ runtime_ready: true,
+ prepared: true,
+ owned: true,
+ enabled: true,
+ profile: `flatpak:${app_id}`,
+ workarounds: {
+ dxvkFrameRate: 0,
+ disableGamescopeWsi: true,
+ disableHdr: true,
+ disableSteamdeckMode: false,
+ disableVkbasalt: false,
+ enableZink: false,
+ },
+});
+
+const game = (nonSteam = true, configured = true) => ({
+ appid: "123456",
+ name: nonSteam ? "1080 Snowboarding" : "Native Game",
+ nonSteam,
+ configured,
+});
+
+test("selects the newest active managed Flatpak", () => {
+ const apps = [flatpak("org.example.old"), flatpak("org.example.new")];
+ const running = [
+ { app_id: "org.example.old", active: true, pid: "100", start_time: 500 },
+ { app_id: "org.example.new", active: true, pid: "200", start_time: 600 },
+ ];
+
+ assert.equal(selectMostRecentRunningFlatpak(apps, running)?.app_id, "org.example.new");
+});
+
+test("prefers active Flatpak status before process age", () => {
+ const apps = [flatpak("org.example.running"), flatpak("org.example.active")];
+ const running = [
+ { app_id: "org.example.running", active: false, pid: "900", start_time: 900 },
+ { app_id: "org.example.active", active: true, pid: "100", start_time: 100 },
+ ];
+
+ assert.equal(selectMostRecentRunningFlatpak(apps, running)?.app_id, "org.example.active");
+});
+
+test("Flatpak runtime wins while a Steam shortcut is running", () => {
+ const target = resolveNowPlayingTarget(game(true), flatpak("org.libretro.RetroArch", "RetroArch"));
+
+ assert.equal(target?.kind, "flatpak");
+ assert.equal(target?.kind === "flatpak" ? target.launcher?.name : null, "1080 Snowboarding");
+});
+
+test("Flatpak runtime wins over a native Steam game", () => {
+ assert.equal(resolveNowPlayingTarget(game(false), flatpak("org.example.Game"))?.kind, "flatpak");
+});
+
+test("direct Flatpak launch creates a Flatpak Now Playing target", () => {
+ const target = resolveNowPlayingTarget(null, flatpak("org.example.Game"));
+
+ assert.equal(target?.kind, "flatpak");
+ assert.equal(target?.kind === "flatpak" ? target.launcher : null, null);
+});
+
+test("configured Steam target remains the fallback", () => {
+ const target = resolveNowPlayingTarget(game(false), null);
+
+ assert.equal(target?.kind, "steam");
+});
+
+test("unconfigured Steam target has no Now Playing controls", () => {
+ assert.equal(resolveNowPlayingTarget(game(false, false), null), null);
+});
diff --git a/tests/test_flatpak_profile_service.py b/tests/test_flatpak_profile_service.py
index 8d58413..2b9933b 100644
--- a/tests/test_flatpak_profile_service.py
+++ b/tests/test_flatpak_profile_service.py
@@ -14,6 +14,7 @@ sys.modules.setdefault(
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "py_modules"))
from lsfg_vk.configuration import ConfigurationService
+from lsfg_vk.flatpak_service import FlatpakService
from lsfg_vk.flatpak_profile_service import FlatpakProfileService
@@ -26,6 +27,7 @@ class FakeFlatpakService:
self.state = {"version": 2, "plugin_owned_branches": [], "prepared_apps": {}}
self.commands = []
self.running = ""
+ self.start_times = {}
def _read_state(self):
return self.state
@@ -49,6 +51,9 @@ class FakeFlatpakService:
return False, b""
return True, path.read_bytes()
+ def _process_start_time(self, pid):
+ return self.start_times.get(pid)
+
@staticmethod
def _write_file(path, content, mode=0o644):
path.parent.mkdir(parents=True, exist_ok=True)
@@ -175,6 +180,17 @@ class FlatpakProfileServiceTests(unittest.TestCase):
self.assertNotIn("--env=DXVK_HDR=0", command)
self.assertIn("--env=MESA_LOADER_DRIVER_OVERRIDE=zink", command)
+ def test_config_update_returns_without_relisting_flatpaks(self):
+ self.assertTrue(self.service.enable_app(self.app_id)["success"])
+ self.service.get_app = Mock(side_effect=AssertionError("config updates must not relist Flatpaks"))
+
+ result = self.service.update_config(self.app_id, {"multiplier": 4})
+
+ self.assertTrue(result["success"])
+ self.assertEqual(result["app_id"], self.app_id)
+ self.assertEqual(result["config"]["multiplier"], 4)
+ self.service.get_app.assert_not_called()
+
def test_remove_restores_exact_original_override_and_profile(self):
baseline = "[Environment]\nKEEP=yes\n"
self.flatpak._write_file(self.flatpak._override_path(self.app_id), baseline)
@@ -199,11 +215,18 @@ class FlatpakProfileServiceTests(unittest.TestCase):
def test_running_detection_uses_owned_selector_state(self):
self.assertTrue(self.service.enable_app(self.app_id)["success"])
self.flatpak.running = "org.example.Game\ttrue\t1234\norg.other.App\ttrue\t9999\n"
+ self.flatpak.start_times["1234"] = 200
result = self.service.get_running_apps()
self.assertTrue(result["success"])
- self.assertEqual(result["apps"], [{"app_id": self.app_id, "active": True, "pid": "1234"}])
+ self.assertEqual(result["apps"], [{"app_id": self.app_id, "active": True, "pid": "1234", "start_time": 200}])
+
+ def test_process_start_time_parser_handles_parentheses_in_command_name(self):
+ fields = ["S"] + ["0"] * 18 + ["4242"]
+ stat = "1234 (retro)arch) " + " ".join(fields)
+
+ self.assertEqual(FlatpakService._parse_process_start_time(stat), 4242)
if __name__ == "__main__":
diff --git a/tests/test_flatpak_service.py b/tests/test_flatpak_service.py
index 4d804c7..17d0016 100644
--- a/tests/test_flatpak_service.py
+++ b/tests/test_flatpak_service.py
@@ -149,6 +149,12 @@ class FlatpakServiceTests(unittest.TestCase):
self.assertEqual(runtime, self.runtime_ref)
self.assertEqual(branch, "25.08")
+ def test_clean_env_targets_deck_user_session_bus(self):
+ env = self.service._clean_env()
+ user_id = self.home.stat().st_uid
+ self.assertEqual(env["XDG_RUNTIME_DIR"], f"/run/user/{user_id}")
+ self.assertEqual(env["DBUS_SESSION_BUS_ADDRESS"], f"unix:path=/run/user/{user_id}/bus")
+
def test_prepare_app_installs_runtime_and_persists_narrow_override(self):
response = self.service.prepare_app("com.example.Game")