fix isBinary, CodegenParameter copy, add isBinary to php api client

This commit is contained in:
wing328 2016-01-15 00:20:36 +08:00
parent c7b9635e98
commit fee8acef97
5 changed files with 50 additions and 16 deletions

View File

@ -110,6 +110,7 @@ public class CodegenParameter {
output.allowableValues = new HashMap<String, Object>(this.allowableValues); output.allowableValues = new HashMap<String, Object>(this.allowableValues);
} }
output.vendorExtensions = this.vendorExtensions; output.vendorExtensions = this.vendorExtensions;
output.isBinary = this.isBinary;
return output; return output;
} }

View File

@ -1329,6 +1329,7 @@ public class DefaultCodegen {
cookieParams.add(p.copy()); cookieParams.add(p.copy());
} else if (param instanceof BodyParameter) { } else if (param instanceof BodyParameter) {
p.isBodyParam = new Boolean(true); p.isBodyParam = new Boolean(true);
p.isBinary = p.dataType.toLowerCase().startsWith("byte");
bodyParam = p; bodyParam = p;
bodyParams.add(p.copy()); bodyParams.add(p.copy());
} else if (param instanceof FormParameter) { } else if (param instanceof FormParameter) {
@ -1422,7 +1423,7 @@ public class DefaultCodegen {
} }
} }
r.dataType = cm.datatype; r.dataType = cm.datatype;
r.isBinary = cm.datatype.equals("byte[]"); r.isBinary = cm.datatype.toLowerCase().startsWith("byte");
if (cm.isContainer != null) { if (cm.isContainer != null) {
r.simpleType = false; r.simpleType = false;
r.containerType = cm.containerType; r.containerType = cm.containerType;
@ -1567,12 +1568,7 @@ public class DefaultCodegen {
CodegenProperty cp = fromProperty("property", prop); CodegenProperty cp = fromProperty("property", prop);
if (cp != null) { if (cp != null) {
p.dataType = cp.datatype; p.dataType = cp.datatype;
if (p.dataType.equals("byte[]")) { p.isBinary = cp.datatype.toLowerCase().startsWith("byte");
p.isBinary = true;
}
else {
p.isBinary = false;
}
} }
} }
} else if (model instanceof ArrayModel) { } else if (model instanceof ArrayModel) {

View File

@ -188,7 +188,7 @@ use \{{invokerPackage}}\ObjectSerializer;
{{#bodyParams}}// body params {{#bodyParams}}// body params
$_tempBody = null; $_tempBody = null;
if (isset(${{paramName}})) { if (isset(${{paramName}})) {
$_tempBody = ${{paramName}}; {{^isBinary}}$_tempBody = ${{paramName}};{{/isBinary}}{{#isBinary}}$_tempBody = call_user_func_array('pack', array_merge(array('C*'), ${{paramName}}));{{/isBinary}}
}{{/bodyParams}} }{{/bodyParams}}
// for model (json/xml) // for model (json/xml)

View File

@ -1026,7 +1026,7 @@ class PetApi
// body params // body params
$_tempBody = null; $_tempBody = null;
if (isset($body)) { if (isset($body)) {
$_tempBody = $body; $_tempBody = call_user_func_array('pack', array_merge(array('C*'), $body));
} }
// for model (json/xml) // for model (json/xml)

View File

@ -206,24 +206,60 @@ class PetApiTest extends \PHPUnit_Framework_TestCase
} }
// test addPet and verify by the "id" and "name" of the response // test addPet and verify by the "id" and "name" of the response
public function testAddPetUsingByteArray() public function testAddPet()
{ {
// initialize the API client // initialize the API client
$config = (new Swagger\Client\Configuration())->setHost('http://petstore.swagger.io/v2'); $config = (new Swagger\Client\Configuration())->setHost('http://petstore.swagger.io/v2');
$api_client = new Swagger\Client\ApiClient($config); $api_client = new Swagger\Client\ApiClient($config);
$new_pet_id = 10001; $new_pet_id = 10005;
$new_pet = new Swagger\Client\Model\Pet; $new_pet = new Swagger\Client\Model\Pet;
$new_pet->setId($new_pet_id); $new_pet->setId($new_pet_id);
$new_pet->setName("PHP Unit Test"); $new_pet->setName("PHP Unit Test 2");
$pet_api = new Swagger\Client\Api\PetAPI($api_client); $pet_api = new Swagger\Client\Api\PetAPI($api_client);
// add a new pet (model) // add a new pet (model)
$add_response = $pet_api->addPetUsingByteArray(unpack('C*', $new_pet)); $add_response = $pet_api->addPet($new_pet);
// return nothing (void) // return nothing (void)
$this->assertSame($add_response, NULL); $this->assertSame($add_response, NULL);
// verify added Pet // verify added Pet
$response = $pet_api->getPetById($new_pet_id); $response = $pet_api->getPetById($new_pet_id);
$this->assertSame($response->getId(), $new_pet_id); $this->assertSame($response->getId(), $new_pet_id);
$this->assertSame($response->getName(), 'PHP Unit Test'); $this->assertSame($response->getName(), 'PHP Unit Test 2');
}
// test addPetUsingByteArray and verify by the "id" and "name" of the response
public function testAddPetUsingByteArray()
{
// initialize the API client
$config = (new Swagger\Client\Configuration())->setHost('http://petstore.swagger.io/v2');
$api_client = new Swagger\Client\ApiClient($config);
$new_pet_id = 10005;
$new_pet = new Swagger\Client\Model\Pet;
$new_pet->setId($new_pet_id);
$new_pet->setName("PHP Unit Test 3");
// new tag
$tag= new Swagger\Client\Model\Tag;
$tag->setId($new_pet_id); // use the same id as pet
$tag->setName("test php tag");
// new category
$category = new Swagger\Client\Model\Category;
$category->setId($new_pet_id); // use the same id as pet
$category->setName("test php category");
$new_pet->setTags(array($tag));
$new_pet->setCategory($category);
$pet_api = new Swagger\Client\Api\PetAPI($api_client);
// add a new pet (model)
$object_serializer = new Swagger\Client\ObjectSerializer();
$pet_json_string = json_encode($object_serializer->sanitizeForSerialization($new_pet));
$add_response = $pet_api->addPetUsingByteArray(unpack('C*', $pet_json_string));
// return nothing (void)
$this->assertSame($add_response, NULL);
// verify added Pet
$response = $pet_api->getPetById($new_pet_id);
$this->assertSame($response->getId(), $new_pet_id);
$this->assertSame($response->getName(), 'PHP Unit Test 3');
} }
@ -273,7 +309,8 @@ class PetApiTest extends \PHPUnit_Framework_TestCase
$this->assertInternalType("array", $bytes); $this->assertInternalType("array", $bytes);
$this->assertSame($json['id'], $pet_id); $this->assertSame($json['id'], $pet_id);
$this->assertSame($json['name'], 'PHP Unit Test'); // not testing name as it's tested by addPetUsingByteArray
//$this->assertSame($json['name'], 'PHP Unit Test');
$this->assertSame($json['category']['id'], $pet_id); $this->assertSame($json['category']['id'], $pet_id);
$this->assertSame($json['category']['name'], 'test php category'); $this->assertSame($json['category']['name'], 'test php category');
$this->assertSame($json['tags'][0]['id'], $pet_id); $this->assertSame($json['tags'][0]['id'], $pet_id);