diff --git a/src/NilPortugues/Laravel5/JsonApi/Controller/JsonApiTrait.php b/src/NilPortugues/Laravel5/JsonApi/Controller/JsonApiTrait.php index ec08fca..99a1ea5 100644 --- a/src/NilPortugues/Laravel5/JsonApi/Controller/JsonApiTrait.php +++ b/src/NilPortugues/Laravel5/JsonApi/Controller/JsonApiTrait.php @@ -171,7 +171,7 @@ protected function putAction(Request $request, $id) */ protected function updateResourceCallable() { - return function (Model $model, array $values, ErrorBag $errorBag) { + return function (Model $model, array $data, array $values, ErrorBag $errorBag) { foreach ($values as $attribute => $value) { $model->$attribute = $value; } diff --git a/tests/NilPortugues/App/Controller/EmployeesController.php b/tests/NilPortugues/App/Controller/EmployeesController.php index 3aaafca..47e0c2f 100644 --- a/tests/NilPortugues/App/Controller/EmployeesController.php +++ b/tests/NilPortugues/App/Controller/EmployeesController.php @@ -37,9 +37,9 @@ public function getDataModel() /** * @return callable */ - protected function createResourceCallable() + private function createOrderResourceCallable() { - $createOrderResource = function (Model $model, array $data) { + return function (Model $model, array $data) { if (!empty($data['relationships']['order']['data'])) { $orderData = $data['relationships']['order']['data']; @@ -53,6 +53,14 @@ protected function createResourceCallable() } } }; + } + + /** + * @return callable + */ + protected function createResourceCallable() + { + $createOrderResource = $this->createOrderResourceCallable(); return function (array $data, array $values, ErrorBag $errorBag) use ($createOrderResource) { @@ -81,6 +89,35 @@ protected function createResourceCallable() }; } + /** + * @return callable + */ + protected function updateResourceCallable() + { + $createOrderResource = $this->createOrderResourceCallable(); + + return function (Model $model, array $data, array $values, ErrorBag $errorBag) use ($createOrderResource) { + + foreach ($values as $attribute => $value) { + $model->$attribute = $value; + } + + DB::beginTransaction(); + try { + $model->update(); + $createOrderResource($model, $data); + DB::commit(); + + return $model; + } catch (\Exception $e) { + DB::rollback(); + $errorBag[] = new Error('update_error', 'Resource could not be updated'); + throw new \Exception(); + } + + }; + } + /** * @param $id * diff --git a/tests/NilPortugues/Laravel5/JsonApi/JsonApiControllerTest.php b/tests/NilPortugues/Laravel5/JsonApi/JsonApiControllerTest.php index e003d77..ec0f9cf 100644 --- a/tests/NilPortugues/Laravel5/JsonApi/JsonApiControllerTest.php +++ b/tests/NilPortugues/Laravel5/JsonApi/JsonApiControllerTest.php @@ -58,6 +58,62 @@ public function testGetAction() $this->assertEquals('application/vnd.api+json', $response->headers->get('Content-type')); } + public function testPatchAction() + { + $this->createNewEmployee(); + + $content = <<call('PATCH', 'http://localhost/employees/1', json_decode($content, true), [], [], [], ''); + + $this->assertEquals(200, $response->getStatusCode()); + $this->assertEquals('application/vnd.api+json', $response->headers->get('Content-type')); + } + + public function testPutAction() + { + $this->createNewEmployee(); + + $content = <<call('PUT', 'http://localhost/employees/1', json_decode($content, true), [], [], [], ''); + + $this->assertEquals(200, $response->getStatusCode()); + $this->assertEquals('application/vnd.api+json', $response->headers->get('Content-type')); + } + public function testDeleteAction() { $this->createNewEmployee();