I am testing if a user tries to enter an invalid url for editing a product. The products.edit route has two parameters. Shop url and product hashedid. Basically it looks like this:
MybestShop.app/emory58/products/Oaa61xK1gbQk/edit
In my test I am testing this in two steps. The first test is that I want to get a 404 when the shop name (emory58) is not correct. In the second test I am testing if the product's hashed id (Oaa61xK1gbQk) is not correct. In My test I get both tests passing and they return 404. But when I do the same thing in the browser entering an invalid shop gives me the 404 page but the invalid hashed id gives me the error which is pasted at the bottom of this post.
Here is my test that passes with no issues:
/** @test */
public function edit_products_page_url_must_be_valid()
{
$this->response = $this->withExceptionHandling()->actingAs($this->user)
->get(route('products.edit', ['invalid-shop-adress', $this->product->hashedid]));
$this->response->assertStatus(404);
$this->response = $this->withExceptionHandling()->actingAs($this->user)
->get(route('products.edit', [$this->shop->url, 'invalid-hash-id']));
$this->response->assertStatus(404);
}
Here is my Route:
Route::group(['middleware' => 'auth'], function () {
Route::get('/{shop}/products/{hashedid}/edit', 'ProductsController@edit')->name('products.edit');
});
Here is my Controller's edit method:
public function edit($shop, $hashedid)
{
$product = Product::findByHashedId($hashedid);
$shop = Shop::findByUrl($shop);
$this->authorize('update', [$product, $shop]);
return view('products.edit', compact('product', 'shop'));
}
Here is the Product's methods involved:
public $hashids;
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
// Hashids is set up in the AppServiceProvider
$this->hashids = app('Hashids\Hashids');
}
public static function findByHashedId($hashedid)
{
return self::where('id', (new Product)->hashids->decode($hashedid))->firstOrFail();
}
Errors:
1/2
PDOException in Connection.php line 323:
SQLSTATE[HY000]: General error: 2031
in Connection.php line 323
at PDOStatement->execute() in Connection.php line 323
at Connection->Illuminate\Database\{closure}('select * from `products` where `id` = ? limit 1', array()) in Connection.php line 640
at Connection->runQueryCallback('select * from `products` where `id` = ? limit 1', array(), object(Closure)) in Connection.php line 607
at Connection->run('select * from `products` where `id` = ? limit 1', array(), object(Closure)) in Connection.php line 326
at Connection->select('select * from `products` where `id` = ? limit 1', array(), true) in Builder.php line 1711
at Builder->runSelect() in Builder.php line 1696
at Builder->get(array('*')) in Builder.php line 463
at Builder->getModels(array('*')) in Builder.php line 447
at Builder->get(array('*')) in BuildsQueries.php line 71
at Builder->first(array('*')) in Builder.php line 392
at Builder->firstOrFail() in Product.php line 43
at Product::findByHashedId('Oaa61xK1gbQk') in ProductsController.php line 80
at ProductsController->edit('emory58', 'Oaa61xK1gbQk')
at call_user_func_array(array(object(ProductsController), 'edit'), array('shop' => 'emory58', 'hashedid' => 'Oaa61xK1gbQk')) in Controller.php line 55
at Controller->callAction('edit', array('shop' => 'emory58', 'hashedid' => 'Oaa61xK1gbQk')) in ControllerDispatcher.php line 44
at ControllerDispatcher->dispatch(object(Route), object(ProductsController), 'edit') in Route.php line 203
at Route->runController() in Route.php line 160
at Route->run() in Router.php line 559
at Router->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 30
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SubstituteBindings.php line 41
at SubstituteBindings->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Authenticate.php line 43
at Authenticate->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 65
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Language.php line 27
at Language->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 561
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 520
at Router->dispatchToRoute(object(Request)) in Router.php line 498
at Router->dispatch(object(Request)) in Kernel.php line 174
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 30
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 51
at Debugbar->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53
2/2
QueryException in Connection.php line 647:
SQLSTATE[HY000]: General error: 2031 (SQL: select * from `products` where `id` = ? limit 1)
in Connection.php line 647
at Connection->runQueryCallback('select * from `products` where `id` = ? limit 1', array(), object(Closure)) in Connection.php line 607
at Connection->run('select * from `products` where `id` = ? limit 1', array(), object(Closure)) in Connection.php line 326
at Connection->select('select * from `products` where `id` = ? limit 1', array(), true) in Builder.php line 1711
at Builder->runSelect() in Builder.php line 1696
at Builder->get(array('*')) in Builder.php line 463
at Builder->getModels(array('*')) in Builder.php line 447
at Builder->get(array('*')) in BuildsQueries.php line 71
at Builder->first(array('*')) in Builder.php line 392
at Builder->firstOrFail() in Product.php line 43
at Product::findByHashedId('Oaa61xK1gbQk') in ProductsController.php line 80
at ProductsController->edit('emory58', 'Oaa61xK1gbQk')
at call_user_func_array(array(object(ProductsController), 'edit'), array('shop' => 'emory58', 'hashedid' => 'Oaa61xK1gbQk')) in Controller.php line 55
at Controller->callAction('edit', array('shop' => 'emory58', 'hashedid' => 'Oaa61xK1gbQk')) in ControllerDispatcher.php line 44
at ControllerDispatcher->dispatch(object(Route), object(ProductsController), 'edit') in Route.php line 203
at Route->runController() in Route.php line 160
at Route->run() in Router.php line 559
at Router->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 30
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SubstituteBindings.php line 41
at SubstituteBindings->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Authenticate.php line 43
at Authenticate->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 65
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Language.php line 27
at Language->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 561
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 520
at Router->dispatchToRoute(object(Request)) in Router.php line 498
at Router->dispatch(object(Request)) in Kernel.php line 174
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 30
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 51
at Debugbar->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53
Please advice