diff --git a/src/Parse/ParseQuery.php b/src/Parse/ParseQuery.php index b0b35e09..bd90b3e6 100755 --- a/src/Parse/ParseQuery.php +++ b/src/Parse/ParseQuery.php @@ -610,10 +610,11 @@ public function aggregate($pipeline) * Execute a find query and return the results. * * @param bool $useMasterKey + * @param bool $decodeObjects If set to false, will not return raw data instead of ParseObject instances * * @return ParseObject[] */ - public function find($useMasterKey = false) + public function find($useMasterKey = false, $decodeObjects = true) { $sessionToken = null; if (ParseUser::getCurrentUser()) { @@ -627,6 +628,13 @@ public function find($useMasterKey = false) null, $useMasterKey ); + if (!$decodeObjects) { + if (array_key_exists('results', $result)) { + return $result['results']; + } else { + return []; + } + } $output = []; foreach ($result['results'] as $row) { $obj = ParseObject::create($this->className, $row['objectId']); diff --git a/tests/Parse/Helper.php b/tests/Parse/Helper.php index 56333238..e85cac23 100644 --- a/tests/Parse/Helper.php +++ b/tests/Parse/Helper.php @@ -52,7 +52,7 @@ public static function setUp() self::setHttpClient(); } - public static function setHttpClient() + public static function setHttpClient($httpClient = null) { // // Set a curl http client to run primary tests under @@ -61,6 +61,9 @@ public static function setHttpClient() // ParseCurlHttpClient // ParseStreamHttpClient // + if ($httpClient) { + return ParseClient::setHttpClient($httpClient); + } global $USE_CLIENT_STREAM; diff --git a/tests/Parse/HttpClientMock.php b/tests/Parse/HttpClientMock.php new file mode 100644 index 00000000..dc24e6ce --- /dev/null +++ b/tests/Parse/HttpClientMock.php @@ -0,0 +1,23 @@ +response; + } + + public function setResponse($resp) + { + $this->response = $resp; + } +} diff --git a/tests/Parse/ParseQueryTest.php b/tests/Parse/ParseQueryTest.php index 40f8bbba..8f42b6a0 100644 --- a/tests/Parse/ParseQueryTest.php +++ b/tests/Parse/ParseQueryTest.php @@ -2365,6 +2365,54 @@ public function testAndQueriesVaryingClasses() ]); } + public function testQueryFindEncoded() + { + $obj = new ParseObject('TestObject'); + $obj->set('name', 'John'); + $obj->set('country', 'US'); + $obj->save(); + + $obj = new ParseObject('TestObject'); + $obj->set('name', 'Bob'); + $obj->set('country', 'US'); + $obj->save(); + + $obj = new ParseObject('TestObject'); + $obj->set('name', 'Joel'); + $obj->set('country', 'CA'); + $obj->save(); + + $query = new ParseQuery('TestObject'); + $query->ascending(['country', 'name']); + $results = $query->find(false, false); + + $this->assertEquals(3, count($results)); + + $this->assertEquals('Joel', $results[0]['name']); + $this->assertEquals('Bob', $results[1]['name']); + $this->assertEquals('John', $results[2]['name']); + } + + public function testQueryFindEncodedInvalidResponse() + { + $obj = new ParseObject('TestObject'); + $obj->set('name', 'John'); + $obj->set('country', 'US'); + $obj->save(); + + $httpClient = new HttpClientMock(); + $httpClient->setResponse('{}'); + Helper::setHttpClient($httpClient); + + $query = new ParseQuery('TestObject'); + $results = $query->find(false, false); + + $this->assertEquals(0, count($results)); + + // Reset HttpClient + Helper::setUp(); + } + /** * @group query-set-conditions */