API ПЛАТФОРМА ApiTestCase аутентификация отправить неожиданный ответ - PullRequest
0 голосов
/ 02 апреля 2020
  • Версия платформы Api: 2.5.4
  • Версия PHPUnit: 9.0.2
  • Symfony версия: 5.0.7

Я сделал API с платформой API. Я управляю безопасностью с помощью специального сторожевого аутентификатора на основе symfony do c и токена-носителя JWT. Когда я тестирую его вручную с почтальоном, все в порядке и работает нормально. Когда я тестировал его с помощью класса ApiTestCase, предоставляемого с платформой API, я получил два вида ошибок. Оба они происходят в одном и том же случае:

  • тест 1 -> не аутентифицирован -> ответ в порядке
  • тест 2 -> аутентифицирован -> ответ в порядке
  • тест 3 -> аутентифицирован или нет -> неправильный ответ

Когда я запрашиваю коллекцию, API возвращает только первые 2 или 3 элемента, а не все, как предполагалось.

Когда я запрашиваю предмет, я просто получаю ошибку аутентификации 401.

Вот код моего тестового класса для воспроизведения ошибки:

<?php

namespace App\Tests;

use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;

class MyCollectionTest extends ApiTestCase
{
    public function test1() #test is passing
    {
        $client = static::createClient();
        $response = $this->client->request(
            'GET',
            '/foos',
            [
                'headers'=> [],
                'json' => []
            ]
        );

        $this->assertResponseStatusCodeSame(200);
        $this->assertJsonEquals(['item1', 'item2', 'item3','item4', 'item5', 'item6']);
    }


    public function test2() #test is passing
    {
        $client = static::createClient();
        $response = $this->client->request(
            'GET',
            '/foos',
            [
                'headers'=> ['Authorization'=>'Bearer:valid_token'],
                'json' => []
            ]
        );

        $this->assertResponseStatusCodeSame(200);
        $this->assertJsonEquals(['item1', 'item2', 'item3','item4', 'item5', 'item6']);
    }

    public function test3() #test is invalid, only 'item1', 'item2', 'item3' are returned
    {
        $client = static::createClient();
        $response = $this->client->request(
            'GET',
            '/foos',
            [
                'headers'=> [],
                'json' => []
            ]
        );

        $this->assertResponseStatusCodeSame(200);
        $this->assertJsonEquals(['item1', 'item2', 'item3','item4', 'item5', 'item6']);
    }
}
?>
<?php

namespace App\Tests;

use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;

class MyItemTest extends ApiTestCase
{
    public function test1() #test is passing
    {
        $client = static::createClient();
        $response = $this->client->request(
            'GET',
            '/foos/1',
            [
                'headers'=> [],
                'json' => []
            ]
        );

        $this->assertResponseStatusCodeSame(200);
        $this->assertJsonEquals(['item1']);
    }


    public function test2() #test is passing
    {
        $client = static::createClient();
        $response = $this->client->request(
            'GET',
            '/foos/1',
            [
                'headers'=> ['Authorization'=>'Bearer:valid_token'],
                'json' => []
            ]
        );

        $this->assertResponseStatusCodeSame(200);
        $this->assertJsonEquals(['item1']);
    }

    public function test3() #test is invalid, 401 is returned
    {
        $client = static::createClient();
        $response = $this->client->request(
            'GET',
            '/foos/1',
            [
                'headers'=> [],
                'json' => []
            ]
        );

        $this->assertResponseStatusCodeSame(200);
        $this->assertJsonEquals(['item1']);
    }
}
?>

Есть идеи ? На прошлой неделе я уже писал о проблеме на github платформы Api, но не получил никаких ответов ...

...