monitor/api/tests/Unit/ConfigTest.php
fds2610-bot d72c945a61 Codeberg-Projekte des Sync ueber ein Modal am PO konfigurierbar machen
Klick auf den PO oeffnet ein Modal, in dem sich die Projekte (Owner/Repo +
Farbe), aus denen der Codeberg-Sync liest, hinzufuegen, bearbeiten und
loeschen lassen - Icon-Schaltflaechen mit Tooltip statt Textbuttons. Die
Projektliste war bisher eine Umgebungsvariable (CODEBERG_REPOS, Issue #26)
und wandert dafuer in eine neue Tabelle repo_configs (Migration
003_repo_configs.sql, geseedet mit den bisherigen drei Default-Projekten);
CodebergSyncService liest sie ueber RepoConfigRepository bei jedem Lauf
frisch ein, damit eine Aenderung im laufenden --watch-Prozess ohne Neustart
wirkt. Neue Endpunkte GET/POST/PATCH/DELETE /api/v1/repo-configs, Schreiben
hinter X-Admin-Key wie die Agenten-Registrierung; das Frontend fragt den Key
bei der ersten Aenderung per Prompt ab und merkt ihn sich im lokalen
Speicher. office-modal.js bekommt dafuer einen Oeffnen-Token
(isCurrentModal()), damit ein verspaetet aufloesender Request nach dem
Oeffnen eines anderen Modals nicht dessen Inhalt ueberschreibt.

Schliesst #27
2026-07-30 17:53:39 +02:00

58 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
namespace Monitor\Api\Tests;
use Monitor\Api\Config;
use PHPUnit\Framework\TestCase;
final class ConfigTest extends TestCase
{
public function testDefaultsAreUsedWhenNothingConfigured(): void
{
$config = new Config([]);
self::assertSame('https://codeberg.org/api/v1', $config->codebergApiBase());
self::assertNull($config->codebergToken());
self::assertNull($config->adminApiKey());
self::assertSame(8, $config->deskCount());
self::assertSame(30, $config->sseMaxIterations());
self::assertSame(2, $config->ssePollIntervalSeconds());
}
/**
* Regression: get() griff frueher selbst auf getenv() zurueck, wodurch ein in der
* Umgebung gesetzter CODEBERG_TOKEN in eine explizit gebaute Config (und damit in
* Testausgaben) durchschlug.
*/
public function testExplicitEnvArrayDoesNotFallBackToProcessEnvironment(): void
{
putenv('CODEBERG_TOKEN=darf-nicht-durchsickern');
try {
self::assertNull((new Config([]))->codebergToken());
} finally {
putenv('CODEBERG_TOKEN');
}
}
public function testValuesCanBeOverridden(): void
{
$config = new Config([
'CODEBERG_API_BASE' => 'https://example.org/api/v1/',
'CODEBERG_TOKEN' => 'tok',
'MONITOR_ADMIN_API_KEY' => 'secret',
'MONITOR_DESK_COUNT' => '3',
'MONITOR_SSE_MAX_ITERATIONS' => '5',
'MONITOR_SSE_POLL_INTERVAL' => '1',
]);
self::assertSame('https://example.org/api/v1', $config->codebergApiBase());
self::assertSame('tok', $config->codebergToken());
self::assertSame('secret', $config->adminApiKey());
self::assertSame(3, $config->deskCount());
self::assertSame(5, $config->sseMaxIterations());
self::assertSame(1, $config->ssePollIntervalSeconds());
}
}