public function testSearch()
 {
     $searchOptions = (new SearchOptions())->withQuery(new Query('Vindicator'))->withSorting(SortField::MINIMUM_LEVEL());
     $expectedQueryString = 'query=Vindicator&sortorder=minimum_level_asc';
     $expectedUri = (new Uri('items'))->withQuery($expectedQueryString);
     $request = new Request('GET', $expectedUri);
     $response = new Response(200, [], json_encode($this->getSingleItemResultSetNormalized()));
     $this->requestFactory->expects($this->once())->method('create')->with('GET', $expectedUri)->willReturn($request);
     $this->client->expects($this->once())->method('sendRequest')->with($request)->willReturn($response);
     $resultSet = $this->service->search($searchOptions);
     $this->assertEquals($this->getSingleItemResultSet(), $resultSet);
 }
 /**
  * @return array
  */
 public function searchOptionsDataProvider()
 {
     return [[(new SearchOptions())->withPage(new Integer(2)), ['page' => 2]], [(new SearchOptions())->withLimit(new Integer(50)), ['perpage' => 50]], [(new SearchOptions())->withQuery(new Query('Vindicator')), ['query' => 'Vindicator']], [(new SearchOptions())->withSorting(SortField::VALUE(), SortOrder::DESC()), ['sortorder' => 'value_desc']], [(new SearchOptions())->withDetails(), ['moredetailed' => true]], [(new SearchOptions())->withPage(new Integer(2))->withLimit(new Integer(50))->withQuery(new Query('Vindicator'))->withSorting(SortField::DISPLAY_NAME(), SortOrder::DESC())->withDetails(), ['page' => 2, 'perpage' => 50, 'query' => 'Vindicator', 'sortorder' => 'display_name_desc', 'moredetailed' => true]]];
 }
$app->get('/items', function (Request $request, Application $app) {
    $searchOptions = (new SearchOptions())->withLimit(new Integer(10));
    $errors = array();
    foreach ($request->query->all() as $filter => $value) {
        switch ($filter) {
            case 'query':
                if (empty($value)) {
                    $errors[] = 'Please enter (part of) an item name.';
                } else {
                    $query = new Query($value);
                    $searchOptions = $searchOptions->withQuery($query);
                }
                break;
            case 'sortField':
                try {
                    $sortField = SortField::fromNative($value);
                } catch (\InvalidArgumentException $e) {
                    $errors[] = 'Please select a valid sort field.';
                }
                break;
            case 'sortOrder':
                try {
                    $sortOrder = SortOrder::fromNative($value);
                } catch (\InvalidArgumentException $e) {
                    $errors[] = 'Please select a valid sort order.';
                }
                break;
            case 'limit':
                $value = (int) $value;
                if ($value < 1 || $value > 30) {
                    $errors[] = 'Please select an amount of items between 1 and 30.';