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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions