· 7 years ago · Oct 03, 2018, 06:24 AM
1<?php
2
3namespace Tests\Feature;
4
5use App\User;
6use Illuminate\Foundation\Testing\RefreshDatabase;
7use Laravel\Passport\Passport;
8use Tests\TestCase;
9use Illuminate\Support\Facades\DB;
10
11class PassportTest extends TestCase
12{
13 use RefreshDatabase;
14
15 /** @var User $user */
16 private $user;
17
18 protected function setUp()
19 {
20 parent::setUp();
21
22 $this->user = factory(User::class)->create(['password' => \Hash::make('secret')]);
23 $this->artisan('passport:install');
24 Passport::actingAs($this->user, ['*']);
25 }
26
27 /** @test */
28 public function can_get_user_object_using_oauth()
29 {
30 $accessToken = $this->user->createToken('passportToken')->accessToken;
31
32 $response = $this->json('GET', 'api/user', [
33 'headers' => [
34 'Authorization' => sprintf('Bearer %s', $accessToken),
35 ]
36 ]);
37
38 $response->assertSuccessful();
39 }
40
41 public function test_token_fetching()
42 {
43 $this->assertTrue(auth()->check([
44 'email' => $this->user->email,
45 'password' => 'secret',
46 ]));
47 $secret = DB::table('oauth_clients')->where('id', 2)->value('secret');
48 $accessToken = $this->getTokenForUser($this->user, $secret);
49
50 $response = $this->json('GET', 'api/user', [
51 'headers' => [
52 'Authorization' => sprintf('Bearer %s', $accessToken),
53 ]
54 ]);
55
56 $response->assertSuccessful();
57 }
58
59 private function getTokenForUser(User $user, $secret) {
60
61 $postData = [
62 "grant_type" => "password",
63 "client_id" => 2,
64 "client_secret" => $secret,
65 "username" => $user->email,
66 "password" => 'secret',
67 "scope" => ""
68 ];
69
70 $response = $this->json('POST', '/oauth/token', $postData)
71 ->decodeResponseJson();
72
73 return $response['access_token'];
74 }
75}