Add extensive controller and model tests
This commit is contained in:
107
tests/Feature/VersionCheckControllerTest.php
Normal file
107
tests/Feature/VersionCheckControllerTest.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?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.',
|
||||
]);
|
||||
});
|
||||
Reference in New Issue
Block a user