Release 1.0.0 with server info console

This commit is contained in:
Artem Kokos
2026-05-21 20:46:04 +07:00
parent 85c840ba1b
commit 61b21c63ea
12 changed files with 766 additions and 5 deletions

View File

@@ -104,6 +104,78 @@ class SecurityAndControlApiTests(unittest.IsolatedAsyncioTestCase):
response.json()["detail"], "Сервер не настроен: задайте IGNIS_API_KEY"
)
async def test_system_info_returns_installed_server_metadata_without_secrets(
self,
):
with patch.dict(
os.environ,
{
"IGNIS_INSTANCE_NAME": "Home Lab",
"APP_TIMEZONE": "Europe/Moscow",
"IGNIS_PUBLIC_BASE_URL": "https://ignis.example.local/",
"IGNIS_BUILD_VERSION": "1.2.3",
"IGNIS_BUILD_DATE": "2026-05-21T10:11:12Z",
"IGNIS_GIT_SHA": "abcdef1234567890",
"SCAN_NETWORK": "192.168.0.0/24",
},
clear=False,
):
response = await self.client.get(
"/system/info",
headers=self._master_headers(),
)
self.assertEqual(response.status_code, 200)
payload = response.json()
self.assertEqual(payload["app_name"], "Ignis Core")
self.assertEqual(payload["instance_name"], "Home Lab")
self.assertEqual(payload["timezone"], "Europe/Moscow")
self.assertEqual(payload["build"]["version"], "1.2.3")
self.assertEqual(payload["build"]["build_date"], "2026-05-21T10:11:12Z")
self.assertEqual(payload["build"]["git_sha"], "abcdef1234567890")
self.assertEqual(
payload["urls"]["configured_public_base_url"],
"https://ignis.example.local",
)
self.assertEqual(
payload["urls"]["effective_public_base_url"],
"https://ignis.example.local",
)
self.assertEqual(payload["urls"]["observed_base_url"], "http://testserver")
self.assertTrue(payload["configuration"]["configured"])
self.assertTrue(payload["configuration"]["master_key_configured"])
self.assertTrue(payload["configuration"]["scan_network_configured"])
self.assertTrue(payload["configuration"]["public_base_url_configured"])
self.assertTrue(payload["configuration"]["build_metadata_complete"])
self.assertIn("started_at", payload)
self.assertNotIn(MASTER_KEY, response.text)
self.assertNotIn("api_key", payload)
async def test_guest_key_can_read_system_info(self):
create_response = await self.client.post(
"/api-keys",
headers=self._master_headers(),
params={"name": "wall-panel"},
)
guest_key = create_response.json()["key"]
response = await self.client.get(
"/system/info",
headers={"X-API-Key": guest_key},
)
self.assertEqual(response.status_code, 200)
payload = response.json()
self.assertEqual(payload["app_name"], "Ignis Core")
self.assertGreaterEqual(payload["uptime_seconds"], 0)
self.assertFalse(payload["diagnostics_visible"])
self.assertNotIn("instance_name", payload)
self.assertNotIn("timezone", payload)
self.assertNotIn("started_at", payload)
self.assertNotIn("build", payload)
self.assertNotIn("urls", payload)
self.assertNotIn("configuration", payload)
async def test_master_can_create_key_and_list_endpoint_returns_public_id(self):
create_response = await self.client.post(
"/api-keys",