Der Codeberg-Sync liest nun Issues aus mehreren konfigurierbaren Projekten (Config::codebergRepos(), Default: fds2610/monitor gelb, fds2610/Steuerkram gruen, fds2610/nc-gantt blau) statt nur aus einem einzigen Repo. Damit external_ref (Issue-Nummer) projektuebergreifend nicht kollidiert, ist es jetzt zusammen mit dem neuen Ticket-Feld "repo" eindeutig; Migration 002_multi_repo_tickets.sql ergaenzt die Spalte und den Index. Da Migrationen dadurch nicht mehr rein additiv sind, trackt Database::migrate() jetzt angewandte Dateien in schema_migrations, damit ALTER TABLE nicht bei jedem Prozessstart erneut laeuft. Das Frontend baut Codeberg-Links jetzt aus dem repo-Feld jedes Tickets statt aus einer global fixen owner/repo-Angabe. Schliesst #26
79 lines
3 KiB
PHP
79 lines
3 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::assertSame([
|
|
['owner' => 'fds2610', 'repo' => 'monitor', 'color' => '#fbca04'],
|
|
['owner' => 'fds2610', 'repo' => 'Steuerkram', 'color' => '#28a745'],
|
|
['owner' => 'fds2610', 'repo' => 'nc-gantt', 'color' => '#0366d6'],
|
|
], $config->codebergRepos());
|
|
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_REPOS' => 'someone/somerepo:ff00aa, other/thing:00ff00 ,malformed',
|
|
'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([
|
|
['owner' => 'someone', 'repo' => 'somerepo', 'color' => '#ff00aa'],
|
|
['owner' => 'other', 'repo' => 'thing', 'color' => '#00ff00'],
|
|
], $config->codebergRepos());
|
|
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());
|
|
}
|
|
|
|
public function testCodebergReposFallsBackToDefaultsWhenOverrideIsUnusable(): void
|
|
{
|
|
$config = new Config(['CODEBERG_REPOS' => 'nur-ein-slug-ohne-doppelpunkt']);
|
|
|
|
self::assertSame([
|
|
['owner' => 'fds2610', 'repo' => 'monitor', 'color' => '#fbca04'],
|
|
['owner' => 'fds2610', 'repo' => 'Steuerkram', 'color' => '#28a745'],
|
|
['owner' => 'fds2610', 'repo' => 'nc-gantt', 'color' => '#0366d6'],
|
|
], $config->codebergRepos());
|
|
}
|
|
}
|