108 lines
3.0 KiB
PHP
108 lines
3.0 KiB
PHP
<?php
|
|
|
|
use App\Models\Setting;
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
function setGiteaEnv(?string $owner, ?string $repo, ?string $apiBase = null, ?string $token = null): void
|
|
{
|
|
$pairs = [
|
|
'GITEA_OWNER' => $owner,
|
|
'GITEA_REPO' => $repo,
|
|
'GITEA_API_BASE' => $apiBase,
|
|
'GITEA_TOKEN' => $token,
|
|
];
|
|
|
|
foreach ($pairs as $key => $value) {
|
|
if ($value === null || $value === '') {
|
|
putenv("{$key}=");
|
|
unset($_ENV[$key], $_SERVER[$key]);
|
|
} else {
|
|
putenv("{$key}={$value}");
|
|
$_ENV[$key] = $value;
|
|
$_SERVER[$key] = $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
it('returns error when gitea config missing', function (): void {
|
|
setGiteaEnv(null, null);
|
|
|
|
Setting::updateOrCreate(['key' => 'version'], ['value' => '1.0.0']);
|
|
|
|
$response = $this->getJson('/api/version/check');
|
|
|
|
$response->assertOk();
|
|
$response->assertJsonFragment([
|
|
'current_version' => '1.0.0',
|
|
'latest_tag' => null,
|
|
]);
|
|
});
|
|
|
|
it('checks latest release and reports status', function (): void {
|
|
setGiteaEnv('acme', 'speedbb', 'https://git.example.test/api/v1', 'secrettoken');
|
|
|
|
Setting::updateOrCreate(['key' => 'version'], ['value' => '1.2.3']);
|
|
Setting::updateOrCreate(['key' => 'build'], ['value' => '7']);
|
|
|
|
Http::fake([
|
|
'https://git.example.test/api/v1/repos/acme/speedbb/releases/latest' => Http::response([
|
|
'tag_name' => 'v1.2.3',
|
|
], 200),
|
|
]);
|
|
|
|
$response = $this->getJson('/api/version/check');
|
|
|
|
$response->assertOk();
|
|
$response->assertJsonFragment([
|
|
'current_version' => '1.2.3',
|
|
'latest_tag' => 'v1.2.3',
|
|
'is_latest' => true,
|
|
]);
|
|
|
|
Http::assertSent(function ($request) {
|
|
return $request->hasHeader('Authorization', 'token secrettoken');
|
|
});
|
|
});
|
|
|
|
it('handles failed release responses', function (): void {
|
|
setGiteaEnv('acme', 'speedbb', 'https://git.example.test/api/v1');
|
|
|
|
Setting::updateOrCreate(['key' => 'version'], ['value' => '1.2.3']);
|
|
|
|
Http::fake([
|
|
'https://git.example.test/api/v1/repos/acme/speedbb/releases/latest' => Http::response([
|
|
'message' => 'oops',
|
|
], 500),
|
|
]);
|
|
|
|
$response = $this->getJson('/api/version/check');
|
|
|
|
$response->assertOk();
|
|
$response->assertJsonFragment([
|
|
'current_version' => '1.2.3',
|
|
'latest_tag' => null,
|
|
'is_latest' => null,
|
|
'error' => 'Release check failed: 500',
|
|
]);
|
|
});
|
|
|
|
it('handles release check exceptions', function (): void {
|
|
setGiteaEnv('acme', 'speedbb', 'https://git.example.test/api/v1');
|
|
|
|
Setting::updateOrCreate(['key' => 'version'], ['value' => '1.2.3']);
|
|
|
|
Http::fake(function () {
|
|
throw new RuntimeException('boom');
|
|
});
|
|
|
|
$response = $this->getJson('/api/version/check');
|
|
|
|
$response->assertOk();
|
|
$response->assertJsonFragment([
|
|
'current_version' => '1.2.3',
|
|
'latest_tag' => null,
|
|
'is_latest' => null,
|
|
'error' => 'Version check failed.',
|
|
]);
|
|
});
|