3
3
namespace Github \Tests ;
4
4
5
5
use Github \Client ;
6
+ use Github \HttpClient \Listener \AuthListener ;
6
7
use Github \Exception \InvalidArgumentException ;
7
8
8
9
/**
@@ -25,67 +26,63 @@ public function shouldNotHaveToPassHttpClientToConstructor()
25
26
/**
26
27
* @test
27
28
*/
28
- public function shouldAuthenticateUsingLoginAndPassword ()
29
+ public function shouldPassHttpClientInterfaceToConstructor ()
29
30
{
30
- $ client = new Client ();
31
- $ client ->authenticate ('login ' , 'password ' , Client::AUTH_HTTP_PASSWORD );
31
+ $ client = new Client ($ this ->getHttpClientMock ());
32
32
33
- $ this ->assertInstanceOf ('Github\HttpClient\HttpClient ' , $ client ->getHttpClient ());
34
- }
35
-
36
- /**
37
- * @test
38
- */
39
- public function shouldAuthenticateUsingHttpToken ()
40
- {
41
- $ client = new Client ();
42
- $ client ->authenticate ('login ' , 'password ' , Client::AUTH_HTTP_TOKEN );
43
-
44
- $ this ->assertInstanceOf ('Github\HttpClient\HttpClient ' , $ client ->getHttpClient ());
33
+ $ this ->assertInstanceOf ('Github\HttpClient\HttpClientInterface ' , $ client ->getHttpClient ());
45
34
}
46
35
47
36
/**
48
37
* @test
38
+ * @dataProvider getAuthenticationData
49
39
*/
50
- public function shouldAuthenticateUsingUrlToken ( )
40
+ public function shouldAuthenticateUsingGivenParameters ( $ login , $ password , $ method )
51
41
{
52
- $ client = new Client ();
53
- $ client ->authenticate ('login ' , 'password ' , Client::AUTH_URL_TOKEN );
42
+ $ httpClient = $ this ->getHttpClientMock (array ('addListener ' ));
43
+ $ httpClient ->expects ($ this ->once ())
44
+ ->method ('addListener ' )
45
+ ->with (new AuthListener ($ method , array ('tokenOrLogin ' => $ login , 'password ' => $ password )));
54
46
55
- $ this ->assertInstanceOf ('Github\HttpClient\HttpClient ' , $ client ->getHttpClient ());
47
+ $ client = new Client ($ httpClient );
48
+ $ client ->authenticate ($ login , $ password , $ method );
56
49
}
57
50
58
- /**
59
- * @test
60
- */
61
- public function shouldAuthenticateUsingUrlClientId ()
51
+ public function getAuthenticationData ()
62
52
{
63
- $ client = new Client ();
64
- $ client ->authenticate ('client_id ' , 'client_secret ' , Client::AUTH_URL_CLIENT_ID );
65
-
66
- $ this ->assertInstanceOf ('Github\HttpClient\HttpClient ' , $ client ->getHttpClient ());
53
+ return array (
54
+ array ('login ' , null , null ),
55
+ array ('login ' , 'password ' , Client::AUTH_HTTP_PASSWORD ),
56
+ array ('token ' , null , Client::AUTH_HTTP_TOKEN ),
57
+ array ('token ' , null , Client::AUTH_URL_TOKEN ),
58
+ array ('client_id ' , 'client_secret ' , Client::AUTH_URL_CLIENT_ID ),
59
+ );
67
60
}
68
61
69
62
/**
70
63
* @test
71
64
*/
72
65
public function shouldClearHeadersLazy ()
73
66
{
74
- $ client = new Client ( );
75
- $ client -> clearHeaders ( );
67
+ $ httpClient = $ this -> getHttpClientMock ( array ( ' clearHeaders ' ) );
68
+ $ httpClient -> expects ( $ this -> once ())-> method ( ' clearHeaders ' );
76
69
77
- $ this ->assertInstanceOf ('Github\HttpClient\HttpClientInterface ' , $ client ->getHttpClient ());
70
+ $ client = new Client ($ httpClient );
71
+ $ client ->clearHeaders ();
78
72
}
79
73
80
74
/**
81
75
* @test
82
76
*/
83
77
public function shouldSetHeadersLaizly ()
84
78
{
85
- $ client = new Client ();
86
- $ client ->setHeaders (array ('header1 ' , 'header2 ' ));
79
+ $ headers = array ('header1 ' , 'header2 ' );
87
80
88
- $ this ->assertInstanceOf ('Github\HttpClient\HttpClientInterface ' , $ client ->getHttpClient ());
81
+ $ httpClient = $ this ->getHttpClientMock ();
82
+ $ httpClient ->expects ($ this ->once ())->method ('setHeaders ' )->with ($ headers );
83
+
84
+ $ client = new Client ($ httpClient );
85
+ $ client ->setHeaders ($ headers );
89
86
}
90
87
91
88
/**
@@ -142,4 +139,14 @@ public function getApiClassesProvider()
142
139
array ('pull_requests ' , 'Github\Api\PullRequest ' ),
143
140
);
144
141
}
142
+
143
+ public function getHttpClientMock (array $ methods = array ())
144
+ {
145
+ $ methods = array_merge (
146
+ array ('get ' , 'post ' , 'patch ' , 'put ' , 'delete ' , 'request ' , 'setOption ' , 'setHeaders ' ),
147
+ $ methods
148
+ );
149
+
150
+ return $ this ->getMock ('Github\HttpClient\HttpClientInterface ' , $ methods );
151
+ }
145
152
}
0 commit comments