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),но ведь проблема в том что он в любом случае заваливается. Не совсем понимаю логику происходящего.
  • Вопрос задан
  • 115 просмотров
Решения вопроса 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. Обманчивый статус ошибки однако.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы