diff --git a/.gitignore b/.gitignore index b17bf46aa10..210834c6a85 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,6 @@ target .lib atlassian-ide-plugin.xml .DS_Store + +samples/client/petstore/php/SwaggerClient-php/composer.lock +samples/client/petstore/php/SwaggerClient-php/vendor/ diff --git a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache index 5cfb953002b..a750daff12d 100644 --- a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache @@ -94,7 +94,11 @@ class APIClient { $headers[] = $this->headerName . ": " . $this->headerValue; } - if ((isset($headerName['Content-Type']) and strpos($headerName['Content-Type'], "multipart/form-data") === FALSE) and (is_object($postData) or is_array($postData))) { + // form data + if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) { + $postData = http_build_query($postData); + } + else if ((is_object($postData) or is_array($postData)) and !in_array('Content-Type: multipart/form-data', $headers)) { // json model $postData = json_encode($this->sanitizeForSerialization($postData)); } diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index e0b94e6b232..7759af5004d 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -87,11 +87,9 @@ class {{classname}} { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call diff --git a/modules/swagger-codegen/src/main/resources/php/require.mustache b/modules/swagger-codegen/src/main/resources/php/require.mustache index 058aa169504..3c02d861ef1 100644 --- a/modules/swagger-codegen/src/main/resources/php/require.mustache +++ b/modules/swagger-codegen/src/main/resources/php/require.mustache @@ -1,7 +1,4 @@ headerName . ": " . $this->headerValue; } - if ((isset($headerName['Content-Type']) and strpos($headerName['Content-Type'], "multipart/form-data") === FALSE) and (is_object($postData) or is_array($postData))) { + // form data + if ($postData and in_array('Content-Type: application/x-www-form-urlencoded', $headers)) { + $postData = http_build_query($postData); + } + else if ((is_object($postData) or is_array($postData)) and !in_array('Content-Type: multipart/form-data', $headers)) { // json model $postData = json_encode($this->sanitizeForSerialization($postData)); } @@ -138,21 +142,20 @@ class APIClient { $response_info = curl_getinfo($curl); // Handle the response - if ($response_info['http_code'] == 0) { - throw new APIClientException("TIMEOUT: api call to " . $url . - " took more than 5s to return", 0, $response_info, $response); + if ($response === false) { // error, likely in the client side + throw new APIClientException("API Error ($url): ".curl_error($curl), 0, $response_info, $response); } else if ($response_info['http_code'] >= 200 && $response_info['http_code'] <= 299 ) { $data = json_decode($response); if (json_last_error() > 0) { // if response is a string $data = $response; } - } else if ($response_info['http_code'] == 401) { + } else if ($response_info['http_code'] == 401) { // server returns 401 throw new APIClientException("Unauthorized API request to " . $url . ": " . serialize($response), 0, $response_info, $response); - } else if ($response_info['http_code'] == 404) { + } else if ($response_info['http_code'] == 404) { // server returns 404 $data = null; } else { - throw new APIClientException("Can't connect to the api: " . $url . + throw new APIClientException("Can't connect to the API: " . $url . " response code: " . $response_info['http_code'], 0, $response_info, $response); } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php index 1db6fbffc07..07f6181a730 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php @@ -68,11 +68,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -122,11 +120,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -175,11 +171,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -234,11 +228,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -299,11 +291,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -372,11 +362,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -435,11 +423,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -502,11 +488,9 @@ class PetApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php index 6e3ce56e7ce..78e23ec9034 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php @@ -63,11 +63,9 @@ class StoreApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -123,11 +121,9 @@ class StoreApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -188,11 +184,9 @@ class StoreApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -253,11 +247,9 @@ class StoreApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php index 8296d5e92fd..a3ed8a8ab25 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php @@ -68,11 +68,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -122,11 +120,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -176,11 +172,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -233,11 +227,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -288,11 +280,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -347,11 +337,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -417,11 +405,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call @@ -476,11 +462,9 @@ class UserApi { // for model (json/xml) if (isset($_tempBody)) { $httpBody = $_tempBody; // $_tempBody is the method argument, if present - } - - // for HTTP post (form) - if (strpos($headerParams['Content-Type'], "application/x-www-form-urlencoded") !== FALSE) { - $httpBody = http_build_query($formParams); + } else if (count($formParams) > 0) { + // for HTTP post (form) + $httpBody = $formParams; } // make the API Call diff --git a/samples/client/petstore/php/SwaggerClient-php/pom.xml b/samples/client/petstore/php/SwaggerClient-php/pom.xml new file mode 100644 index 00000000000..b1aeddcf7ea --- /dev/null +++ b/samples/client/petstore/php/SwaggerClient-php/pom.xml @@ -0,0 +1,60 @@ + + 4.0.0 + com.wordnik + PhpPetstoreClientTests + pom + 1.0-SNAPSHOT + PHP Swagger Petstore Client + + + + maven-dependency-plugin + + + package + + copy-dependencies + + + ${project.build.directory} + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + bundle-install + pre-integration-test + + exec + + + composer + + install + + + + + bundle-test + integration-test + + exec + + + vendor/bin/phpunit + + tests + + + + + + + + + diff --git a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php index 3286208ec56..d2d398ae140 100644 --- a/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php +++ b/samples/client/petstore/php/SwaggerClient-php/tests/PetApiTest.php @@ -1,16 +1,146 @@ id = $new_pet_id; + $new_pet->name = "PHP Unit Test"; + // new tag + $tag= new SwaggerClient\models\Tag; + $tag->id = $new_pet_id; // use the same id as pet + $tag->name = "test php tag"; + // new category + $category = new SwaggerClient\models\Category; + $category->id = $new_pet_id; // use the same id as pet + $category->name = "test php category"; + + $new_pet->tags = [$tag]; + $new_pet->category = $category; + + $pet_api = new SwaggerClient\PetAPI($api_client); + // add a new pet (model) + $add_response = $pet_api->addPet($new_pet); + } + + // test getPetById with a Pet object (id 10005) public function testGetPetById() { // initialize the API client $api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); - $petId = 10005; // ID of pet that needs to be fetched + $pet_id = 10005; // ID of pet that needs to be fetched $pet_api = new SwaggerClient\PetAPI($api_client); // return Pet (model) - $response = $pet_api->getPetById($petId); - $this->assertSame($response->id, $petId); + $response = $pet_api->getPetById($pet_id); + $this->assertSame($response->id, $pet_id); + $this->assertSame($response->name, 'PHP Unit Test'); + $this->assertSame($response->category->id, $pet_id); + $this->assertSame($response->category->name, 'test php category'); + $this->assertSame($response->tags[0]->id, $pet_id); + $this->assertSame($response->tags[0]->name, 'test php tag'); } + + // test getPetByStatus and verify by the "id" of the response + public function testFindPetByStatus() + { + // initialize the API client + $api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); + $pet_api = new SwaggerClient\PetAPI($api_client); + // return Pet (model) + $response = $pet_api->findPetsByStatus("available"); + $this->assertGreaterThan(0, count($response)); // at least one object returned + $this->assertSame(get_class($response[0]), "SwaggerClient\models\Pet"); // verify the object is Pet + // loop through result to ensure status is "available" + foreach ($response as $_pet) { + $this->assertSame($_pet['status'], "available"); + } + // test invalid status + $response = $pet_api->findPetsByStatus("unknown_and_incorrect_status"); + $this->assertSame(count($response), 0); // confirm no object returned + } + + // test updatePet (model/json)and verify by the "id" of the response + public function testUpdatePet() + { + // initialize the API client + $api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); + $pet_id = 10001; // ID of pet that needs to be fetched + $pet_api = new SwaggerClient\PetAPI($api_client); + // create updated pet object + $updated_pet = new SwaggerClient\models\Pet; + $updated_pet->id = $pet_id; + $updated_pet->status = "pending"; // new status + // update Pet (model/json) + $update_response = $pet_api->updatePet($updated_pet); + // return nothing (void) + $this->assertSame($update_response, NULL); + // verify updated Pet + $response = $pet_api->getPetById($pet_id); + $this->assertSame($response->id, $pet_id); + $this->assertSame($response->status, 'pending'); + } + + // test updatePet and verify by the "id" of the response + public function testUpdatePetWithForm() + { + // initialize the API client + $api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); + $pet_id = 10001; // ID of pet that needs to be fetched + $pet_api = new SwaggerClient\PetAPI($api_client); + // update Pet (form) + $update_response = $pet_api->updatePetWithForm($pet_id, null, 'sold'); + // return nothing (void) + $this->assertSame($update_response, NULL); + // TODO commented out for the time being since it's broken + // https://github.com/swagger-api/swagger-codegen/issues/656 + // verify updated Pet + //$response = $pet_api->getPetById($pet_id); + //$this->assertSame($response->id, $pet_id); + //$this->assertSame($response->status, 'sold'); + } + + // test addPet and verify by the "id" and "name" of the response + public function testAddPet() + { + // initialize the API client + $api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); + $new_pet_id = 10001; + $new_pet = new SwaggerClient\models\Pet; + $new_pet->id = $new_pet_id; + $new_pet->name = "PHP Unit Test"; + $pet_api = new SwaggerClient\PetAPI($api_client); + // add a new pet (model) + $add_response = $pet_api->addPet($new_pet); + // return nothing (void) + $this->assertSame($add_response, NULL); + // verify added Pet + $response = $pet_api->getPetById($new_pet_id); + $this->assertSame($response->id, $new_pet_id); + $this->assertSame($response->name, 'PHP Unit Test'); + } + + // test + public function testUploadFile() + { + // initialize the API client + $api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2'); + $pet_api = new SwaggerClient\PetAPI($api_client); + // upload file + $pet_id = 10001; + $add_response = $pet_api->uploadFile($pet_id, "test meta", "./composer.json"); + // return nothing (void) + $this->assertSame($add_response, NULL); + } + } + ?> +