%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/tests/codeception/_support/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/tests/codeception/_support/ApiTester.php |
<?php use Codeception\Util\HttpCode; use humhub\modules\rest\definitions\UserDefinitions; use humhub\modules\user\models\User; use yii\data\Pagination; use yii\web\Link; /** * Inherited Methods * @method void wantToTest($text) * @method void wantTo($text) * @method void execute($callable) * @method void expectTo($prediction) * @method void expect($prediction) * @method void amGoingTo($argumentation) * @method void am($role) * @method void lookForwardTo($achieveValue) * @method void comment($description) * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL) * * @SuppressWarnings(PHPMD) */ class ApiTester extends BaseTester { use _generated\ApiTesterActions; public function amAdmin() { $this->amUser('Admin', 'test'); } public function amUser1() { $this->amUser('User1', '123qwe'); } public function amUser2() { $this->amUser('User2', '123qwe'); } public function amUser3() { $this->amUser('User3', '123qwe'); } public function amUser($user = null, $password = null) { $this->amHttpAuthenticated($user, $password); } public function seeCodeResponseContainsJson($code, $json = []) { $this->seeResponseCodeIs($code); $this->seeResponseIsJson(); $this->seeResponseContainsJson($json); } public function seeSuccessResponseContainsJson($json = []) { $this->seeCodeResponseContainsJson(HttpCode::OK, $json); } public function seeForbiddenResponseContainsJson($json = []) { $this->seeCodeResponseContainsJson(HttpCode::FORBIDDEN, $json); } public function seeBadResponseContainsJson($json = []) { $this->seeCodeResponseContainsJson(HttpCode::BAD_REQUEST, $json); } public function seeNotFoundResponseContainsJson($json = []) { $this->seeCodeResponseContainsJson(HttpCode::NOT_FOUND, $json); } public function seeServerErrorResponseContainsJson($json = []) { $this->seeCodeResponseContainsJson(HttpCode::INTERNAL_SERVER_ERROR, $json); } public function seeSuccessMessage($message) { $this->seeCodeResponseContainsJson(HttpCode::OK, ['message' => $message]); } public function seeForbiddenMessage($message) { $this->seeCodeResponseContainsJson(HttpCode::FORBIDDEN, ['message' => $message]); } public function seeBadMessage($message) { $this->seeCodeResponseContainsJson(HttpCode::BAD_REQUEST, ['message' => $message]); } public function seeNotFoundMessage($message) { $this->seeCodeResponseContainsJson(HttpCode::NOT_FOUND, ['message' => $message]); } public function seeServerErrorMessage($message) { $this->seeCodeResponseContainsJson(HttpCode::INTERNAL_SERVER_ERROR, ['message' => $message]); } /** * Send GET API Request and check a response contains the results * * @param string $url * @param array $jsonResults * @param array $paginationParams * @param array $urlParams */ public function seePaginationGetResponse($url, $jsonResults = [], $paginationParams = [], $urlParams = []) { $encodedUrlParams = []; foreach ($urlParams as $paramKey => $paramValue) { $encodedUrlParams[] = $paramKey . '=' . urlencode($paramValue); } if (!empty($encodedUrlParams)) { $url .= (strpos($url, '?') === false ? '?' : '&') . implode('&', $encodedUrlParams); } $this->sendGet($url); $this->seePaginationResponseContainsJson($url, $jsonResults, $paginationParams); } /** * Send POST API Request and check a response contains the results * * @param string $url * @param array $postData * @param array $jsonResults * @param array $paginationParams */ public function seePaginationPostResponse($url, $postData, $jsonResults = [], $paginationParams = []) { $this->sendPost($url, $postData); $this->seePaginationResponseContainsJson($url, $jsonResults, $paginationParams); } /** * Send PUT API Request and check a response contains the results * * @param string $url * @param array $putData * @param array $jsonResults * @param array $paginationParams */ public function seePaginationPutResponse($url, $putData, $jsonResults = [], $paginationParams = []) { $this->sendPut($url, $putData); $this->seePaginationResponseContainsJson($url, $jsonResults, $paginationParams); } /** * Send DELETE API Request and check a response contains the results * * @param string $url * @param array $jsonResults * @param array $paginationParams */ public function seePaginationDeleteResponse($url, $jsonResults = [], $paginationParams = []) { $this->sendDelete($url); $this->seePaginationResponseContainsJson($url, $jsonResults, $paginationParams); } /** * Send GET API Request and check a response contains the results * * @param string $url * @param array $jsonResults * @param array $paginationParams Possible keys: 'total', 'page', 'pages' */ public function seePaginationResponseContainsJson($url, $jsonResults = [], $paginationParams = []) { $jsonResultsCount = count($jsonResults); $json = array_merge([ 'total' => $jsonResultsCount, 'page' => 1, 'pages' => $jsonResultsCount ? 1 : 0, 'perPage' => 100, ], $paginationParams); $json['links'] = $this->getPaginationUrls($url, $json); $json['results'] = $jsonResults; unset($json['perPage']); $this->seeSuccessResponseContainsJson($json); } /** * Get pagination URLs, Used to check JSON response * * @param string $url * @param array $params Possible keys: 'page', 'pages', 'perPage' * @return string[] */ protected function getPaginationUrls($url, $params) { $links = [Link::REL_SELF => $this->getPaginationUrl($url, $params['page'], $params['perPage'])]; if ($params['pages'] > 0) { $links[Pagination::LINK_FIRST] = $this->getPaginationUrl($url, 0, $params['perPage']); $links[Pagination::LINK_LAST] = $this->getPaginationUrl($url, $params['pages'] - 1, $params['perPage']); if ($params['page'] > 1) { $links[Pagination::LINK_PREV] = $this->getPaginationUrl($url, $params['page'] - 1, $params['perPage']); } if ($params['page'] < $params['pages'] - 1) { $links[Pagination::LINK_NEXT] = $this->getPaginationUrl($url, $params['page'] + 1, $params['perPage']); } } return $links; } /** * @param string $url * @param int $page * @param int $perPage * @return string */ protected function getPaginationUrl($url, $page = 1, $perPage = 100) { return '/api/v1/' . trim($url, '/') . (strpos($url, '?') === false ? '?' : '&') . 'page=' . (empty($page) ? 1 : $page) . '&per-page=' . $perPage; } /** * Get users definitions by usernames or ids * * @param array $users Usernames or Ids * @return array */ public function seeUserDefinitions($users) { $userDefinitions = []; foreach ($users as $userIdOrUsername) { $user = User::find() ->where(['id' => $userIdOrUsername]) ->orWhere(['username' => $userIdOrUsername]) ->one(); if ($user) { $userDefinitions[] = UserDefinitions::getUser($user); } } $this->seeSuccessResponseContainsJson($userDefinitions); } }