Skip to content

Commit c9554dd

Browse files
committed
Add ability to specify additional parameters for searchOwned
There is a white list of allowed parameters. Any other parameters will throw an exception Resolves #87
1 parent 377175b commit c9554dd

File tree

2 files changed

+63
-3
lines changed

2 files changed

+63
-3
lines changed

src/Numbers/Client.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,19 +124,34 @@ public function searchAvailable($country, $options = [])
124124
return $this->handleNumberSearchResult($response, null);
125125
}
126126

127-
public function searchOwned($number = null)
127+
public function searchOwned($number = null, $options = [])
128128
{
129-
$queryString = '';
129+
$query = [];
130130
if ($number !== null) {
131131
if($number instanceof Number){
132132
$query = ['pattern' => $number->getId()];
133133
} else {
134134
$query = ['pattern' => $number];
135135
}
136136

137-
$queryString = http_build_query($query);
138137
}
139138

139+
// These are all optional parameters
140+
$possibleParameters = [
141+
'search_pattern',
142+
'size',
143+
'index'
144+
];
145+
146+
foreach ($options as $param => $value) {
147+
if (!in_array($param, $possibleParameters)) {
148+
throw new Exception\Request("Unknown option: '".$param."'");
149+
}
150+
$query[$param] = $value;
151+
}
152+
153+
$queryString = http_build_query($query);
154+
140155
$request = new Request(
141156
\Nexmo\Client::BASE_REST . '/account/numbers?' . $queryString,
142157
'GET',

test/Numbers/ClientTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,51 @@ public function testSearchAvailableReturnsNumberList()
231231
$this->assertSame('14155550101', $numbers[1]->getId());
232232
}
233233

234+
public function testSearchOwnedErrorsOnUnknownSearchParameters()
235+
{
236+
237+
$this->expectException(Exception\Request::class);
238+
$this->expectExceptionMessage("Unknown option: 'foo'");
239+
240+
$this->numberClient->searchOwned('1415550100', [
241+
'foo' => 'bar',
242+
]);
243+
}
244+
245+
public function testSearchOwnedPassesInAllowedAdditionalParameters()
246+
{
247+
$this->nexmoClient->send(Argument::that(function(RequestInterface $request){
248+
$this->assertEquals('/account/numbers', $request->getUri()->getPath());
249+
$this->assertEquals('rest.nexmo.com', $request->getUri()->getHost());
250+
$this->assertEquals('GET', $request->getMethod());
251+
$this->assertEquals('pattern=1415550100&index=1&size=100&search_pattern=0', $request->getUri()->getQuery());
252+
return true;
253+
}))->willReturn($this->getResponse('single'));
254+
255+
$this->numberClient->searchOwned('1415550100', [
256+
'index' => 1,
257+
'size' => '100',
258+
'search_pattern' => 0
259+
]);
260+
}
261+
262+
public function testSearchOwnedReturnsSingleNumber()
263+
{
264+
$this->nexmoClient->send(Argument::that(function(RequestInterface $request){
265+
$this->assertEquals('/account/numbers', $request->getUri()->getPath());
266+
$this->assertEquals('rest.nexmo.com', $request->getUri()->getHost());
267+
$this->assertEquals('GET', $request->getMethod());
268+
return true;
269+
}))->willReturn($this->getResponse('single'));
270+
271+
$numbers = $this->numberClient->searchOwned('1415550100');
272+
273+
$this->assertInternalType('array', $numbers);
274+
$this->assertInstanceOf('Nexmo\Numbers\Number', $numbers[0]);
275+
276+
$this->assertSame('1415550100', $numbers[0]->getId());
277+
}
278+
234279
public function testPurchaseNumberWithNumberObject()
235280
{
236281
$this->nexmoClient->send(Argument::that(function(RequestInterface $request){

0 commit comments

Comments
 (0)