64 lines
1.6 KiB
PHP
64 lines
1.6 KiB
PHP
<?php
|
|
|
|
use App\Models\Postcode;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
if (! function_exists('writeOnspdFixture')) {
|
|
function writeOnspdFixture(string $contents): string
|
|
{
|
|
$path = tempnam(sys_get_temp_dir(), 'onspd_').'.csv';
|
|
file_put_contents($path, $contents);
|
|
|
|
return $path;
|
|
}
|
|
}
|
|
|
|
it('imports active postcodes from an ONSPD CSV', function (): void {
|
|
$csv = <<<'CSV'
|
|
pcd,pcds,doterm,lat,long
|
|
"SW1A1AA","SW1A 1AA","",51.501009,-0.141588
|
|
"M11AD","M1 1AD",,53.480957,-2.237428
|
|
CSV;
|
|
|
|
$path = writeOnspdFixture($csv);
|
|
|
|
$this->artisan('postcodes:import', ['--file' => $path])
|
|
->assertSuccessful();
|
|
|
|
expect(Postcode::count())->toBe(2)
|
|
->and(Postcode::find('SW1A1AA')->outcode)->toBe('SW1A')
|
|
->and(Postcode::find('M11AD')->outcode)->toBe('M1');
|
|
});
|
|
|
|
it('skips terminated postcodes', function (): void {
|
|
$csv = <<<'CSV'
|
|
pcd,pcds,doterm,lat,long
|
|
"SW1A1AA","SW1A 1AA","",51.501009,-0.141588
|
|
"OLD1AA","OLD 1AA","202301",50.000000,-1.000000
|
|
CSV;
|
|
|
|
$path = writeOnspdFixture($csv);
|
|
|
|
$this->artisan('postcodes:import', ['--file' => $path])->assertSuccessful();
|
|
|
|
expect(Postcode::count())->toBe(1)
|
|
->and(Postcode::find('OLD1AA'))->toBeNull();
|
|
});
|
|
|
|
it('skips rows with blank coordinates', function (): void {
|
|
$csv = <<<'CSV'
|
|
pcd,pcds,doterm,lat,long
|
|
"SW1A1AA","SW1A 1AA","",51.501009,-0.141588
|
|
"BT11AA","BT1 1AA","",,
|
|
CSV;
|
|
|
|
$path = writeOnspdFixture($csv);
|
|
|
|
$this->artisan('postcodes:import', ['--file' => $path])->assertSuccessful();
|
|
|
|
expect(Postcode::count())->toBe(1)
|
|
->and(Postcode::find('BT11AA'))->toBeNull();
|
|
});
|