seed([RoleSeeder::class, SamplePsgcSeeder::class]); } public function test_resolves_qc_coordinates_to_diliman(): void { $response = $this->postJson('/api/v1/geo/resolve', [ 'lat' => 14.6539, 'lng' => 121.0685, ]); $response->assertOk() ->assertJsonPath('data.barangay.name', 'Diliman') ->assertJsonPath('data.city_municipality', 'Quezon City') ->assertJsonPath('data.region', 'National Capital Region'); } public function test_resolves_makati_coordinates_to_poblacion(): void { $response = $this->postJson('/api/v1/geo/resolve', [ 'lat' => 14.5648, 'lng' => 121.0306, ]); $response->assertOk() ->assertJsonPath('data.barangay.name', 'Poblacion'); } public function test_returns_404_for_uncovered_coordinates(): void { $response = $this->postJson('/api/v1/geo/resolve', [ 'lat' => 14.5500, 'lng' => 121.5000, ]); $response->assertStatus(404) ->assertJsonPath('errors.coordinates.0', 'out_of_coverage'); } public function test_returns_404_for_coordinates_outside_philippines(): void { $response = $this->postJson('/api/v1/geo/resolve', [ 'lat' => 35.6762, 'lng' => 139.6503, ]); $response->assertStatus(404); } public function test_validates_coordinate_bounds(): void { $response = $this->postJson('/api/v1/geo/resolve', [ 'lat' => 999, 'lng' => 121, ]); $response->assertStatus(422) ->assertJsonValidationErrors(['lat']); } public function test_requires_both_lat_and_lng(): void { $response = $this->postJson('/api/v1/geo/resolve', [ 'lat' => 14.5, ]); $response->assertStatus(422) ->assertJsonValidationErrors(['lng']); } }