Skip to content

Commit 016c93c

Browse files
committed
use OptionsResolver in Users api
1 parent 9b22dd4 commit 016c93c

File tree

3 files changed

+57
-121
lines changed

3 files changed

+57
-121
lines changed

UPGRADE.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,8 @@ Use the `deployKeys`, `deployKey`, `addDeployKey`, `deleteDeployKey`, `removeDep
7979
## `Gitlab\Model\Snippet` changes
8080

8181
* The `expires_at` property have been removed.`
82+
83+
## `Gitlab\Model\Users` changes
84+
85+
* The `all` method now take a single argument which is an associative array of query string parameters.
86+
* The `lookup` and `search` methods have been removed. Use `all` method instead.

lib/Gitlab/Api/Users.php

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,54 @@
33
class Users extends AbstractApi
44
{
55
/**
6-
* @param null|true $active
7-
* @param int $page
8-
* @param int $per_page
9-
* @return mixed
10-
*/
11-
public function all($active = null, $page = 1, $per_page = self::PER_PAGE)
12-
{
13-
return $this->get('users', array(
14-
'active' => $active,
15-
'page' => $page,
16-
'per_page' => $per_page
17-
));
18-
}
19-
20-
/**
21-
* @param string $username
22-
* @return mixed
23-
*/
24-
public function lookup($username)
25-
{
26-
return $this->get('users', array(
27-
'username' => $username
28-
));
29-
}
30-
31-
/**
32-
* @param string $query
33-
* @param null|true $active
34-
* @param int $page
35-
* @param int $per_page
36-
* @return mixed
37-
*/
38-
public function search($query, $active = null, $page = 1, $per_page = self::PER_PAGE)
39-
{
40-
return $this->get('users', array(
41-
'search' => $query,
42-
'active' => $active,
43-
'page' => $page,
44-
'per_page' => $per_page
45-
));
6+
* @param array $parameters (
7+
*
8+
* @var string $search Search for user by email or username.
9+
* @var string $username Lookup for user by username.
10+
* @var bool $external Search for external users only.
11+
* @var string $extern_uid Lookup for users by external uid.
12+
* @var string $provider Lookup for users by provider.
13+
* @var \DateTimeInterface $created_before Return users created before the given time (inclusive).
14+
* @var \DateTimeInterface $created_after Return users created after the given time (inclusive).
15+
* @var bool $active Return only active users. It does not support filtering inactive users.
16+
* @var bool $blocked Return only blocked users. It does not support filtering non-blocked users.
17+
* )
18+
*
19+
* @return mixed
20+
*/
21+
public function all(array $parameters = [])
22+
{
23+
$resolver = $this->createOptionsResolver();
24+
$datetimeNormalizer = function (\DateTimeInterface $value) {
25+
return $value->format('c');
26+
};
27+
28+
$resolver->setDefined('search');
29+
$resolver->setDefined('username');
30+
$resolver->setDefined('external')
31+
->setAllowedTypes('external', 'bool')
32+
;
33+
$resolver->setDefined('extern_uid');
34+
$resolver->setDefined('provider');
35+
$resolver->setDefined('created_before')
36+
->setAllowedTypes('created_before', \DateTimeInterface::class)
37+
->setNormalizer('created_before', $datetimeNormalizer)
38+
;
39+
$resolver->setDefined('created_after')
40+
->setAllowedTypes('created_after', \DateTimeInterface::class)
41+
->setNormalizer('created_after', $datetimeNormalizer)
42+
;
43+
$resolver->setDefined('active')
44+
->setAllowedTypes('active', 'bool')
45+
->setAllowedValues('active', true)
46+
;
47+
$resolver->setDefined('blocked')
48+
->setAllowedTypes('blocked', 'bool')
49+
->setAllowedValues('blocked', true)
50+
;
51+
52+
53+
return $this->get('users', $resolver->resolve($parameters));
4654
}
4755

4856
/**

test/Gitlab/Tests/Api/UsersTest.php

Lines changed: 4 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ public function shouldGetAllUsers()
1717
$api = $this->getApiMock();
1818
$api->expects($this->once())
1919
->method('get')
20-
->with('users', array('active' => null, 'page' => 1, 'per_page' => 10))
20+
->with('users', array())
2121
->will($this->returnValue($expectedArray))
2222
;
2323

24-
$this->assertEquals($expectedArray, $api->all(null, 1, 10));
24+
$this->assertEquals($expectedArray, $api->all());
2525
}
2626

2727
/**
@@ -37,88 +37,11 @@ public function shouldGetActiveUsers()
3737
$api = $this->getApiMock();
3838
$api->expects($this->once())
3939
->method('get')
40-
->with('users', array('active' => true, 'page' => 1, 'per_page' => AbstractApi::PER_PAGE))
41-
->will($this->returnValue($expectedArray))
42-
;
43-
44-
$this->assertEquals($expectedArray, $api->all(true));
45-
}
46-
47-
/**
48-
* @test
49-
*/
50-
public function shouldNotNeedPaginationWhenGettingUsers()
51-
{
52-
$expectedArray = array(
53-
array('id' => 1, 'name' => 'Matt'),
54-
array('id' => 2, 'name' => 'John'),
55-
);
56-
57-
$api = $this->getApiMock();
58-
$api->expects($this->once())
59-
->method('get')
60-
->with('users', array('active' => null, 'page' => 1, 'per_page' => AbstractApi::PER_PAGE))
61-
->will($this->returnValue($expectedArray))
62-
;
63-
64-
$this->assertEquals($expectedArray, $api->all());
65-
}
66-
67-
/**
68-
* @test
69-
*/
70-
public function shouldSearchUsers()
71-
{
72-
$expectedArray = array(
73-
array('id' => 1, 'name' => 'Matt')
74-
);
75-
76-
$api = $this->getApiMock();
77-
$api->expects($this->once())
78-
->method('get')
79-
->with('users', array('search' => 'ma', 'active' => null, 'page' => 1, 'per_page' => AbstractApi::PER_PAGE))
80-
->will($this->returnValue($expectedArray))
81-
;
82-
83-
$this->assertEquals($expectedArray, $api->search('ma'));
84-
}
85-
86-
/**
87-
* @test
88-
*/
89-
public function shouldSearchActiveUsers()
90-
{
91-
$expectedArray = array(
92-
array('id' => 1, 'name' => 'Matt')
93-
);
94-
95-
$api = $this->getApiMock();
96-
$api->expects($this->once())
97-
->method('get')
98-
->with('users', array('search' => 'ma', 'active' => true, 'page' => 1, 'per_page' => AbstractApi::PER_PAGE))
99-
->will($this->returnValue($expectedArray))
100-
;
101-
102-
$this->assertEquals($expectedArray, $api->search('ma', true));
103-
}
104-
105-
/**
106-
* @test
107-
*/
108-
public function shouldSearchActiveUsersWithPagination()
109-
{
110-
$expectedArray = array(
111-
array('id' => 1, 'name' => 'Matt')
112-
);
113-
114-
$api = $this->getApiMock();
115-
$api->expects($this->once())
116-
->method('get')
117-
->with('users', array('search' => 'ma', 'active' => true, 'page' => 2, 'per_page' => 5))
40+
->with('users', array('active' => true))
11841
->will($this->returnValue($expectedArray))
11942
;
12043

121-
$this->assertEquals($expectedArray, $api->search('ma', true, 2, 5));
44+
$this->assertEquals($expectedArray, $api->all(['active' => true]));
12245
}
12346

12447
/**

0 commit comments

Comments
 (0)