# -*- coding: utf-8 -*- """Tests for compositor HTTP controllers.""" from odoo.tests import HttpCase, tagged @tagged("post_install", "-at_install") class TestCompositorController(HttpCase): def setUp(self): super().setUp() # Make sure a JWT secret is set self.env["ir.config_parameter"].set_str( "compositor.jwt_secret", "test-secret-1bspace" ) def test_get_token(self): """Test that /web/compositor/token returns a valid JWT.""" self.authenticate("admin", "admin") response = self.url_open( "/web/compositor/token", data="{}", headers={"Content-Type": "application/json"}, timeout=30, ) self.assertEqual(response.status_code, 200, response.text) result = response.json() self.assertIn("jwt", result["result"]) self.assertIn("proxy_url", result["result"]) self.assertIn("expires_at", result["result"]) self.assertIn("compositor_session_id", result["result"]) def test_list_apps(self): """Test that /web/compositor/apps returns the pre-installed apps.""" self.authenticate("admin", "admin") response = self.url_open( "/web/compositor/apps", data="{}", headers={"Content-Type": "application/json"}, timeout=30, ) self.assertEqual(response.status_code, 200, response.text) result = response.json()["result"] self.assertIn("apps", result) app_ids = [a["app_id"] for a in result["apps"]] self.assertIn("gnome-calculator", app_ids) self.assertIn("xterm", app_ids) def test_launch_app_stub(self): """Test that launching an app returns a stub response when proxy isn't connected.""" self.authenticate("admin", "admin") # First get a token token_resp = self.url_open( "/web/compositor/token", data="{}", headers={"Content-Type": "application/json"}, timeout=30, ).json()["result"] # Then try to launch response = self.url_open( "/web/compositor/launch", data='{"app_id": "gnome-calculator"}', headers={"Content-Type": "application/json"}, timeout=30, ) self.assertEqual(response.status_code, 200, response.text) result = response.json()["result"] # Since proxy isn't connected, we should get a stub self.assertTrue(result.get("stub", False)) self.assertIn("compositor_surface_id", result)