Closes the last coverage gap for org (person remains intentionally unaddressed — no good free/non-scraping option exists). Unlike the other 8 sources, OpenCorporates now requires an API token even on its free tier (confirmed: keyless request gets 401). RunnerRegistry::has() checks services.opencorporates.token is configured before exposing the source as runnable, so it degrades to "not yet integrated" in the UI rather than a broken Run button, until OPENCORPORATES_API_TOKEN is set. Also fixes a real bug hit while building this: a RunnerRegistry::REQUIRES class constant mapping source key to a closure crashed on file load (PHP class constants can't hold closures) — inlined the one check instead of building an abstraction for a single case. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
35 lines
980 B
PHP
35 lines
980 B
PHP
<?php
|
|
|
|
namespace Tests\Unit\Osint;
|
|
|
|
use App\Osint\RunnerRegistry;
|
|
use Tests\TestCase;
|
|
|
|
class RunnerRegistryTest extends TestCase
|
|
{
|
|
public function test_opencorporates_is_hidden_without_a_configured_token(): void
|
|
{
|
|
config(['services.opencorporates.token' => null]);
|
|
|
|
$this->assertFalse((new RunnerRegistry)->has('opencorporates'));
|
|
}
|
|
|
|
public function test_opencorporates_is_available_once_a_token_is_configured(): void
|
|
{
|
|
config(['services.opencorporates.token' => 'test-token']);
|
|
|
|
$this->assertTrue((new RunnerRegistry)->has('opencorporates'));
|
|
}
|
|
|
|
public function test_unconditional_runners_are_always_available(): void
|
|
{
|
|
$this->assertTrue((new RunnerRegistry)->has('sherlock'));
|
|
$this->assertTrue((new RunnerRegistry)->has('dns'));
|
|
}
|
|
|
|
public function test_unknown_source_key_is_never_available(): void
|
|
{
|
|
$this->assertFalse((new RunnerRegistry)->has('not-a-real-source'));
|
|
}
|
|
}
|