22
33namespace webignition \Guzzle \Middleware \HttpAuthentication \Tests ;
44
5+ use Mockery \MockInterface ;
56use Psr \Http \Message \RequestInterface ;
67use webignition \Guzzle \Middleware \HttpAuthentication \HttpAuthenticationCredentials ;
78use webignition \Guzzle \Middleware \HttpAuthentication \HttpAuthenticationHeader ;
@@ -41,12 +42,7 @@ function ($returnedRequest, $returnedOptions) use ($request, $options) {
4142
4243 public function testInvokeCredentialsInvalidForRequest ()
4344 {
44- $ request = \Mockery::mock (RequestInterface::class);
45-
46- $ request
47- ->shouldReceive ('getHeaderLine ' )
48- ->with ('host ' )
49- ->andReturn ('example.com ' );
45+ $ request = $ this ->createOriginalRequest ();
5046 $ options = [];
5147
5248 $ credentials = new HttpAuthenticationCredentials ('username ' , 'password ' , 'example.org ' );
@@ -62,34 +58,89 @@ function ($returnedRequest, $returnedOptions) use ($request, $options) {
6258 $ returnedFunction ($ request , $ options );
6359 }
6460
65- public function testInvokeCredentialsValidForRequest ()
61+ public function testInvokeValidCredentialsAppliedToAllRequests ()
6662 {
67- $ modifiedRequest = \Mockery::mock (RequestInterface::class);
68-
69- $ request = \Mockery::mock (RequestInterface::class);
63+ $ credentials = new HttpAuthenticationCredentials ('username ' , 'password ' , 'example.com ' );
64+ $ this ->httpAuthenticationMiddleware ->setHttpAuthenticationCredentials ($ credentials );
7065
71- $ request
72- ->shouldReceive ('getHeaderLine ' )
73- ->with ('host ' )
74- ->andReturn ('example.com ' );
66+ $ requestCount = 3 ;
7567
76- $ request
68+ $ modifiedRequest = \Mockery::mock (RequestInterface::class);
69+ $ originalRequest = $ this ->createOriginalRequest ();
70+ $ originalRequest
7771 ->shouldReceive ('withHeader ' )
7872 ->with (HttpAuthenticationHeader::NAME , 'Basic dXNlcm5hbWU6cGFzc3dvcmQ= ' )
7973 ->andReturn ($ modifiedRequest );
8074
81- $ options = [];
75+ for ($ requestIndex = 0 ; $ requestIndex < $ requestCount ; $ requestIndex ++) {
76+ $ options = [];
77+
78+ $ returnedFunction = $ this ->httpAuthenticationMiddleware ->__invoke (
79+ function ($ returnedRequest , $ returnedOptions ) use ($ modifiedRequest , $ options ) {
80+ $ this ->assertEquals ($ modifiedRequest , $ returnedRequest );
81+ $ this ->assertEquals ($ options , $ returnedOptions );
82+ }
83+ );
8284
85+ $ returnedFunction ($ originalRequest , $ options );
86+ }
87+ }
88+
89+ public function testInvokeValidCredentialsAppliedToFirstRequestOnly ()
90+ {
8391 $ credentials = new HttpAuthenticationCredentials ('username ' , 'password ' , 'example.com ' );
8492 $ this ->httpAuthenticationMiddleware ->setHttpAuthenticationCredentials ($ credentials );
93+ $ this ->httpAuthenticationMiddleware ->setIsSingleUse (true );
8594
86- $ returnedFunction = $ this ->httpAuthenticationMiddleware ->__invoke (
87- function ($ returnedRequest , $ returnedOptions ) use ($ modifiedRequest , $ options ) {
88- $ this ->assertEquals ($ modifiedRequest , $ returnedRequest );
89- $ this ->assertEquals ($ options , $ returnedOptions );
95+ $ requestCount = 3 ;
96+ $ modifiedRequest = \Mockery::mock (RequestInterface::class);
97+ $ originalRequest = $ this ->createOriginalRequest ();
98+
99+ for ($ requestIndex = 0 ; $ requestIndex < $ requestCount ; $ requestIndex ++) {
100+ if ($ requestIndex === 0 ) {
101+ $ originalRequest
102+ ->shouldReceive ('withHeader ' )
103+ ->with (HttpAuthenticationHeader::NAME , 'Basic dXNlcm5hbWU6cGFzc3dvcmQ= ' )
104+ ->andReturn ($ modifiedRequest );
90105 }
91- );
92106
93- $ returnedFunction ($ request , $ options );
107+ $ options = [];
108+
109+ $ returnedFunction = $ this ->httpAuthenticationMiddleware ->__invoke (
110+ function (
111+ $ returnedRequest ,
112+ $ returnedOptions
113+ ) use (
114+ $ originalRequest ,
115+ $ modifiedRequest ,
116+ $ options ,
117+ $ requestIndex
118+ ) {
119+ if ($ requestIndex === 0 ) {
120+ $ this ->assertEquals ($ modifiedRequest , $ returnedRequest );
121+ } else {
122+ $ this ->assertEquals ($ originalRequest , $ returnedRequest );
123+ }
124+
125+ $ this ->assertEquals ($ options , $ returnedOptions );
126+ }
127+ );
128+
129+ $ returnedFunction ($ originalRequest , $ options );
130+ }
131+ }
132+
133+ /**
134+ * @return MockInterface|RequestInterface
135+ */
136+ private function createOriginalRequest ()
137+ {
138+ $ request = \Mockery::mock (RequestInterface::class);
139+ $ request
140+ ->shouldReceive ('getHeaderLine ' )
141+ ->with ('host ' )
142+ ->andReturn ('example.com ' );
143+
144+ return $ request ;
94145 }
95146}
0 commit comments