2015-12-25 03:08:49 +01:00
< ? php
/**
* Pony . fm - A community for pony fan music .
2017-10-29 01:44:08 +02:00
* Copyright ( C ) 2015 - 2017 Peter Deltchev
2015-12-25 03:08:49 +01:00
*
* 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 />.
*/
2017-10-29 01:44:08 +02:00
use Carbon\Carbon ;
2015-12-25 03:08:49 +01:00
use Illuminate\Foundation\Testing\WithoutMiddleware ;
use Illuminate\Foundation\Testing\DatabaseMigrations ;
2017-10-29 01:44:08 +02:00
use Poniverse\Ponyfm\Models\Album ;
use Poniverse\Ponyfm\Models\Genre ;
2016-01-01 01:12:30 +01:00
use Poniverse\Ponyfm\Models\Track ;
use Poniverse\Ponyfm\Models\User ;
2015-12-25 03:08:49 +01:00
2016-09-30 00:26:31 +02:00
class ApiTest extends TestCase
{
2015-12-25 03:08:49 +01:00
use DatabaseMigrations ;
use WithoutMiddleware ;
2016-09-30 00:26:31 +02:00
public function testUploadWithoutFile ()
{
2015-12-25 03:08:49 +01:00
$user = factory ( User :: class ) -> create ();
$this -> actingAs ( $user )
-> post ( '/api/v1/tracks' , [])
-> seeJsonEquals ([
'errors' => [
'track' => [ 'You must upload an audio file!' ]
],
'message' => 'Validation failed'
]);
$this -> assertResponseStatus ( 400 );
}
2016-09-30 00:26:31 +02:00
public function testUploadWithFileWithoutAutoPublish ()
{
2015-12-26 12:40:47 +01:00
$this -> callUploadWithParameters ([
'auto_publish' => false
]);
2015-12-25 03:08:49 +01:00
2015-12-26 12:40:47 +01:00
$this -> seeJsonEquals ([
'message' => " This track has been accepted for processing! Poll the status_url to know when it's ready to publish. It will be published at the track_url. " ,
'id' => " 1 " ,
'status_url' => " http://ponyfm-testing.poni/api/v1/tracks/1/upload-status " ,
2015-12-27 16:31:54 +01:00
'track_url' => " http://ponyfm-testing.poni/tracks/1-ponyfm-test-file " ,
2015-12-26 12:40:47 +01:00
]);
}
2015-12-25 03:08:49 +01:00
2016-09-30 00:26:31 +02:00
public function testUploadWithFileWithAutoPublish ()
{
2015-12-26 12:40:47 +01:00
$this -> callUploadWithParameters ([]);
2015-12-25 03:08:49 +01:00
$this -> seeJsonEquals ([
2015-12-26 12:40:47 +01:00
'message' => " This track has been accepted for processing! Poll the status_url to know when it has been published. It will be published at the track_url. " ,
'id' => " 1 " ,
'status_url' => " http://ponyfm-testing.poni/api/v1/tracks/1/upload-status " ,
2015-12-27 16:31:54 +01:00
'track_url' => " http://ponyfm-testing.poni/tracks/1-ponyfm-test-file " ,
2015-12-25 03:08:49 +01:00
]);
2015-12-26 12:40:47 +01:00
$this -> visit ( '/tracks/1-ponyfm-test' );
$this -> assertResponseStatus ( 200 );
}
2016-09-30 00:26:31 +02:00
public function testUploadWithOptionalData ()
{
2017-10-29 01:44:08 +02:00
/** @var Track $track */
2015-12-26 12:40:47 +01:00
$track = factory ( Track :: class ) -> make ();
2017-10-29 01:44:08 +02:00
/** @var Genre $genre */
$genre = factory ( Genre :: class ) -> make ();
/** @var Album $album */
$album = factory ( Album :: class ) -> make ();
2015-12-26 12:40:47 +01:00
$this -> callUploadWithParameters ([
'title' => $track -> title ,
'track_type_id' => $track -> track_type_id ,
2017-10-29 01:44:08 +02:00
'genre' => $genre -> name ,
'album' => $album -> title ,
2015-12-26 12:40:47 +01:00
'released_at' => \Carbon\Carbon :: create ( 2015 , 1 , 1 , 1 , 1 , 1 ) -> toIso8601String (),
'description' => $track -> description ,
'lyrics' => $track -> lyrics ,
'is_vocal' => true ,
'is_explicit' => true ,
'is_downloadable' => false ,
'is_listed' => false ,
'metadata' => $track -> metadata
2015-12-27 11:36:49 +01:00
], [
'cover' => $this -> getTestFileForUpload ( 'ponyfm-transparent-cover-art.png' )
2015-12-26 12:40:47 +01:00
]);
$this -> seeInDatabase ( 'genres' , [
2017-10-29 01:44:08 +02:00
'name' => $genre -> name
2015-12-26 12:40:47 +01:00
]);
$this -> seeInDatabase ( 'albums' , [
2017-10-29 01:44:08 +02:00
'title' => $album -> title
2015-12-26 12:40:47 +01:00
]);
2015-12-27 11:36:49 +01:00
$this -> seeInDatabase ( 'images' , [
'id' => 1 ,
'uploaded_by' => $this -> user -> id
]);
2015-12-26 12:40:47 +01:00
$this -> seeInDatabase ( 'tracks' , [
'title' => $track -> title ,
2015-12-27 11:36:49 +01:00
'user_id' => $this -> user -> id ,
2015-12-26 12:40:47 +01:00
'track_type_id' => $track -> track_type_id ,
'released_at' => " 2015-01-01 01:01:01 " ,
'description' => $track -> description ,
'lyrics' => $track -> lyrics ,
'is_vocal' => true ,
'is_explicit' => true ,
'is_downloadable' => false ,
'is_listed' => false ,
2015-12-27 11:36:49 +01:00
'cover_id' => 1 ,
2015-12-26 12:40:47 +01:00
'metadata' => $track -> metadata
]);
2015-12-25 03:08:49 +01:00
}
2017-10-29 01:44:08 +02:00
public function testGetTrackDetails ()
{
/** @var Track $track */
$track = factory ( Track :: class ) -> create ();
/** @var Genre $genre */
$genre = factory ( Genre :: class ) -> create ();
$track -> genre () -> associate ( $genre );
$this -> seeInDatabase ( 'tracks' , [ 'id' => $track -> id ]);
$track -> published_at = Carbon :: now ();
$track -> save ();
$response = $this
-> withSession ([ 'api_client_id' => 'ponyponyponyponypony' ])
-> get ( " /api/v1/tracks/ { $track -> id } " );
$response
-> assertResponseStatus ( 200 )
-> seeJsonSubset ([
'title' => $track -> title ,
'description' => $track -> description ,
'streams' => [
'mp3' => [
'url' => $track -> getStreamUrl ( 'MP3' , 'ponyponyponyponypony' ),
'mime_type' => Track :: $Formats [ 'MP3' ][ 'mime_type' ]
]
]
]);
}
2015-12-25 03:08:49 +01:00
}