public function testGeneratesCodeWithScope()
 {
     $controller = new Controller();
     $request = new Request(['response_type' => 'device_code', 'client_id' => 'x', 'scope' => 'user']);
     $response = new Response();
     $response = $controller->generate_code($request, $response);
     $data = json_decode($response->getContent());
     # Make sure there's no error
     $this->assertObjectNotHasAttribute('error', $data);
     # Check that the info is cached against the user code
     $cache = Cache::get($data->user_code);
     $this->assertNotNull($cache);
     $this->assertEquals($cache->client_id, 'x');
     $this->assertEquals($cache->device_code, $data->device_code);
     $this->assertEquals($cache->scope, 'user');
 }
 public function testRedirectsToAuthServerWithScopeGivenCode()
 {
     $controller = new Controller();
     # First generate a code
     $request = new Request(['response_type' => 'device_code', 'client_id' => 'x', 'scope' => 'foo']);
     $response = new Response();
     $response = $controller->generate_code($request, $response);
     $data = json_decode($response->getContent());
     $request = new Request(['code' => $data->user_code]);
     $response = new Response();
     $response = $controller->verify_code($request, $response);
     $responseString = $response->__toString();
     preg_match('/Location:\\s+([^\\s]+)/', $responseString, $location);
     $authURL = parse_url($location[1]);
     parse_str($authURL['query'], $params);
     $this->assertEquals('code', $params['response_type']);
     $this->assertEquals('x', $params['client_id']);
     $this->assertEquals('foo', $params['scope']);
     $this->assertEquals(Config::$baseURL . '/auth/redirect', $params['redirect_uri']);
     $this->assertNotEmpty($params['state']);
 }
 public function testAccessTokenGranted()
 {
     # obtain a device code
     $controller = new Controller();
     $response = new Response();
     $request = new Request(['response_type' => 'device_code', 'client_id' => 'x']);
     $response_data = $controller->generate_code($request, $response);
     $data = json_decode($response_data->getContent());
     $this->assertObjectNotHasAttribute('error', $data);
     $device_code = $data->device_code;
     # simulate the access token being granted
     Cache::set($device_code, ['status' => 'complete', 'token_response' => ['access_token' => 'abc123', 'expires_in' => 600, 'custom' => 'foo']]);
     # check the status of the device code
     $request = new Request(['grant_type' => 'authorization_code', 'client_id' => 'x', 'code' => $device_code]);
     $response_data = $controller->access_token($request, $response);
     $data = json_decode($response_data->getContent());
     $this->assertObjectNotHasAttribute('error', $data);
     $this->assertEquals('abc123', $data->access_token);
     $this->assertEquals(600, $data->expires_in);
     $this->assertEquals('foo', $data->custom);
 }