symfony codeception: Проверка запрета доступа к методу контроллера/авторизации, броска исключения expectThrowable - Пример

Предположим, что у нас есть метод контроллера с описанием доступа вроде:

При этом у нас метод контролеера имеет какой-то такой доступ:
<pre class="brush: php">

    #[IsGranted(attribute: 'ROLE_USER', message: 'Нужна авторизация', exceptionCode: 401)]
    #[IsGranted(
        attribute: new Expression('is_granted("ROLE_A") or is_granted("ROLE_UR")'
        . ' and user.getId() === subject'),
        subject: new Expression('args["post"].getUserId()'),
        message: 'Пользователь не является автором поста.',
    )]
    #[Route('/edit/{id}', name: 'app_post_edit', methods: 'PUT')]
    public function edit(
        Post $post,
        EntityManagerInterface $entityManager,
</pre>

Тогда проверить, что пользователь не имеет доступа можно как-то так:

/**
* @before authAsSimpleUserPetya
*/
public function canNotEditBySimpleUserArticleCreatedByOtherSimpleUser(FunctionalTester $I)
{

    $client = $this->client;

 // говорим, что мы ожидаем отказ доступа в виде исключения
    $I->expectThrowable(AccessDeniedException::class, function () use ($client)  {
        $client->request(
            'PUT',
            '/api/' . $this->getApiVersion() . '/post/edit/' . $this->postId,
            [],
            [],
            [],
            '{"tags":[555,111,24,7,1],"questions":[]}'
        );
    });
    // $I->pre('Запрет другому пользователю редактировать статью пользователя Vasya');      
}

(мы каким-то образом логинимся под пользователем, который не имеет доступа к редактированию, тут используется аннотация before кодесепшенна)

-- для перехвата таким способом именно в тесте нужно будет выключить перехват исключений в клиенте.

Key Words for FKN + antitotal forum (CS VSU):