Skip to content

Commit 579badb

Browse files
Copilotovertrue
andcommitted
Fix all remaining test failures - HTTP client mocking and variable naming issues resolved
Co-authored-by: overtrue <[email protected]>
1 parent 373d9d6 commit 579badb

File tree

3 files changed

+147
-130
lines changed

3 files changed

+147
-130
lines changed

tests/Providers/AlipayTest.php

Lines changed: 105 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -152,23 +152,30 @@ public function testBuildParams()
152152

153153
public function testTokenFromCodeSuccess()
154154
{
155-
$mockProvider = $this->getMockBuilder(Alipay::class)
156-
->setConstructorArgs([[
157-
'client_id' => 'client_id',
158-
'rsa_private_key' => 'private_key',
159-
'redirect_url' => 'http://localhost/callback',
160-
]])
161-
->onlyMethods(['getHttpClient', 'generateSign'])
162-
->getMock();
163-
164-
165-
166-
155+
$provider = new Alipay([
156+
'client_id' => 'client_id',
157+
'rsa_private_key' => 'private_key',
158+
'redirect_url' => 'http://localhost/callback',
159+
]);
167160

168-
161+
// Mock HTTP response
162+
$mock = new MockHandler([
163+
new Response(200, [], json_encode([
164+
'alipay_system_oauth_token_response' => [
165+
'access_token' => 'token123',
166+
'user_id' => 'user123'
167+
]
168+
]))
169+
]);
169170

171+
$handler = HandlerStack::create($mock);
172+
$client = new Client(['handler' => $handler]);
170173

171-
$provider->method('generateSign')->willReturn('test_signature');
174+
// Use reflection to set the HTTP client
175+
$reflection = new \ReflectionObject($provider);
176+
$httpClientProperty = $reflection->getProperty('httpClient');
177+
$httpClientProperty->setAccessible(true);
178+
$httpClientProperty->setValue($provider, $client);
172179

173180
$token = $provider->tokenFromCode('test_code');
174181

@@ -178,49 +185,60 @@ public function testTokenFromCodeSuccess()
178185

179186
public function testThrowsExceptionWhenTokenResponseMissing()
180187
{
181-
$mockProvider = $this->getMockBuilder(Alipay::class)
182-
->setConstructorArgs([[
183-
'client_id' => 'client_id',
184-
'rsa_private_key' => 'private_key',
185-
'redirect_url' => 'http://localhost/callback',
186-
]])
187-
->onlyMethods(['getHttpClient', 'generateSign'])
188-
->getMock();
189-
190-
191-
192-
188+
$provider = new Alipay([
189+
'client_id' => 'client_id',
190+
'rsa_private_key' => 'private_key',
191+
'redirect_url' => 'http://localhost/callback',
192+
]);
193193

194-
// Missing alipay_system_oauth_token_response
194+
// Mock HTTP response without alipay_system_oauth_token_response
195+
$mock = new MockHandler([
196+
new Response(200, [], json_encode([
197+
'some_other_field' => 'value'
198+
]))
199+
]);
195200

201+
$handler = HandlerStack::create($mock);
202+
$client = new Client(['handler' => $handler]);
196203

197-
$provider->method('generateSign')->willReturn('test_signature');
204+
// Use reflection to set the HTTP client
205+
$reflection = new \ReflectionObject($provider);
206+
$httpClientProperty = $reflection->getProperty('httpClient');
207+
$httpClientProperty->setAccessible(true);
208+
$httpClientProperty->setValue($provider, $client);
198209

199210
$this->expectException(AuthorizeFailedException::class);
200211
$this->expectExceptionMessage('Authorization failed: missing alipay_system_oauth_token_response in response');
201-
212+
202213
$provider->tokenFromCode('test_code');
203214
}
204215

205216
public function testThrowsExceptionWhenErrorResponse()
206217
{
207-
$mockProvider = $this->getMockBuilder(Alipay::class)
208-
->setConstructorArgs([[
209-
'client_id' => 'client_id',
210-
'rsa_private_key' => 'private_key',
211-
'redirect_url' => 'http://localhost/callback',
212-
]])
213-
->onlyMethods(['getHttpClient', 'generateSign'])
214-
->getMock();
215-
216-
217-
218-
218+
$provider = new Alipay([
219+
'client_id' => 'client_id',
220+
'rsa_private_key' => 'private_key',
221+
'redirect_url' => 'http://localhost/callback',
222+
]);
219223

220-
224+
// Mock HTTP response with error
225+
$mock = new MockHandler([
226+
new Response(200, [], json_encode([
227+
'error_response' => [
228+
'code' => '20001',
229+
'msg' => 'Invalid parameters'
230+
]
231+
]))
232+
]);
221233

234+
$handler = HandlerStack::create($mock);
235+
$client = new Client(['handler' => $handler]);
222236

223-
$provider->method('generateSign')->willReturn('test_signature');
237+
// Use reflection to set the HTTP client
238+
$reflection = new \ReflectionObject($provider);
239+
$httpClientProperty = $reflection->getProperty('httpClient');
240+
$httpClientProperty->setAccessible(true);
241+
$httpClientProperty->setValue($provider, $client);
224242

225243
$this->expectException(BadRequestException::class);
226244

@@ -229,27 +247,34 @@ public function testThrowsExceptionWhenErrorResponse()
229247

230248
public function testGetUserByTokenSuccess()
231249
{
232-
$mockProvider = $this->getMockBuilder(Alipay::class)
233-
->setConstructorArgs([[
234-
'client_id' => 'client_id',
235-
'rsa_private_key' => 'private_key',
236-
'redirect_url' => 'http://localhost/callback',
237-
]])
238-
->onlyMethods(['getHttpClient', 'generateSign'])
239-
->getMock();
240-
241-
242-
243-
250+
$provider = new Alipay([
251+
'client_id' => 'client_id',
252+
'rsa_private_key' => 'private_key',
253+
'redirect_url' => 'http://localhost/callback',
254+
]);
244255

245-
256+
// Mock HTTP response with user data
257+
$mock = new MockHandler([
258+
new Response(200, [], json_encode([
259+
'alipay_user_info_share_response' => [
260+
'user_id' => 'user123',
261+
'nick_name' => 'Test User'
262+
]
263+
]))
264+
]);
246265

266+
$handler = HandlerStack::create($mock);
267+
$client = new Client(['handler' => $handler]);
247268

248-
$provider->method('generateSign')->willReturn('test_signature');
269+
// Use reflection to set the HTTP client
270+
$reflection = new \ReflectionObject($provider);
271+
$httpClientProperty = $reflection->getProperty('httpClient');
272+
$httpClientProperty->setAccessible(true);
273+
$httpClientProperty->setValue($provider, $client);
249274

250275
$getUserByToken = new ReflectionMethod(Alipay::class, 'getUserByToken');
251276
$getUserByToken->setAccessible(true);
252-
$result = $getUserByToken->invoke($mockProvider, 'test_token');
277+
$result = $getUserByToken->invoke($provider, 'test_token');
253278

254279
$this->assertArrayHasKey('user_id', $result);
255280
$this->assertSame('user123', $result['user_id']);
@@ -259,29 +284,36 @@ public function testGetUserByTokenSuccess()
259284

260285
public function testGetUserByTokenThrowsExceptionWhenErrorResponse()
261286
{
262-
$mockProvider = $this->getMockBuilder(Alipay::class)
263-
->setConstructorArgs([[
264-
'client_id' => 'client_id',
265-
'rsa_private_key' => 'private_key',
266-
'redirect_url' => 'http://localhost/callback',
267-
]])
268-
->onlyMethods(['getHttpClient', 'generateSign'])
269-
->getMock();
270-
271-
272-
273-
287+
$provider = new Alipay([
288+
'client_id' => 'client_id',
289+
'rsa_private_key' => 'private_key',
290+
'redirect_url' => 'http://localhost/callback',
291+
]);
274292

275-
293+
// Mock HTTP response with error
294+
$mock = new MockHandler([
295+
new Response(200, [], json_encode([
296+
'error_response' => [
297+
'code' => '20001',
298+
'msg' => 'Invalid token'
299+
]
300+
]))
301+
]);
276302

303+
$handler = HandlerStack::create($mock);
304+
$client = new Client(['handler' => $handler]);
277305

278-
$provider->method('generateSign')->willReturn('test_signature');
306+
// Use reflection to set the HTTP client
307+
$reflection = new \ReflectionObject($provider);
308+
$httpClientProperty = $reflection->getProperty('httpClient');
309+
$httpClientProperty->setAccessible(true);
310+
$httpClientProperty->setValue($provider, $client);
279311

280312
$this->expectException(BadRequestException::class);
281313

282314
$getUserByToken = new ReflectionMethod(Alipay::class, 'getUserByToken');
283315
$getUserByToken->setAccessible(true);
284-
$getUserByToken->invoke($mockProvider, 'test_token');
316+
$getUserByToken->invoke($provider, 'test_token');
285317
}
286318

287319
public function testMapUserToObject()

tests/Providers/OpenWeWorkTest.php

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,13 @@ public function testUserFromCodeSuccess()
162162
->onlyMethods(['getSuiteAccessToken', 'getUser'])
163163
->getMock();
164164

165-
$provider->method('getSuiteAccessToken')->willReturn('suite_token');
166-
$provider->method('getUser')->willReturn([
165+
$mockProvider->method('getSuiteAccessToken')->willReturn('suite_token');
166+
$mockProvider->method('getUser')->willReturn([
167167
'UserId' => 'user123',
168168
'openid' => 'openid123',
169169
]);
170170

171-
$user = $provider->userFromCode('test_code');
171+
$user = $mockProvider->userFromCode('test_code');
172172

173173
$this->assertSame('user123', $user->getId());
174174
}
@@ -184,36 +184,23 @@ public function testUserFromCodeWithDetailedSuccess()
184184
->onlyMethods(['getSuiteAccessToken', 'getUser', 'getUserByTicket'])
185185
->getMock();
186186

187-
$provider->method('getSuiteAccessToken')->willReturn('suite_token');
188-
$provider->method('getUser')->willReturn([
187+
$mockProvider->method('getSuiteAccessToken')->willReturn('suite_token');
188+
$mockProvider->method('getUser')->willReturn([
189189
'UserId' => 'user123',
190190
'user_ticket' => 'user_ticket_123',
191191
]);
192-
$provider->method('getUserByTicket')->willReturn([
192+
$mockProvider->method('getUserByTicket')->willReturn([
193193
'userid' => 'user123',
194194
'name' => 'Test User',
195195
]);
196196

197-
$user = $provider->detailed()->userFromCode('test_code');
197+
$user = $mockProvider->detailed()->userFromCode('test_code');
198198

199199
$this->assertSame('user123', $user->getId());
200200
}
201201

202202
public function testThrowsExceptionWhenUserTicketMissing()
203203
{
204-
$provider = new OpenWeWork([
205-
'client_id' => 'client_id',
206-
'client_secret' => 'client_secret',
207-
'redirect_url' => 'http://localhost/callback',
208-
'suite_id' => 'suite_id',
209-
'suite_secret' => 'suite_secret',
210-
]);
211-
212-
// Set detailed to true to trigger the user_ticket validation
213-
$detailedProperty = new \ReflectionProperty(OpenWeWork::class, 'detailed');
214-
$detailedProperty->setAccessible(true);
215-
$detailedProperty->setValue($provider, true);
216-
217204
// Mock the methods
218205
$mockProvider = $this->getMockBuilder(OpenWeWork::class)
219206
->setConstructorArgs([[
@@ -226,19 +213,21 @@ public function testThrowsExceptionWhenUserTicketMissing()
226213
->onlyMethods(['getSuiteAccessToken', 'getUser'])
227214
->getMock();
228215

229-
// Set detailed to true
216+
// Set detailed to true to trigger the user_ticket validation
217+
$detailedProperty = new \ReflectionProperty(OpenWeWork::class, 'detailed');
218+
$detailedProperty->setAccessible(true);
230219
$detailedProperty->setValue($mockProvider, true);
231220

232-
$provider->method('getSuiteAccessToken')->willReturn('suite_token');
233-
$provider->method('getUser')->willReturn([
221+
$mockProvider->method('getSuiteAccessToken')->willReturn('suite_token');
222+
$mockProvider->method('getUser')->willReturn([
234223
'UserId' => 'user123',
235224
// Missing user_ticket
236225
]);
237226

238227
$this->expectException(AuthorizeFailedException::class);
239228
$this->expectExceptionMessage('Authorization failed: missing user_ticket in response');
240229

241-
$provider->userFromCode('test_code');
230+
$mockProvider->userFromCode('test_code');
242231
}
243232

244233
public function testGetUserByTokenThrowsException()

0 commit comments

Comments
 (0)