diff --git a/.docker/nginx/app.conf b/.docker/nginx/app.conf
new file mode 100644
index 0000000..00fc930
--- /dev/null
+++ b/.docker/nginx/app.conf
@@ -0,0 +1,15 @@
+server {
+ listen 0.0.0.0:80;
+
+ root /app;
+
+ location / {
+ try_files $uri $uri/index.php;
+ }
+
+ location ~ \.php$ {
+ fastcgi_pass phpfpm:9000;
+ fastcgi_index index.php;
+ include fastcgi.conf;
+ }
+}
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..6be9e78
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,25 @@
+sudo: required
+
+language: php
+
+php:
+ - 7.2
+
+services:
+ - docker
+
+cache:
+ directories:
+ - $HOME/.composer/cache
+
+before_install:
+ - phpenv config-rm xdebug.ini
+ - travis_retry composer self-update
+ - docker-compose -f docker-compose.testing.yaml up -d
+
+before_script:
+ - composer install --no-interaction --no-suggest
+
+script:
+ - vendor/bin/phpspec run
+ - vendor/bin/codecept run
\ No newline at end of file
diff --git a/README.md b/README.md
index 9f78524..518baca 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,7 @@
===================
**Obsolete package - payment with USSD is forbidden by Iranian central bank ([more info](http://khabaronline.ir/%28X%281%29S%28dja55emvz22zzic1fn5qleqc%29%29/detail/464534/Economy/macroeconomics))**
+[![Travis (.org) branch](https://img.shields.io/travis/:user/:repo/:branch.svg?style=flat-square)](https://github.com/nikapps/saman-ussd/) [![Latest Stable Version](https://poser.pugx.org/nikapps/saman-ussd/v/stable)](https://packagist.org/packages/nikapps/saman-ussd) [![License](https://poser.pugx.org/nikapps/saman-ussd/license)](https://packagist.org/packages/nikapps/saman-ussd)
A php package for connecting to [Saman *724#](http://www.724sep.ir/) payment gateway.
@@ -338,17 +339,17 @@ vendor/bin/phpspec run
#### Api test
-Change default `endpoint` in
-`tests/api.suite.yml` and `tests/api/webservice.php`
+Run:
-Then run:
+~~~bash
+docker-compose -f docker-compose.testing.yaml up -d
-~~~
vendor/bin/codecept run
~~~
## Dependencies
+- `php >= 7.1`
- `piotrooo/wsdl-creator`
Dev dependencies:
diff --git a/composer.json b/composer.json
index d6ff23f..5ab851b 100644
--- a/composer.json
+++ b/composer.json
@@ -39,6 +39,6 @@
"require-dev": {
"phpspec/phpspec": "^2.2",
"phpunit/phpunit": "4.*",
- "codeception/codeception": "2.0.*"
+ "codeception/codeception": "^2.4"
}
}
diff --git a/docker-compose.testing.yaml b/docker-compose.testing.yaml
new file mode 100644
index 0000000..c79c56c
--- /dev/null
+++ b/docker-compose.testing.yaml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ phpfpm:
+ tty: true
+ image: 'bitnami/php-fpm:7.2'
+ ports:
+ - 9000:9000
+ volumes:
+ - .:/app
+
+ web:
+ image: 'nginx:alpine'
+ depends_on:
+ - phpfpm
+ ports:
+ - '8000:80'
+ volumes:
+ - ./.docker/nginx/:/etc/nginx/conf.d/
diff --git a/tests/_support/ApiTester.php b/tests/_support/ApiTester.php
new file mode 100644
index 0000000..aba6736
--- /dev/null
+++ b/tests/_support/ApiTester.php
@@ -0,0 +1,26 @@
+haveHttpHeader('Content-Type', 'application/json');
+ * // all next requests will contain this header
+ * ?>
+ * ```
+ *
+ * @param $name
+ * @param $value
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::haveHttpHeader()
+ */
+ public function haveHttpHeader($name, $value) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('haveHttpHeader', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Deletes the header with the passed name. Subsequent requests
+ * will not have the deleted header in its request.
+ *
+ * Example:
+ * ```php
+ * haveHttpHeader('X-Requested-With', 'Codeception');
+ * $I->sendGET('test-headers.php');
+ * // ...
+ * $I->deleteHeader('X-Requested-With');
+ * $I->sendPOST('some-other-page.php');
+ * ?>
+ * ```
+ *
+ * @param string $name the name of the header to delete.
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::deleteHeader()
+ */
+ public function deleteHeader($name) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('deleteHeader', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks over the given HTTP header and (optionally)
+ * its value, asserting that are there
+ *
+ * @param $name
+ * @param $value
+ * @part json
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeHttpHeader()
+ */
+ public function canSeeHttpHeader($name, $value = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeHttpHeader', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks over the given HTTP header and (optionally)
+ * its value, asserting that are there
+ *
+ * @param $name
+ * @param $value
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::seeHttpHeader()
+ */
+ public function seeHttpHeader($name, $value = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeHttpHeader', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks over the given HTTP header and (optionally)
+ * its value, asserting that are not there
+ *
+ * @param $name
+ * @param $value
+ * @part json
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeHttpHeader()
+ */
+ public function cantSeeHttpHeader($name, $value = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeHttpHeader', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks over the given HTTP header and (optionally)
+ * its value, asserting that are not there
+ *
+ * @param $name
+ * @param $value
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::dontSeeHttpHeader()
+ */
+ public function dontSeeHttpHeader($name, $value = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeHttpHeader', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that http response header is received only once.
+ * HTTP RFC2616 allows multiple response headers with the same name.
+ * You can check that you didn't accidentally sent the same header twice.
+ *
+ * ``` php
+ * seeHttpHeaderOnce('Cache-Control');
+ * ?>>
+ * ```
+ *
+ * @param $name
+ * @part json
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeHttpHeaderOnce()
+ */
+ public function canSeeHttpHeaderOnce($name) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeHttpHeaderOnce', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that http response header is received only once.
+ * HTTP RFC2616 allows multiple response headers with the same name.
+ * You can check that you didn't accidentally sent the same header twice.
+ *
+ * ``` php
+ * seeHttpHeaderOnce('Cache-Control');
+ * ?>>
+ * ```
+ *
+ * @param $name
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::seeHttpHeaderOnce()
+ */
+ public function seeHttpHeaderOnce($name) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeHttpHeaderOnce', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Returns the value of the specified header name
+ *
+ * @param $name
+ * @param Boolean $first Whether to return the first value or all header values
+ *
+ * @return string|array The first header value if $first is true, an array of values otherwise
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::grabHttpHeader()
+ */
+ public function grabHttpHeader($name, $first = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('grabHttpHeader', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Adds HTTP authentication via username/password.
+ *
+ * @param $username
+ * @param $password
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::amHttpAuthenticated()
+ */
+ public function amHttpAuthenticated($username, $password) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Condition('amHttpAuthenticated', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Adds Digest authentication via username/password.
+ *
+ * @param $username
+ * @param $password
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::amDigestAuthenticated()
+ */
+ public function amDigestAuthenticated($username, $password) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Condition('amDigestAuthenticated', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Adds Bearer authentication via access token.
+ *
+ * @param $accessToken
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::amBearerAuthenticated()
+ */
+ public function amBearerAuthenticated($accessToken) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Condition('amBearerAuthenticated', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Adds NTLM authentication via username/password.
+ * Requires client to be Guzzle >=6.3.0
+ * Out of scope for functional modules.
+ *
+ * Example:
+ * ```php
+ * amNTLMAuthenticated('jon_snow', 'targaryen');
+ * ?>
+ * ```
+ *
+ * @param $username
+ * @param $password
+ * @throws ModuleException
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::amNTLMAuthenticated()
+ */
+ public function amNTLMAuthenticated($username, $password) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Condition('amNTLMAuthenticated', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Allows to send REST request using AWS Authorization
+ * Only works with PhpBrowser
+ * Example
+ * Config -
+ *
+ * modules:
+ * enabled:
+ * - REST:
+ * aws:
+ * key: accessKey
+ * secret: accessSecret
+ * service: awsService
+ * region: awsRegion
+ *
+ * ```php
+ * amAWSAuthenticated();
+ * ?>
+ * ```
+ * @param array $additionalAWSConfig
+ * @throws ModuleException
+ * @see \Codeception\Module\REST::amAWSAuthenticated()
+ */
+ public function amAWSAuthenticated($additionalAWSConfig = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Condition('amAWSAuthenticated', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends a POST request to given uri. Parameters and files can be provided separately.
+ *
+ * Example:
+ * ```php
+ * sendPOST('/message', ['subject' => 'Read this!', 'to' => 'johndoe@example.com']);
+ * //simple upload method
+ * $I->sendPOST('/message/24', ['inline' => 0], ['attachmentFile' => codecept_data_dir('sample_file.pdf')]);
+ * //uploading a file with a custom name and mime-type. This is also useful to simulate upload errors.
+ * $I->sendPOST('/message/24', ['inline' => 0], [
+ * 'attachmentFile' => [
+ * 'name' => 'document.pdf',
+ * 'type' => 'application/pdf',
+ * 'error' => UPLOAD_ERR_OK,
+ * 'size' => filesize(codecept_data_dir('sample_file.pdf')),
+ * 'tmp_name' => codecept_data_dir('sample_file.pdf')
+ * ]
+ * ]);
+ * ```
+ *
+ * @param $url
+ * @param array|\JsonSerializable $params
+ * @param array $files A list of filenames or "mocks" of $_FILES (each entry being an array with the following
+ * keys: name, type, error, size, tmp_name (pointing to the real file path). Each key works
+ * as the "name" attribute of a file input field.
+ *
+ * @see http://php.net/manual/en/features.file-upload.post-method.php
+ * @see codecept_data_dir()
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendPOST()
+ */
+ public function sendPOST($url, $params = null, $files = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendPOST', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends a HEAD request to given uri.
+ *
+ * @param $url
+ * @param array $params
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendHEAD()
+ */
+ public function sendHEAD($url, $params = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendHEAD', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends an OPTIONS request to given uri.
+ *
+ * @param $url
+ * @param array $params
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendOPTIONS()
+ */
+ public function sendOPTIONS($url, $params = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendOPTIONS', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends a GET request to given uri.
+ *
+ * @param $url
+ * @param array $params
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendGET()
+ */
+ public function sendGET($url, $params = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendGET', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends PUT request to given uri.
+ *
+ * @param $url
+ * @param array $params
+ * @param array $files
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendPUT()
+ */
+ public function sendPUT($url, $params = null, $files = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendPUT', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends PATCH request to given uri.
+ *
+ * @param $url
+ * @param array $params
+ * @param array $files
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendPATCH()
+ */
+ public function sendPATCH($url, $params = null, $files = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendPATCH', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends DELETE request to given uri.
+ *
+ * @param $url
+ * @param array $params
+ * @param array $files
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendDELETE()
+ */
+ public function sendDELETE($url, $params = null, $files = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendDELETE', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends LINK request to given uri.
+ *
+ * @param $url
+ * @param array $linkEntries (entry is array with keys "uri" and "link-param")
+ *
+ * @link http://tools.ietf.org/html/rfc2068#section-19.6.2.4
+ *
+ * @author samva.ua@gmail.com
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendLINK()
+ */
+ public function sendLINK($url, $linkEntries) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendLINK', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Sends UNLINK request to given uri.
+ *
+ * @param $url
+ * @param array $linkEntries (entry is array with keys "uri" and "link-param")
+ * @link http://tools.ietf.org/html/rfc2068#section-19.6.2.4
+ * @author samva.ua@gmail.com
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::sendUNLINK()
+ */
+ public function sendUNLINK($url, $linkEntries) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('sendUNLINK', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether last response was valid JSON.
+ * This is done with json_last_error function.
+ *
+ * @part json
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseIsJson()
+ */
+ public function canSeeResponseIsJson() {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseIsJson', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether last response was valid JSON.
+ * This is done with json_last_error function.
+ *
+ * @part json
+ * @see \Codeception\Module\REST::seeResponseIsJson()
+ */
+ public function seeResponseIsJson() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseIsJson', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether the last response contains text.
+ *
+ * @param $text
+ * @part json
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseContains()
+ */
+ public function canSeeResponseContains($text) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseContains', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether the last response contains text.
+ *
+ * @param $text
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::seeResponseContains()
+ */
+ public function seeResponseContains($text) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseContains', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether last response do not contain text.
+ *
+ * @param $text
+ * @part json
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeResponseContains()
+ */
+ public function cantSeeResponseContains($text) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeResponseContains', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether last response do not contain text.
+ *
+ * @param $text
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::dontSeeResponseContains()
+ */
+ public function dontSeeResponseContains($text) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeResponseContains', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether the last JSON response contains provided array.
+ * The response is converted to array with json_decode($response, true)
+ * Thus, JSON is represented by associative array.
+ * This method matches that response array contains provided array.
+ *
+ * Examples:
+ *
+ * ``` php
+ * seeResponseContainsJson(array('name' => 'john'));
+ *
+ * // response {user: john, profile: { email: john@gmail.com }}
+ * $I->seeResponseContainsJson(array('email' => 'john@gmail.com'));
+ *
+ * ?>
+ * ```
+ *
+ * This method recursively checks if one array can be found inside of another.
+ *
+ * @param array $json
+ * @part json
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseContainsJson()
+ */
+ public function canSeeResponseContainsJson($json = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseContainsJson', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether the last JSON response contains provided array.
+ * The response is converted to array with json_decode($response, true)
+ * Thus, JSON is represented by associative array.
+ * This method matches that response array contains provided array.
+ *
+ * Examples:
+ *
+ * ``` php
+ * seeResponseContainsJson(array('name' => 'john'));
+ *
+ * // response {user: john, profile: { email: john@gmail.com }}
+ * $I->seeResponseContainsJson(array('email' => 'john@gmail.com'));
+ *
+ * ?>
+ * ```
+ *
+ * This method recursively checks if one array can be found inside of another.
+ *
+ * @param array $json
+ * @part json
+ * @see \Codeception\Module\REST::seeResponseContainsJson()
+ */
+ public function seeResponseContainsJson($json = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseContainsJson', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Returns current response so that it can be used in next scenario steps.
+ *
+ * Example:
+ *
+ * ``` php
+ * grabResponse();
+ * $I->sendPUT('/user', array('id' => $user_id, 'name' => 'davert'));
+ * ?>
+ * ```
+ *
+ * @version 1.1
+ * @return string
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::grabResponse()
+ */
+ public function grabResponse() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('grabResponse', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Returns data from the current JSON response using [JSONPath](http://goessner.net/articles/JsonPath/) as selector.
+ * JsonPath is XPath equivalent for querying Json structures.
+ * Try your JsonPath expressions [online](http://jsonpath.curiousconcept.com/).
+ * Even for a single value an array is returned.
+ *
+ * This method **require [`flow/jsonpath` > 0.2](https://github.com/FlowCommunications/JSONPath/) library to be installed**.
+ *
+ * Example:
+ *
+ * ``` php
+ * grabDataFromResponseByJsonPath('$..users[0].id');
+ * $I->sendPUT('/user', array('id' => $firstUserId[0], 'name' => 'davert'));
+ * ?>
+ * ```
+ *
+ * @param string $jsonPath
+ * @return array Array of matching items
+ * @version 2.0.9
+ * @throws \Exception
+ * @part json
+ * @see \Codeception\Module\REST::grabDataFromResponseByJsonPath()
+ */
+ public function grabDataFromResponseByJsonPath($jsonPath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('grabDataFromResponseByJsonPath', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if json structure in response matches the xpath provided.
+ * JSON is not supposed to be checked against XPath, yet it can be converted to xml and used with XPath.
+ * This assertion allows you to check the structure of response json.
+ * *
+ * ```json
+ * { "store": {
+ * "book": [
+ * { "category": "reference",
+ * "author": "Nigel Rees",
+ * "title": "Sayings of the Century",
+ * "price": 8.95
+ * },
+ * { "category": "fiction",
+ * "author": "Evelyn Waugh",
+ * "title": "Sword of Honour",
+ * "price": 12.99
+ * }
+ * ],
+ * "bicycle": {
+ * "color": "red",
+ * "price": 19.95
+ * }
+ * }
+ * }
+ * ```
+ *
+ * ```php
+ * seeResponseJsonMatchesXpath('//store/book/author');
+ * // first book in store has author
+ * $I->seeResponseJsonMatchesXpath('//store/book[1]/author');
+ * // at least one item in store has price
+ * $I->seeResponseJsonMatchesXpath('/store//price');
+ * ?>
+ * ```
+ * @param string $xpath
+ * @part json
+ * @version 2.0.9
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseJsonMatchesXpath()
+ */
+ public function canSeeResponseJsonMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseJsonMatchesXpath', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if json structure in response matches the xpath provided.
+ * JSON is not supposed to be checked against XPath, yet it can be converted to xml and used with XPath.
+ * This assertion allows you to check the structure of response json.
+ * *
+ * ```json
+ * { "store": {
+ * "book": [
+ * { "category": "reference",
+ * "author": "Nigel Rees",
+ * "title": "Sayings of the Century",
+ * "price": 8.95
+ * },
+ * { "category": "fiction",
+ * "author": "Evelyn Waugh",
+ * "title": "Sword of Honour",
+ * "price": 12.99
+ * }
+ * ],
+ * "bicycle": {
+ * "color": "red",
+ * "price": 19.95
+ * }
+ * }
+ * }
+ * ```
+ *
+ * ```php
+ * seeResponseJsonMatchesXpath('//store/book/author');
+ * // first book in store has author
+ * $I->seeResponseJsonMatchesXpath('//store/book[1]/author');
+ * // at least one item in store has price
+ * $I->seeResponseJsonMatchesXpath('/store//price');
+ * ?>
+ * ```
+ * @param string $xpath
+ * @part json
+ * @version 2.0.9
+ * @see \Codeception\Module\REST::seeResponseJsonMatchesXpath()
+ */
+ public function seeResponseJsonMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseJsonMatchesXpath', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to seeResponseJsonMatchesXpath
+ *
+ * @param string $xpath
+ * @part json
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeResponseJsonMatchesXpath()
+ */
+ public function cantSeeResponseJsonMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeResponseJsonMatchesXpath', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to seeResponseJsonMatchesXpath
+ *
+ * @param string $xpath
+ * @part json
+ * @see \Codeception\Module\REST::dontSeeResponseJsonMatchesXpath()
+ */
+ public function dontSeeResponseJsonMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeResponseJsonMatchesXpath', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if json structure in response matches [JsonPath](http://goessner.net/articles/JsonPath/).
+ * JsonPath is XPath equivalent for querying Json structures.
+ * Try your JsonPath expressions [online](http://jsonpath.curiousconcept.com/).
+ * This assertion allows you to check the structure of response json.
+ *
+ * This method **require [`flow/jsonpath` > 0.2](https://github.com/FlowCommunications/JSONPath/) library to be installed**.
+ *
+ * ```json
+ * { "store": {
+ * "book": [
+ * { "category": "reference",
+ * "author": "Nigel Rees",
+ * "title": "Sayings of the Century",
+ * "price": 8.95
+ * },
+ * { "category": "fiction",
+ * "author": "Evelyn Waugh",
+ * "title": "Sword of Honour",
+ * "price": 12.99
+ * }
+ * ],
+ * "bicycle": {
+ * "color": "red",
+ * "price": 19.95
+ * }
+ * }
+ * }
+ * ```
+ *
+ * ```php
+ * seeResponseJsonMatchesJsonPath('$.store.book[*].author');
+ * // first book in store has author
+ * $I->seeResponseJsonMatchesJsonPath('$.store.book[0].author');
+ * // at least one item in store has price
+ * $I->seeResponseJsonMatchesJsonPath('$.store..price');
+ * ?>
+ * ```
+ *
+ * @param string $jsonPath
+ * @part json
+ * @version 2.0.9
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseJsonMatchesJsonPath()
+ */
+ public function canSeeResponseJsonMatchesJsonPath($jsonPath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseJsonMatchesJsonPath', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if json structure in response matches [JsonPath](http://goessner.net/articles/JsonPath/).
+ * JsonPath is XPath equivalent for querying Json structures.
+ * Try your JsonPath expressions [online](http://jsonpath.curiousconcept.com/).
+ * This assertion allows you to check the structure of response json.
+ *
+ * This method **require [`flow/jsonpath` > 0.2](https://github.com/FlowCommunications/JSONPath/) library to be installed**.
+ *
+ * ```json
+ * { "store": {
+ * "book": [
+ * { "category": "reference",
+ * "author": "Nigel Rees",
+ * "title": "Sayings of the Century",
+ * "price": 8.95
+ * },
+ * { "category": "fiction",
+ * "author": "Evelyn Waugh",
+ * "title": "Sword of Honour",
+ * "price": 12.99
+ * }
+ * ],
+ * "bicycle": {
+ * "color": "red",
+ * "price": 19.95
+ * }
+ * }
+ * }
+ * ```
+ *
+ * ```php
+ * seeResponseJsonMatchesJsonPath('$.store.book[*].author');
+ * // first book in store has author
+ * $I->seeResponseJsonMatchesJsonPath('$.store.book[0].author');
+ * // at least one item in store has price
+ * $I->seeResponseJsonMatchesJsonPath('$.store..price');
+ * ?>
+ * ```
+ *
+ * @param string $jsonPath
+ * @part json
+ * @version 2.0.9
+ * @see \Codeception\Module\REST::seeResponseJsonMatchesJsonPath()
+ */
+ public function seeResponseJsonMatchesJsonPath($jsonPath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseJsonMatchesJsonPath', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to seeResponseJsonMatchesJsonPath
+ *
+ * @param string $jsonPath
+ * @part json
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeResponseJsonMatchesJsonPath()
+ */
+ public function cantSeeResponseJsonMatchesJsonPath($jsonPath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeResponseJsonMatchesJsonPath', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to seeResponseJsonMatchesJsonPath
+ *
+ * @param string $jsonPath
+ * @part json
+ * @see \Codeception\Module\REST::dontSeeResponseJsonMatchesJsonPath()
+ */
+ public function dontSeeResponseJsonMatchesJsonPath($jsonPath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeResponseJsonMatchesJsonPath', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to seeResponseContainsJson
+ *
+ * @part json
+ * @param array $json
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeResponseContainsJson()
+ */
+ public function cantSeeResponseContainsJson($json = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeResponseContainsJson', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to seeResponseContainsJson
+ *
+ * @part json
+ * @param array $json
+ * @see \Codeception\Module\REST::dontSeeResponseContainsJson()
+ */
+ public function dontSeeResponseContainsJson($json = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeResponseContainsJson', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that Json matches provided types.
+ * In case you don't know the actual values of JSON data returned you can match them by type.
+ * Starts check with a root element. If JSON data is array it will check the first element of an array.
+ * You can specify the path in the json which should be checked with JsonPath
+ *
+ * Basic example:
+ *
+ * ```php
+ * seeResponseMatchesJsonType([
+ * 'user_id' => 'integer',
+ * 'name' => 'string|null',
+ * 'is_active' => 'boolean'
+ * ]);
+ *
+ * // narrow down matching with JsonPath:
+ * // {"users": [{ "name": "davert"}, {"id": 1}]}
+ * $I->seeResponseMatchesJsonType(['name' => 'string'], '$.users[0]');
+ * ?>
+ * ```
+ *
+ * In this case you can match that record contains fields with data types you expected.
+ * The list of possible data types:
+ *
+ * * string
+ * * integer
+ * * float
+ * * array (json object is array as well)
+ * * boolean
+ *
+ * You can also use nested data type structures:
+ *
+ * ```php
+ * seeResponseMatchesJsonType([
+ * 'user_id' => 'integer|string', // multiple types
+ * 'company' => ['name' => 'string']
+ * ]);
+ * ?>
+ * ```
+ *
+ * You can also apply filters to check values. Filter can be applied with `:` char after the type declaration.
+ *
+ * Here is the list of possible filters:
+ *
+ * * `integer:>{val}` - checks that integer is greater than {val} (works with float and string types too).
+ * * `integer:<{val}` - checks that integer is lower than {val} (works with float and string types too).
+ * * `string:url` - checks that value is valid url.
+ * * `string:date` - checks that value is date in JavaScript format: https://weblog.west-wind.com/posts/2014/Jan/06/JavaScript-JSON-Date-Parsing-and-real-Dates
+ * * `string:email` - checks that value is a valid email according to http://emailregex.com/
+ * * `string:regex({val})` - checks that string matches a regex provided with {val}
+ *
+ * This is how filters can be used:
+ *
+ * ```php
+ * 'davert@codeception.com'}
+ * $I->seeResponseMatchesJsonType([
+ * 'user_id' => 'string:>0:<1000', // multiple filters can be used
+ * 'email' => 'string:regex(~\@~)' // we just check that @ char is included
+ * ]);
+ *
+ * // {'user_id': '1'}
+ * $I->seeResponseMatchesJsonType([
+ * 'user_id' => 'string:>0', // works with strings as well
+ * }
+ * ?>
+ * ```
+ *
+ * You can also add custom filters y accessing `JsonType::addCustomFilter` method.
+ * See [JsonType reference](http://codeception.com/docs/reference/JsonType).
+ *
+ * @part json
+ * @version 2.1.3
+ * @param array $jsonType
+ * @param string $jsonPath
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseMatchesJsonType()
+ */
+ public function canSeeResponseMatchesJsonType($jsonType, $jsonPath = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseMatchesJsonType', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that Json matches provided types.
+ * In case you don't know the actual values of JSON data returned you can match them by type.
+ * Starts check with a root element. If JSON data is array it will check the first element of an array.
+ * You can specify the path in the json which should be checked with JsonPath
+ *
+ * Basic example:
+ *
+ * ```php
+ * seeResponseMatchesJsonType([
+ * 'user_id' => 'integer',
+ * 'name' => 'string|null',
+ * 'is_active' => 'boolean'
+ * ]);
+ *
+ * // narrow down matching with JsonPath:
+ * // {"users": [{ "name": "davert"}, {"id": 1}]}
+ * $I->seeResponseMatchesJsonType(['name' => 'string'], '$.users[0]');
+ * ?>
+ * ```
+ *
+ * In this case you can match that record contains fields with data types you expected.
+ * The list of possible data types:
+ *
+ * * string
+ * * integer
+ * * float
+ * * array (json object is array as well)
+ * * boolean
+ *
+ * You can also use nested data type structures:
+ *
+ * ```php
+ * seeResponseMatchesJsonType([
+ * 'user_id' => 'integer|string', // multiple types
+ * 'company' => ['name' => 'string']
+ * ]);
+ * ?>
+ * ```
+ *
+ * You can also apply filters to check values. Filter can be applied with `:` char after the type declaration.
+ *
+ * Here is the list of possible filters:
+ *
+ * * `integer:>{val}` - checks that integer is greater than {val} (works with float and string types too).
+ * * `integer:<{val}` - checks that integer is lower than {val} (works with float and string types too).
+ * * `string:url` - checks that value is valid url.
+ * * `string:date` - checks that value is date in JavaScript format: https://weblog.west-wind.com/posts/2014/Jan/06/JavaScript-JSON-Date-Parsing-and-real-Dates
+ * * `string:email` - checks that value is a valid email according to http://emailregex.com/
+ * * `string:regex({val})` - checks that string matches a regex provided with {val}
+ *
+ * This is how filters can be used:
+ *
+ * ```php
+ * 'davert@codeception.com'}
+ * $I->seeResponseMatchesJsonType([
+ * 'user_id' => 'string:>0:<1000', // multiple filters can be used
+ * 'email' => 'string:regex(~\@~)' // we just check that @ char is included
+ * ]);
+ *
+ * // {'user_id': '1'}
+ * $I->seeResponseMatchesJsonType([
+ * 'user_id' => 'string:>0', // works with strings as well
+ * }
+ * ?>
+ * ```
+ *
+ * You can also add custom filters y accessing `JsonType::addCustomFilter` method.
+ * See [JsonType reference](http://codeception.com/docs/reference/JsonType).
+ *
+ * @part json
+ * @version 2.1.3
+ * @param array $jsonType
+ * @param string $jsonPath
+ * @see \Codeception\Module\REST::seeResponseMatchesJsonType()
+ */
+ public function seeResponseMatchesJsonType($jsonType, $jsonPath = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseMatchesJsonType', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to `seeResponseMatchesJsonType`.
+ *
+ * @part json
+ * @see seeResponseMatchesJsonType
+ * @param $jsonType jsonType structure
+ * @param null $jsonPath optionally set specific path to structure with JsonPath
+ * @version 2.1.3
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeResponseMatchesJsonType()
+ */
+ public function cantSeeResponseMatchesJsonType($jsonType, $jsonPath = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeResponseMatchesJsonType', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Opposite to `seeResponseMatchesJsonType`.
+ *
+ * @part json
+ * @see seeResponseMatchesJsonType
+ * @param $jsonType jsonType structure
+ * @param null $jsonPath optionally set specific path to structure with JsonPath
+ * @version 2.1.3
+ * @see \Codeception\Module\REST::dontSeeResponseMatchesJsonType()
+ */
+ public function dontSeeResponseMatchesJsonType($jsonType, $jsonPath = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeResponseMatchesJsonType', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if response is exactly the same as provided.
+ *
+ * @part json
+ * @part xml
+ * @param $response
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseEquals()
+ */
+ public function canSeeResponseEquals($expected) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseEquals', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if response is exactly the same as provided.
+ *
+ * @part json
+ * @part xml
+ * @param $response
+ * @see \Codeception\Module\REST::seeResponseEquals()
+ */
+ public function seeResponseEquals($expected) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseEquals', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks response code equals to provided value.
+ *
+ * ```php
+ * seeResponseCodeIs(200);
+ *
+ * // preferred to use \Codeception\Util\HttpCode
+ * $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK);
+ * ```
+ *
+ * @part json
+ * @part xml
+ * @param $code
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseCodeIs()
+ */
+ public function canSeeResponseCodeIs($code) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIs', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks response code equals to provided value.
+ *
+ * ```php
+ * seeResponseCodeIs(200);
+ *
+ * // preferred to use \Codeception\Util\HttpCode
+ * $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK);
+ * ```
+ *
+ * @part json
+ * @part xml
+ * @param $code
+ * @see \Codeception\Module\REST::seeResponseCodeIs()
+ */
+ public function seeResponseCodeIs($code) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseCodeIs', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that response code is not equal to provided value.
+ *
+ * ```php
+ * dontSeeResponseCodeIs(200);
+ *
+ * // preferred to use \Codeception\Util\HttpCode
+ * $I->dontSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
+ * ```
+ *
+ * @part json
+ * @part xml
+ * @param $code
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeResponseCodeIs()
+ */
+ public function cantSeeResponseCodeIs($code) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeResponseCodeIs', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that response code is not equal to provided value.
+ *
+ * ```php
+ * dontSeeResponseCodeIs(200);
+ *
+ * // preferred to use \Codeception\Util\HttpCode
+ * $I->dontSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
+ * ```
+ *
+ * @part json
+ * @part xml
+ * @param $code
+ * @see \Codeception\Module\REST::dontSeeResponseCodeIs()
+ */
+ public function dontSeeResponseCodeIs($code) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeResponseCodeIs', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code is 2xx
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseCodeIsSuccessful()
+ */
+ public function canSeeResponseCodeIsSuccessful() {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIsSuccessful', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code is 2xx
+ * @see \Codeception\Module\REST::seeResponseCodeIsSuccessful()
+ */
+ public function seeResponseCodeIsSuccessful() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseCodeIsSuccessful', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code 3xx
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseCodeIsRedirection()
+ */
+ public function canSeeResponseCodeIsRedirection() {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIsRedirection', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code 3xx
+ * @see \Codeception\Module\REST::seeResponseCodeIsRedirection()
+ */
+ public function seeResponseCodeIsRedirection() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseCodeIsRedirection', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code is 4xx
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseCodeIsClientError()
+ */
+ public function canSeeResponseCodeIsClientError() {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIsClientError', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code is 4xx
+ * @see \Codeception\Module\REST::seeResponseCodeIsClientError()
+ */
+ public function seeResponseCodeIsClientError() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseCodeIsClientError', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code is 5xx
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseCodeIsServerError()
+ */
+ public function canSeeResponseCodeIsServerError() {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIsServerError', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks that the response code is 5xx
+ * @see \Codeception\Module\REST::seeResponseCodeIsServerError()
+ */
+ public function seeResponseCodeIsServerError() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseCodeIsServerError', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether last response was valid XML.
+ * This is done with libxml_get_last_error function.
+ *
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeResponseIsXml()
+ */
+ public function canSeeResponseIsXml() {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseIsXml', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether last response was valid XML.
+ * This is done with libxml_get_last_error function.
+ *
+ * @part xml
+ * @see \Codeception\Module\REST::seeResponseIsXml()
+ */
+ public function seeResponseIsXml() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResponseIsXml', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether XML response matches XPath
+ *
+ * ```php
+ * seeXmlResponseMatchesXpath('//root/user[@id=1]');
+ * ```
+ * @part xml
+ * @param $xpath
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeXmlResponseMatchesXpath()
+ */
+ public function canSeeXmlResponseMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeXmlResponseMatchesXpath', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether XML response matches XPath
+ *
+ * ```php
+ * seeXmlResponseMatchesXpath('//root/user[@id=1]');
+ * ```
+ * @part xml
+ * @param $xpath
+ * @see \Codeception\Module\REST::seeXmlResponseMatchesXpath()
+ */
+ public function seeXmlResponseMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeXmlResponseMatchesXpath', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether XML response does not match XPath
+ *
+ * ```php
+ * dontSeeXmlResponseMatchesXpath('//root/user[@id=1]');
+ * ```
+ * @part xml
+ * @param $xpath
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeXmlResponseMatchesXpath()
+ */
+ public function cantSeeXmlResponseMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeXmlResponseMatchesXpath', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks whether XML response does not match XPath
+ *
+ * ```php
+ * dontSeeXmlResponseMatchesXpath('//root/user[@id=1]');
+ * ```
+ * @part xml
+ * @param $xpath
+ * @see \Codeception\Module\REST::dontSeeXmlResponseMatchesXpath()
+ */
+ public function dontSeeXmlResponseMatchesXpath($xpath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeXmlResponseMatchesXpath', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Finds and returns text contents of element.
+ * Element is matched by either CSS or XPath
+ *
+ * @param $cssOrXPath
+ * @return string
+ * @part xml
+ * @see \Codeception\Module\REST::grabTextContentFromXmlElement()
+ */
+ public function grabTextContentFromXmlElement($cssOrXPath) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('grabTextContentFromXmlElement', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Finds and returns attribute of element.
+ * Element is matched by either CSS or XPath
+ *
+ * @param $cssOrXPath
+ * @param $attribute
+ * @return string
+ * @part xml
+ * @see \Codeception\Module\REST::grabAttributeFromXmlElement()
+ */
+ public function grabAttributeFromXmlElement($cssOrXPath, $attribute) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('grabAttributeFromXmlElement', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response equals provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ *
+ * Parameters can be passed either as DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * @param $xml
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeXmlResponseEquals()
+ */
+ public function canSeeXmlResponseEquals($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeXmlResponseEquals', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response equals provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ *
+ * Parameters can be passed either as DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * @param $xml
+ * @part xml
+ * @see \Codeception\Module\REST::seeXmlResponseEquals()
+ */
+ public function seeXmlResponseEquals($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeXmlResponseEquals', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response does not equal to provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ *
+ * Parameter can be passed either as XmlBuilder, DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * @param $xml
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeXmlResponseEquals()
+ */
+ public function cantSeeXmlResponseEquals($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeXmlResponseEquals', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response does not equal to provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ *
+ * Parameter can be passed either as XmlBuilder, DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * @param $xml
+ * @part xml
+ * @see \Codeception\Module\REST::dontSeeXmlResponseEquals()
+ */
+ public function dontSeeXmlResponseEquals($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeXmlResponseEquals', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response includes provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ * Parameter can be passed either as XmlBuilder, DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * Example:
+ *
+ * ``` php
+ * seeXmlResponseIncludes("1");
+ * ?>
+ * ```
+ *
+ * @param $xml
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeXmlResponseIncludes()
+ */
+ public function canSeeXmlResponseIncludes($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeXmlResponseIncludes', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response includes provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ * Parameter can be passed either as XmlBuilder, DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * Example:
+ *
+ * ``` php
+ * seeXmlResponseIncludes("1");
+ * ?>
+ * ```
+ *
+ * @param $xml
+ * @part xml
+ * @see \Codeception\Module\REST::seeXmlResponseIncludes()
+ */
+ public function seeXmlResponseIncludes($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeXmlResponseIncludes', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response does not include provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ * Parameter can be passed either as XmlBuilder, DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * @param $xml
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeXmlResponseIncludes()
+ */
+ public function cantSeeXmlResponseIncludes($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeXmlResponseIncludes', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks XML response does not include provided XML.
+ * Comparison is done by canonicalizing both xml`s.
+ * Parameter can be passed either as XmlBuilder, DOMDocument, DOMNode, XML string, or array (if no attributes).
+ *
+ * @param $xml
+ * @part xml
+ * @see \Codeception\Module\REST::dontSeeXmlResponseIncludes()
+ */
+ public function dontSeeXmlResponseIncludes($xml) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeXmlResponseIncludes', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if the hash of a binary response is exactly the same as provided.
+ * Parameter can be passed as any hash string supported by hash(), with an
+ * optional second parameter to specify the hash type, which defaults to md5.
+ *
+ * Example: Using md5 hash key
+ *
+ * ```php
+ * seeBinaryResponseEquals("8c90748342f19b195b9c6b4eff742ded");
+ * ?>
+ * ```
+ *
+ * Example: Using md5 for a file contents
+ *
+ * ```php
+ * seeBinaryResponseEquals(md5($fileData));
+ * ?>
+ * ```
+ * Example: Using sha256 hash
+ *
+ * ```php
+ * seeBinaryResponseEquals(hash("sha256", base64_decode($fileData)), 'sha256');
+ * ?>
+ * ```
+ *
+ * @param $hash the hashed data response expected
+ * @param $algo the hash algorithm to use. Default md5.
+ * @part json
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::seeBinaryResponseEquals()
+ */
+ public function canSeeBinaryResponseEquals($hash, $algo = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeBinaryResponseEquals', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if the hash of a binary response is exactly the same as provided.
+ * Parameter can be passed as any hash string supported by hash(), with an
+ * optional second parameter to specify the hash type, which defaults to md5.
+ *
+ * Example: Using md5 hash key
+ *
+ * ```php
+ * seeBinaryResponseEquals("8c90748342f19b195b9c6b4eff742ded");
+ * ?>
+ * ```
+ *
+ * Example: Using md5 for a file contents
+ *
+ * ```php
+ * seeBinaryResponseEquals(md5($fileData));
+ * ?>
+ * ```
+ * Example: Using sha256 hash
+ *
+ * ```php
+ * seeBinaryResponseEquals(hash("sha256", base64_decode($fileData)), 'sha256');
+ * ?>
+ * ```
+ *
+ * @param $hash the hashed data response expected
+ * @param $algo the hash algorithm to use. Default md5.
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::seeBinaryResponseEquals()
+ */
+ public function seeBinaryResponseEquals($hash, $algo = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeBinaryResponseEquals', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if the hash of a binary response is not the same as provided.
+ *
+ * ```php
+ * dontSeeBinaryResponseEquals("8c90748342f19b195b9c6b4eff742ded");
+ * ?>
+ * ```
+ * Opposite to `seeBinaryResponseEquals`
+ *
+ * @param $hash the hashed data response expected
+ * @param $algo the hash algorithm to use. Default md5.
+ * @part json
+ * @part xml
+ * Conditional Assertion: Test won't be stopped on fail
+ * @see \Codeception\Module\REST::dontSeeBinaryResponseEquals()
+ */
+ public function cantSeeBinaryResponseEquals($hash, $algo = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeBinaryResponseEquals', func_get_args()));
+ }
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Checks if the hash of a binary response is not the same as provided.
+ *
+ * ```php
+ * dontSeeBinaryResponseEquals("8c90748342f19b195b9c6b4eff742ded");
+ * ?>
+ * ```
+ * Opposite to `seeBinaryResponseEquals`
+ *
+ * @param $hash the hashed data response expected
+ * @param $algo the hash algorithm to use. Default md5.
+ * @part json
+ * @part xml
+ * @see \Codeception\Module\REST::dontSeeBinaryResponseEquals()
+ */
+ public function dontSeeBinaryResponseEquals($hash, $algo = null) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Assertion('dontSeeBinaryResponseEquals', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Deprecated since 2.0.9 and removed since 2.1.0
+ *
+ * @param $path
+ * @throws ModuleException
+ * @deprecated
+ * @see \Codeception\Module\REST::grabDataFromJsonResponse()
+ */
+ public function grabDataFromJsonResponse($path) {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('grabDataFromJsonResponse', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Prevents automatic redirects to be followed by the client
+ *
+ * ```php
+ * stopFollowingRedirects();
+ * ```
+ *
+ * @part xml
+ * @part json
+ * @see \Codeception\Module\REST::stopFollowingRedirects()
+ */
+ public function stopFollowingRedirects() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('stopFollowingRedirects', func_get_args()));
+ }
+
+
+ /**
+ * [!] Method is generated. Documentation taken from corresponding module.
+ *
+ * Enables automatic redirects to be followed by the client
+ *
+ * ```php
+ * startFollowingRedirects();
+ * ```
+ *
+ * @part xml
+ * @part json
+ * @see \Codeception\Module\REST::startFollowingRedirects()
+ */
+ public function startFollowingRedirects() {
+ return $this->getScenario()->runStep(new \Codeception\Step\Action('startFollowingRedirects', func_get_args()));
+ }
+}
diff --git a/tests/api.suite.yml b/tests/api.suite.yml
index 5152a9f..1e4a9b8 100644
--- a/tests/api.suite.yml
+++ b/tests/api.suite.yml
@@ -1,8 +1,7 @@
class_name: ApiTester
modules:
- enabled: [PhpBrowser, REST, ApiHelper]
- config:
- PhpBrowser:
- url: http://saman-ussd.dev
- REST:
- url: http://saman-ussd.dev/tests/api
\ No newline at end of file
+ enabled:
+ - REST:
+ depends: PhpBrowser
+ url: http://127.0.0.1:8000/tests/api/
+ - ApiHelper:
\ No newline at end of file
diff --git a/tests/api/webservice.php b/tests/api/webservice.php
index 5f31614..4d48cc9 100644
--- a/tests/api/webservice.php
+++ b/tests/api/webservice.php
@@ -36,7 +36,7 @@
->successful();
});
-$endpoint = 'http://saman-ussd.dev/tests/api/webservice.php';
+$endpoint = 'http://web/tests/api/webservice.php';
$samanUssd->endpoint($endpoint);
$samanUssd->handle();
\ No newline at end of file