Kentavr16
@Kentavr16
long cold winter

Почему тест проваливается даже при отсутствии условий?

есть метод контроллера
public function update(Request $request, string $id)
    {
        $productToUpdate = Product::find($id);
        if (!$productToUpdate){
            return response()->json(["message"=>"Product id $id not found"],404);
        }
        $this->authorize("update",$productToUpdate);
        $isUpdated = $productToUpdate->update($request->all());
        if($isUpdated){
            return response()->json(["message"=>"Product id $id has been updated"],200);
        }else{
            return response()->json(["message"=>"Error has occured during the product id $id update"],400);
        }
    }


Написал под него тест -
public function test_user_without_permissions_cant_update_product(): void
    {
        $this->seed(PermissionsTableSeeder::class);
        $this->seed(RolesTableSeeder::class);
        $productToPatch = Product::factory()->create();
        $user=User::factory()->create();
        $user->assignRole('site_user');
        $this->actingAs($user);
        $newData = [
          "name"=>"updated name"
        ];
        $response = $this->patch("/api/products/$productToPatch->id",$newData)->json();
    }

тест обозначается как failed: This action is unauthorized.
Причем как видите я убрал все проверки, но тест все равно валится. до этого пробовал expectException(AuthorizationException::class);, $response->assertStatus(403),но ведь проблема в том что он в любом случае заваливается. Не совсем понимаю логику происходящего.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Kentavr16
@Kentavr16 Автор вопроса
long cold winter
В общем, судя по информации на форумах ошибка чаще всего должна указывать на проблемы с авторизацией/политиками безовасности, что логично. Я решил отключить проверку -
public function update(User $user, Product $product): bool
    {
       // return $user->can('edit notes');
        return true;
    }

и как результат тест выдал другую ошибку - Call to a member function assertStatus() on array

Да, все оказалось просто - я не должен был вызывать сразу метод json в
$response = $this->patch("/api/products/$productToPatch->id",$newData)->json();
, так как в итоге получил массив, на котором пробовал вызвать assertStatus. Обманчивый статус ошибки однако.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы