<?php namespace Tests; /** * Pony.fm - A community for pony fan music. * Copyright (C) 2015 Feld0 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ use Illuminate\Foundation\Testing\DatabaseMigrations; use Poniverse\Lib\AccessToken; use App\Models\User; class ApiAuthTest extends TestCase { use DatabaseMigrations; /** * Ensures that when we call the Pony.fm API with a user who has never * logged into Pony.fm before, a Pony.fm account is created for them using * their Poniverse details. */ public function testApiCreatesNewUser() { $user = factory(User::class)->make(); $accessTokenInfo = new AccessToken('nonsense-token'); $accessTokenInfo->setIsActive(true); $accessTokenInfo->setScopes(['basic', 'ponyfm:tracks:upload']); $poniverse = \Mockery::mock('overload:Poniverse\Lib\OAuth2\PoniverseProvider'); $poniverse->shouldReceive('getResourceOwner') ->andReturn(new \Poniverse\Lib\Entity\Poniverse\User([ 'id' => $user->id, 'username' => $user->username, 'display_name' => $user->display_name, 'email' => $user->email, ])); $poniverse->shouldReceive('setAccessToken'); $accessTokenService = \Mockery::mock('overload:Poniverse\Lib\Service\Poniverse\Meta'); $accessTokenService->shouldReceive('introspect') ->andReturn($accessTokenInfo); $this->dontSeeInDatabase('users', ['username' => $user->username]); $this->post('/api/v1/tracks', ['access_token' => 'nonsense-token']); $this->seeInDatabase('users', ['username' => $user->username]); } public function testApiClientIdIsRecordedWhenUploadingTrack() { $user = factory(User::class)->make(); $accessTokenInfo = new AccessToken('nonsense-token'); $accessTokenInfo->setIsActive(true); $accessTokenInfo->setClientId('Unicorns and rainbows'); $accessTokenInfo->setScopes(['basic', 'ponyfm:tracks:upload']); $poniverse = \Mockery::mock('overload:Poniverse\Lib\OAuth2\PoniverseProvider'); $poniverse->shouldReceive('getResourceOwner') ->andReturn(new \Poniverse\Lib\Entity\Poniverse\User([ 'id' => $user->id, 'username' => $user->username, 'display_name' => $user->display_name, 'email' => $user->email, ])); $poniverse->shouldReceive('setAccessToken'); $accessTokenService = \Mockery::mock('overload:Poniverse\Lib\Service\Poniverse\Meta'); $accessTokenService ->shouldReceive('introspect') ->andReturn($accessTokenInfo); $this->callUploadWithParameters(['access_token' => $accessTokenInfo->getToken()]); $this->assertSessionHas('api_client_id', $accessTokenInfo->getClientId()); $this->seeInDatabase('tracks', ['source' => $accessTokenInfo->getClientId()]); } }