Skip to content

Does this module work with codeception/module-rest? #18

@earthiverse

Description

@earthiverse

I'm getting 401 (Unauthorized) in the tests I use $I->amHttpAuthenticated('test', 'test'); with.
Routes that I don't check authorization seem to work.

When I run a test using Mezzio

FetchCest: Test fetch and retrieve svg
Signature: Codeception\Acceptance\FetchCest:testFetchAndRetrieveSvg
Test: tests/Codeception/Acceptance/FetchCest.php:testFetchAndRetrieveSvg
Scenario --
 I am http authenticated "test","test"
 I send post "/fetch",{"url":"https://upload.wikimedia.org/wikipedia/en/8/80/Wikipedia-logo-v2.svg","name":"Wikipedia Logo"}
  [Request] POST /fetch {"url":"https://upload.wikimedia.org/wikipedia/en/8/80/Wikipedia-logo-v2.svg","name":"Wikipedia Logo"}
  [Request Headers] []
  [Page] /fetch
  [Response] 401
  [Request Cookies] []
  [Response Headers] {"WWW-Authenticate":["Basic realm="media-store""]}
  [Response] 
 I see response is json 
 FAIL 

When I run it using PhpBrowser

FetchCest: Test fetch and retrieve svg
Signature: Codeception\Acceptance\FetchCest:testFetchAndRetrieveSvg
Test: tests/Codeception/Acceptance/FetchCest.php:testFetchAndRetrieveSvg
Scenario --
 I am http authenticated "test","test"
 I send post "/fetch",{"url":"https://upload.wikimedia.org/wikipedia/en/8/80/Wikipedia-logo-v2.svg","name":"Wikipedia Logo"}
  [Request] POST http://media-store.localhost/fetch {"url":"https://upload.wikimedia.org/wikipedia/en/8/80/Wikipedia-logo-v2.svg","name":"Wikipedia Logo"}
  [Request Headers] []
  [Page] http://media-store.localhost/fetch
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"Server":["nginx/1.27.1"],"Date":["Wed, 09 Oct 2024 02:29:39 GMT"],"Content-Type":["application/json"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"X-Powered-By":["PHP/8.3.12"]}
  [Response] {"success":true,"url":"http://media-store.localhost/img/store/79/bd/bb953537891b27c9d26a0f1815584fbe5364/wikipedia-logo","meta":{"width":103,"height":94,"filesize":165428,"mimetype":"image/svg+xml"}}
 I see response is json 
 I see response contains json {"success":true,"meta":{"mimetype":"image/svg+xml"}}
 I see response code is 200
 I grab data from response by json path "url"
 I assert not null "/img/store/79/bd/bb953537891b27c9d26a0f1815584fbe5364/wikipedia-logo"
 I assert string contains string ignoring case "Wikipedia","/img/store/79/bd/bb953537891b27c9d26a0f1815584fbe5364/wikipedia-logo"
 I assert string contains string ignoring case "Logo","/img/store/79/bd/bb953537891b27c9d26a0f1815584fbe5364/wikipedia-logo"
 I am http authenticated "",""
 I send get "/img/store/79/bd/bb953537891b27c9d26a0f1815584fbe5364/wikipedia-logo"
  [Request] GET http://media-store.localhost/img/store/79/bd/bb953537891b27c9d26a0f1815584fbe5364/wikipedia-logo
  [Request Headers] []
  [Page] http://media-store.localhost/img/store/79/bd/bb953537891b27c9d26a0f1815584fbe5364/wikipedia-logo
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"Server":["nginx/1.27.1"],"Date":["Wed, 09 Oct 2024 02:29:40 GMT"],"Content-Type":["image/svg+xml"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"X-Powered-By":["PHP/8.3.12"],"Last-Modified":["Tue, 08 Oct 2024 07:59:10 GMT"],"Cache-Control":["public, max-age=86400, no-transform"],"ETag":["0df5066882793e7b1893e3adc393abbc"]}
  [Response] <A very long XML string here>
 I see response code is 200
 PASSED 

Here's my Acceptance.suite.yml

actor: AcceptanceTester
suite_namespace: Codeception\Acceptance
modules:
  enabled:
    - \Codeception\Module\Asserts
    - \Codeception\Module\REST
  config:
    \Codeception\Module\REST:
      depends: \Codeception\Module\PhpBrowser
      url: http://media-store.localhost/
env:
  mezzio:
    modules:
      enabled:
        - \Codeception\Module\Mezzio
      config:
        \Codeception\Module\REST:
          depends: \Codeception\Module\Mezzio
          url: /
  docker:
    modules:
      config:
        \Codeception\Module\REST:
          url: http://localhost:8080/

And my test

public function testFetchAndRetrieveSvg(AcceptanceTester $I): void
{
    // Fetch the Wikipedia logo
    $I->amHttpAuthenticated('test', 'test');
    $I->sendPost('/fetch', [
        'url' => 'https://upload.wikimedia.org/wikipedia/en/8/80/Wikipedia-logo-v2.svg',
        'name' => 'Wikipedia Logo',
    ]);
    $I->seeResponseIsJson();
    $I->seeResponseContainsJson([
        'success' => true,
        'meta' => [
            'mimetype' => 'image/svg+xml',
        ],
    ]);
    $I->seeResponseCodeIs(StatusCodes::STATUS_OK);

    // Parse the URL that we retrieved in the response
    $path = parse_url($I->grabDataFromResponseByJsonPath('url')[0])['path'];
    $I->assertNotNull($path);
    $I->assertStringContainsStringIgnoringCase('Wikipedia', $path);
    $I->assertStringContainsStringIgnoringCase('Logo', $path);

    // Retrieve the stored image without authentication
    $I->amHttpAuthenticated('', '');
    $I->sendGet($path);
    $I->seeResponseCodeIs(StatusCodes::STATUS_OK);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions