From 6ddf3b017ccb8486c8dc5ff5a09d051a40e094ca Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Wed, 30 Nov 2022 09:15:15 -0600 Subject: [PATCH 1/3] dont delete by default --- .../Console/stubs/controller.nested.singleton.api.stub | 2 +- .../Routing/Console/stubs/controller.nested.singleton.stub | 2 +- .../Routing/Console/stubs/controller.singleton.api.stub | 2 +- .../Routing/Console/stubs/controller.singleton.stub | 2 +- src/Illuminate/Routing/ResourceRegistrar.php | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.api.stub b/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.api.stub index 651e876b0ecb..91b8a693c918 100644 --- a/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.api.stub +++ b/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.api.stub @@ -52,6 +52,6 @@ class {{ class }} extends Controller */ public function destroy({{ parentModel }} ${{ parentModelVariable }}) { - // + abort(404); } } diff --git a/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.stub b/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.stub index 2d2501b13e6f..3153a56ef31e 100644 --- a/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.stub +++ b/src/Illuminate/Routing/Console/stubs/controller.nested.singleton.stub @@ -74,6 +74,6 @@ class {{ class }} extends Controller */ public function destroy({{ parentModel }} ${{ parentModelVariable }}) { - // + abort(404); } } diff --git a/src/Illuminate/Routing/Console/stubs/controller.singleton.api.stub b/src/Illuminate/Routing/Console/stubs/controller.singleton.api.stub index ebd32b29250c..ac9a67b5a58a 100644 --- a/src/Illuminate/Routing/Console/stubs/controller.singleton.api.stub +++ b/src/Illuminate/Routing/Console/stubs/controller.singleton.api.stub @@ -46,6 +46,6 @@ class {{ class }} extends Controller */ public function destroy() { - // + abort(404); } } diff --git a/src/Illuminate/Routing/Console/stubs/controller.singleton.stub b/src/Illuminate/Routing/Console/stubs/controller.singleton.stub index e9be27ea1521..a27f2d606471 100644 --- a/src/Illuminate/Routing/Console/stubs/controller.singleton.stub +++ b/src/Illuminate/Routing/Console/stubs/controller.singleton.stub @@ -66,6 +66,6 @@ class {{ class }} extends Controller */ public function destroy() { - // + abort(404); } } diff --git a/src/Illuminate/Routing/ResourceRegistrar.php b/src/Illuminate/Routing/ResourceRegistrar.php index 3489fba08ebb..af81a1800f88 100644 --- a/src/Illuminate/Routing/ResourceRegistrar.php +++ b/src/Illuminate/Routing/ResourceRegistrar.php @@ -26,7 +26,7 @@ class ResourceRegistrar * * @var string[] */ - protected $singletonResourceDefaults = ['show', 'edit', 'update', 'destroy']; + protected $singletonResourceDefaults = ['show', 'edit', 'update']; /** * The parameters set for this resource instance. @@ -251,8 +251,8 @@ protected function getResourceMethods($defaults, $options) if (isset($options['creatable'])) { $methods = isset($options['apiSingleton']) - ? array_merge(['store'], $methods) - : array_merge(['create', 'store'], $methods); + ? array_merge(['store', 'destroy'], $methods) + : array_merge(['create', 'store', 'destroy'], $methods); return $this->getResourceMethods( $methods, array_values(Arr::except($options, ['creatable'])) From 6674a8792913aa3ff8f41607c99d8b55729ffbce Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Wed, 30 Nov 2022 10:02:31 -0600 Subject: [PATCH 2/3] update test --- tests/Integration/Routing/RouteSingletonTest.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/Integration/Routing/RouteSingletonTest.php b/tests/Integration/Routing/RouteSingletonTest.php index bb0710f31afc..96a9f3c3eb60 100644 --- a/tests/Integration/Routing/RouteSingletonTest.php +++ b/tests/Integration/Routing/RouteSingletonTest.php @@ -36,10 +36,10 @@ public function testSingletonDefaults() $this->assertEquals(200, $response->getStatusCode()); $this->assertSame('singleton update', $response->getContent()); - $this->assertSame('http://localhost/avatar', route('avatar.destroy')); - $response = $this->delete('/avatar'); - $this->assertEquals(200, $response->getStatusCode()); - $this->assertSame('singleton destroy', $response->getContent()); + // $this->assertSame('http://localhost/avatar', route('avatar.destroy')); + // $response = $this->delete('/avatar'); + // $this->assertEquals(404, $response->getStatusCode()); + // $this->assertSame('singleton destroy', $response->getContent()); } public function testCreatableSingleton() @@ -55,6 +55,11 @@ public function testCreatableSingleton() $response = $this->post('/avatar'); $this->assertEquals(200, $response->getStatusCode()); $this->assertSame('singleton store', $response->getContent()); + + $this->assertSame('http://localhost/avatar', route('avatar.destroy')); + $response = $this->delete('/avatar'); + $this->assertEquals(200, $response->getStatusCode()); + $this->assertSame('singleton destroy', $response->getContent()); } public function testApiSingleton() From ed566a6624587298bf02d5ff6118013f8750b437 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Wed, 30 Nov 2022 10:15:25 -0600 Subject: [PATCH 3/3] update test --- .../Routing/RouteSingletonTest.php | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/tests/Integration/Routing/RouteSingletonTest.php b/tests/Integration/Routing/RouteSingletonTest.php index 96a9f3c3eb60..3b5d06fa001a 100644 --- a/tests/Integration/Routing/RouteSingletonTest.php +++ b/tests/Integration/Routing/RouteSingletonTest.php @@ -135,9 +135,9 @@ public function testSingletonExcept() $this->assertEquals(200, $response->getStatusCode()); $this->assertSame('singleton update', $response->getContent()); - $response = $this->delete('/avatar'); - $this->assertEquals(200, $response->getStatusCode()); - $this->assertSame('singleton destroy', $response->getContent()); + // $response = $this->delete('/avatar'); + // $this->assertEquals(200, $response->getStatusCode()); + // $this->assertSame('singleton destroy', $response->getContent()); } public function testSingletonName() @@ -174,6 +174,30 @@ public function testNestedSingleton() $this->assertEquals(200, $response->getStatusCode()); $this->assertSame('singleton update for 123', $response->getContent()); + $response = $this->delete('/videos/123/thumbnail'); + $this->assertEquals(405, $response->getStatusCode()); + } + + public function testCreatableNestedSingleton() + { + Route::singleton('videos.thumbnail', NestedSingletonTestController::class)->creatable(); + + $response = $this->get('/videos/123/thumbnail'); + $this->assertEquals(200, $response->getStatusCode()); + $this->assertSame('singleton show for 123', $response->getContent()); + + $response = $this->get('/videos/123/thumbnail/edit'); + $this->assertEquals(200, $response->getStatusCode()); + $this->assertSame('singleton edit for 123', $response->getContent()); + + $response = $this->put('/videos/123/thumbnail'); + $this->assertEquals(200, $response->getStatusCode()); + $this->assertSame('singleton update for 123', $response->getContent()); + + $response = $this->patch('/videos/123/thumbnail'); + $this->assertEquals(200, $response->getStatusCode()); + $this->assertSame('singleton update for 123', $response->getContent()); + $response = $this->delete('/videos/123/thumbnail'); $this->assertEquals(200, $response->getStatusCode()); $this->assertSame('singleton destroy for 123', $response->getContent());