Merge pull request #659 from wing328/add_php_unit_test

Bug fix for PHP client POST (model) and add more PHP test cases
This commit is contained in:
Tony Tam 2015-05-16 09:13:35 -07:00
commit d6ac7c5ecf
11 changed files with 274 additions and 122 deletions

3
.gitignore vendored
View File

@ -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/

View File

@ -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));
}

View File

@ -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

View File

@ -1,7 +1,4 @@
<?php
// source code generated by http://restunited.com
// for any feedback/issue, please send to feedback{at}restunited.com
// load models defined for endpoints
foreach (glob(dirname(__FILE__)."/lib/models/*.php") as $filename)
{

View File

@ -1,7 +1,4 @@
<?php
// source code generated by http://restunited.com
// for any feedback/issue, please send to feedback{at}restunited.com
// load models defined for endpoints
foreach (glob(dirname(__FILE__)."/lib/models/*.php") as $filename)
{

View File

@ -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));
}
@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,60 @@
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wordnik</groupId>
<artifactId>PhpPetstoreClientTests</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>PHP Swagger Petstore Client</name>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>bundle-install</id>
<phase>pre-integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>composer</executable>
<arguments>
<argument>install</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>bundle-test</id>
<phase>integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>vendor/bin/phpunit</executable>
<arguments>
<argument>tests</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,16 +1,146 @@
<?php
require_once('SwaggerClient.php');
class PetApiTest extends \PHPUnit_Framework_TestCase
{
// add a new pet (id 10005) to ensure the pet object is available for all the tests
public static function setUpBeforeClass() {
// initialize the API client
$api_client = new SwaggerClient\APIClient('http://petstore.swagger.io/v2');
// new pet
$new_pet_id = 10005;
$new_pet = new SwaggerClient\models\Pet;
$new_pet->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);
}
}
?>