diff --git a/app/Models/Location.php b/app/Models/Location.php index f08a51a985..e6c310979b 100755 --- a/app/Models/Location.php +++ b/app/Models/Location.php @@ -33,7 +33,7 @@ class Location extends SnipeModel 'country' => 'min:2|max:191|nullable', 'zip' => 'max:10|nullable', 'manager_id' => 'exists:users,id|nullable', - 'parent_id' => 'non_circular:locations,id', + 'parent_id' => 'nullable|exists:locations,id|non_circular:locations,id', ]; protected $casts = [ diff --git a/tests/Feature/Locations/Ui/CreateLocationsTest.php b/tests/Feature/Locations/Ui/CreateLocationsTest.php index 5e229f1043..cfcb849025 100644 --- a/tests/Feature/Locations/Ui/CreateLocationsTest.php +++ b/tests/Feature/Locations/Ui/CreateLocationsTest.php @@ -32,6 +32,20 @@ class CreateLocationsTest extends TestCase $this->assertTrue(Location::where('name', 'Test Location')->exists()); } - + + public function testUserCannotCreateLocationsWithInvalidParent() + { + $this->assertFalse(Location::where('name', 'Test Location')->exists()); + + $this->actingAs(User::factory()->superuser()->create()) + ->from(route('locations.create')) + ->post(route('locations.store'), [ + 'name' => 'Test Location', + 'parent_id' => '100000000' + ]) + ->assertRedirect(route('locations.create')); + + $this->assertFalse(Location::where('name', 'Test Location')->exists()); + } } diff --git a/tests/Feature/Locations/Ui/UpdateLocationsTest.php b/tests/Feature/Locations/Ui/UpdateLocationsTest.php index 5359cd1b71..c692374cc7 100644 --- a/tests/Feature/Locations/Ui/UpdateLocationsTest.php +++ b/tests/Feature/Locations/Ui/UpdateLocationsTest.php @@ -52,6 +52,21 @@ class UpdateLocationsTest extends TestCase $this->assertFalse(Location::where('name', 'Test Location')->exists()); } + public function testUserCannotEditLocationsWithInvalidParent() + { + $location = Location::factory()->create(); + $response = $this->actingAs(User::factory()->superuser()->create()) + ->from(route('locations.edit', ['location' => $location->id])) + ->put(route('locations.update', ['location' => $location]), [ + 'name' => 'Test Location', + 'parent_id' => '100000000' + ]) + ->assertRedirect(route('locations.edit', ['location' => $location->id])); + + $this->followRedirects($response)->assertSee(trans('general.error')); + $this->assertFalse(Location::where('name', 'Test Location')->exists()); + } + }