public function testExecute() { $builder = new SearchBuilder(); $this->assertEquals(['jql' => null, 'startAt' => null, 'maxResults' => $builder->getLimit(), 'validateQuery' => true, 'fields' => null, 'expand' => null], $builder->execute()); $builder->setJql('project = test')->setPage(5)->setValidateQuery(false)->setFields(['id', 'key', 'assignee'])->setExpandFields(['assignee']); $this->assertEquals(['jql' => 'project = test', 'startAt' => 80, 'maxResults' => $builder->getLimit(), 'validateQuery' => false, 'fields' => ['id', 'key', 'assignee'], 'expand' => ['assignee']], $builder->execute()); }
/** * @todo implement getAllIssues method on client * * {@inheritdoc} */ public function getIssues(array $parameters = [], $page = 1, $perPage = 30) { $jql = []; foreach ($parameters as $key => $value) { if (!$value) { continue; } switch ($key) { case 'number': $jql[] = sprintf('id=%s', $value); break; case 'state': $jql[] = sprintf('status=%s', $value); break; case 'title': $jql[] = sprintf('summary~%s', $value); break; case 'body': $jql[] = sprintf('description~%s', $value); break; case 'user': $jql[] = sprintf('reporter=%s', $value); break; case 'labels': $jql[] = sprintf('labels in (%s)', implode(',', $value)); break; case 'closed_by': case 'assignee': $jql[] = sprintf('assignee=%s', $value); break; case 'milestone': $jql[] = sprintf('versions in (%s)', $value); break; case 'created_at': $nextDay = clone $value; $nextDay->modify('+1 day'); $jql[] = sprintf('created>=%s and created<=%s', $value->format('Y-m-d'), $nextDay->format('Y-m-d')); break; case 'updated_at': $nextDay = clone $value; $nextDay->modify('+1 day'); $jql[] = sprintf('updated>=%s and updated<=%s', $value->format('Y-m-d'), $nextDay->format('Y-m-d')); break; } } $searchBuilder = new SearchBuilder(); $searchBuilder->setJql(implode(' and ', $jql))->setLimit($perPage)->setPage($page); $fetchedIssues = $this->issueClient->search($searchBuilder)->json()['issues']; $issues = []; foreach ($fetchedIssues as $issue) { $issues[] = $this->adaptIssueStructure($issue); } return $issues; }
/** * Search issues by given parameters * * @link https://docs.atlassian.com/jira/REST/latest/#d2e4257 * * @param SearchBuilder $searchBuilder * * @return \GuzzleHttp\Message\Response */ public function search(SearchBuilder $searchBuilder) { return $this->postRequest('search', $searchBuilder->execute()); }
public function testSearch() { $builder = new SearchBuilder(); $builder->setJql('project = PROJ'); $jsonFile = __DIR__ . '/../fixtures/issue/search.json'; $issueClient = $this->getIssueClientMock($this->getJsonResponseMock($jsonFile)); $searchResults = $issueClient->search($builder)->json(); $this->assertArrayHasKey('issues', $searchResults); $this->assertCount(1, $searchResults['issues']); $this->assertArrayHasKey('id', $searchResults['issues'][0]); $this->assertEquals(10001, $searchResults['issues'][0]['id']); }