refactor(system-info): reduce to Stripe-style status page

Reduce admin/system-info to a single focused status view: overall
status banner, components list from existing health checks, and an
environment meta table. Drops the Modules and Permissions tabs —
those were dev-diagnostics already available via CLI.

- Remove SystemInfoService + its test; wire the action directly to
  SystemHealthService and build meta inline
- Extend SystemHealthService with per-check label + description so
  the UI speaks in customer terms while the CLI doctor path stays
  compatible
- Rebuild the view on existing app-stats-table + app-empty-state
  primitives; add a small app-status-banner component for the
  headline signal
- Align help-center nav label and i18n keys (de/en)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-24 16:32:46 +02:00
parent d9ed4ab5b4
commit 87652e55da
13 changed files with 340 additions and 461 deletions

View File

@@ -28,6 +28,8 @@ class SystemHealthServiceTest extends TestCase
self::assertSame('ok', $result['status']);
self::assertSame('Database connectivity', $result['name']);
self::assertSame('Database', $result['label']);
self::assertSame('Connection established', $result['description']);
}
public function testCheckDatabaseReturnsFailWhenDisconnected(): void
@@ -39,6 +41,8 @@ class SystemHealthServiceTest extends TestCase
$result = $this->service->checkDatabase();
self::assertSame('fail', $result['status']);
self::assertSame('Database', $result['label']);
self::assertSame('Database did not return the expected response', $result['description']);
}
public function testCheckDatabaseReturnsFailOnException(): void
@@ -190,6 +194,10 @@ class SystemHealthServiceTest extends TestCase
self::assertArrayHasKey('status', $check);
self::assertArrayHasKey('name', $check);
self::assertArrayHasKey('message', $check);
self::assertArrayHasKey('label', $check);
self::assertArrayHasKey('description', $check);
self::assertNotSame('', $check['label']);
self::assertNotSame('', $check['description']);
}
}
}