$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.', ]); });