Skip to content

Commit 713a311

Browse files
committed
Merge branch 'tests'
2 parents 86a3c43 + 8dee1ac commit 713a311

File tree

2 files changed

+127
-1
lines changed

2 files changed

+127
-1
lines changed

src/RequestSigning/RequestSigner.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class RequestSigner
3232
*/
3333
private $tokenSecret;
3434

35-
3635
/**
3736
* @var Signature
3837
*/
@@ -76,6 +75,9 @@ public function withoutAccessToken()
7675
$clone->accessToken = null;
7776
$clone->tokenSecret = null;
7877

78+
$clone->signature = $clone->signature
79+
->withoutTokenSecret();
80+
7981
return $clone;
8082
}
8183

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<?php
2+
3+
namespace ApiClients\Tests\Tools\Psr7\Oauth1\RequestSigning;
4+
5+
use ApiClients\Tools\Psr7\Oauth1\Definition\AccessToken;
6+
use ApiClients\Tools\Psr7\Oauth1\Definition\ConsumerKey;
7+
use ApiClients\Tools\Psr7\Oauth1\Definition\ConsumerSecret;
8+
use ApiClients\Tools\Psr7\Oauth1\Definition\TokenSecret;
9+
use ApiClients\Tools\Psr7\Oauth1\RequestSigning\RequestSigner;
10+
use GuzzleHttp\Psr7\Request;
11+
12+
class RequestSignerTest extends \PHPUnit_Framework_TestCase
13+
{
14+
public function testImmutability()
15+
{
16+
$requestSigner = new RequestSigner(
17+
new ConsumerKey('consumer_key'),
18+
new ConsumerSecret('consumer_secret')
19+
);
20+
$requestSignerWithAccessToken = $requestSigner->withAccessToken(
21+
new AccessToken('access_token'),
22+
new TokenSecret('token_secret')
23+
);
24+
$this->assertNotSame($requestSigner, $requestSignerWithAccessToken);
25+
$requestSignerWithAccessTokenWithoutAccessToken = $requestSignerWithAccessToken->withoutAccessToken();
26+
$this->assertNotSame($requestSigner, $requestSignerWithAccessTokenWithoutAccessToken);
27+
$this->assertNotSame($requestSignerWithAccessToken, $requestSignerWithAccessTokenWithoutAccessToken);
28+
$this->assertEquals($requestSigner, $requestSignerWithAccessTokenWithoutAccessToken);
29+
}
30+
31+
public function testSign()
32+
{
33+
$expectedHeaderParts = [
34+
'oauth_consumer_key' => false,
35+
'oauth_nonce' => false,
36+
'oauth_signature_method' => false,
37+
'oauth_timestamp' => false,
38+
'oauth_version' => false,
39+
'oauth_token' => false,
40+
'oauth_signature' => false,
41+
];
42+
$request = new Request(
43+
'POST',
44+
'httpx://example.com/',
45+
[
46+
'Content-Type' => 'application/x-www-form-urlencoded',
47+
]
48+
);
49+
$requestSigner = (new RequestSigner(
50+
new ConsumerKey('consumer_key'),
51+
new ConsumerSecret('consumer_secret')
52+
))->withAccessToken(
53+
new AccessToken('access_token'),
54+
new TokenSecret('token_secret')
55+
);
56+
57+
$signedRequest = $requestSigner->sign($request);
58+
59+
$this->assertNotSame($request, $signedRequest);
60+
$this->assertTrue($signedRequest->hasHeader('Authorization'));
61+
$headerChunks = explode(' ', current($signedRequest->getHeader('Authorization')));
62+
$this->assertCount(2, $headerChunks);
63+
$this->assertSame('OAuth', $headerChunks[0]);
64+
65+
$headerChunks = explode(',', $headerChunks[1]);
66+
$this->assertCount(count($expectedHeaderParts), $headerChunks);
67+
foreach ($headerChunks as $headerChunk) {
68+
list($key, $value) = explode('=', $headerChunk);
69+
$this->assertTrue(isset($expectedHeaderParts[$key]));
70+
$expectedHeaderParts[$key] = true;
71+
}
72+
73+
foreach ($expectedHeaderParts as $expectedHeaderPart) {
74+
$this->assertInternalType('bool', $expectedHeaderPart);
75+
$this->assertTrue($expectedHeaderPart);
76+
}
77+
}
78+
79+
public function testSignToRequestAuthorization()
80+
{
81+
$callbackUri = 'https://example.com/callback';
82+
$expectedHeaderParts = [
83+
'oauth_consumer_key' => false,
84+
'oauth_nonce' => false,
85+
'oauth_signature_method' => false,
86+
'oauth_timestamp' => false,
87+
'oauth_version' => false,
88+
'oauth_callback' => false,
89+
'oauth_signature' => false,
90+
];
91+
$request = new Request(
92+
'POST',
93+
'httpx://example.com/',
94+
[
95+
'Content-Type' => 'application/x-www-form-urlencoded',
96+
]
97+
);
98+
$requestSigner = new RequestSigner(
99+
new ConsumerKey('consumer_key'),
100+
new ConsumerSecret('consumer_secret')
101+
);
102+
103+
$signedRequest = $requestSigner->signToRequestAuthorization($request, $callbackUri);
104+
105+
$this->assertNotSame($request, $signedRequest);
106+
$this->assertTrue($signedRequest->hasHeader('Authorization'));
107+
$headerChunks = explode(' ', current($signedRequest->getHeader('Authorization')));
108+
$this->assertCount(2, $headerChunks);
109+
$this->assertSame('OAuth', $headerChunks[0]);
110+
111+
$headerChunks = explode(',', $headerChunks[1]);
112+
$this->assertCount(count($expectedHeaderParts), $headerChunks);
113+
foreach ($headerChunks as $headerChunk) {
114+
list($key, $value) = explode('=', $headerChunk);
115+
$this->assertTrue(isset($expectedHeaderParts[$key]));
116+
$expectedHeaderParts[$key] = true;
117+
}
118+
119+
foreach ($expectedHeaderParts as $expectedHeaderPart) {
120+
$this->assertInternalType('bool', $expectedHeaderPart);
121+
$this->assertTrue($expectedHeaderPart);
122+
}
123+
}
124+
}

0 commit comments

Comments
 (0)