78 lines
2.4 KiB
PHP
78 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace Modules\Countries\Tests\Feature;
|
|
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Modules\Countries\Database\Seeders\CountriesDatabaseSeeder;
|
|
use Modules\Countries\Rules\ValidIso3166CountryCode;
|
|
use Modules\Countries\Rules\ValidIso3166SubdivisionCode;
|
|
use Tests\TestCase;
|
|
|
|
class Iso3166SupportTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_it_seeds_iso_3166_country_and_subdivision_reference_data(): void
|
|
{
|
|
$this->seed(CountriesDatabaseSeeder::class);
|
|
|
|
$this->assertDatabaseHas('countries', [
|
|
'alpha2' => 'GB',
|
|
'alpha3' => 'GBR',
|
|
'numeric' => '826',
|
|
'iso_status' => 'official',
|
|
]);
|
|
|
|
$this->assertDatabaseHas('country_subdivisions', [
|
|
'country_alpha2' => 'GB',
|
|
'code' => 'GB-ENG',
|
|
'name' => 'England',
|
|
]);
|
|
}
|
|
|
|
public function test_it_resolves_country_by_any_iso_3166_1_code(): void
|
|
{
|
|
$this->seed(CountriesDatabaseSeeder::class);
|
|
|
|
$this->getJson('/api/countries/resolve/GBR')
|
|
->assertOk()
|
|
->assertJsonPath('data.alpha2', 'GB');
|
|
|
|
$this->getJson('/api/countries/resolve/826')
|
|
->assertOk()
|
|
->assertJsonPath('data.alpha3', 'GBR');
|
|
}
|
|
|
|
public function test_it_lists_iso_3166_2_subdivisions_for_country(): void
|
|
{
|
|
$this->seed(CountriesDatabaseSeeder::class);
|
|
|
|
$this->getJson('/api/countries/GB/subdivisions')
|
|
->assertOk()
|
|
->assertJsonFragment(['code' => 'GB-ENG'])
|
|
->assertJsonFragment(['code' => 'GB-SCT']);
|
|
}
|
|
|
|
public function test_validation_rules_support_country_and_subdivision_codes(): void
|
|
{
|
|
$this->seed(CountriesDatabaseSeeder::class);
|
|
|
|
$countryRule = new ValidIso3166CountryCode(activeOnly: true, format: 'any');
|
|
$subdivisionRule = new ValidIso3166SubdivisionCode(activeOnly: true);
|
|
|
|
$countryFailed = false;
|
|
$subdivisionFailed = false;
|
|
|
|
$countryRule->validate('country', 'GBR', function () use (&$countryFailed): void {
|
|
$countryFailed = true;
|
|
});
|
|
|
|
$subdivisionRule->validate('subdivision', 'GB-ENG', function () use (&$subdivisionFailed): void {
|
|
$subdivisionFailed = true;
|
|
});
|
|
|
|
$this->assertFalse($countryFailed);
|
|
$this->assertFalse($subdivisionFailed);
|
|
}
|
|
}
|