2015-12-25 03:08:49 +01:00
< ? php
2017-11-28 06:44:31 +01:00
namespace Tests ;
2015-12-25 03:08:49 +01:00
/**
* Pony . fm - A community for pony fan music .
2021-02-14 03:39:15 +01:00
* Copyright ( C ) 2015 - 2017 Feld0 .
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 />.
*/
2021-02-14 03:34:58 +01:00
use App\Models\Album ;
use App\Models\Genre ;
use App\Models\Track ;
use App\Models\User ;
2021-02-14 03:39:15 +01:00
use Carbon\Carbon ;
use Illuminate\Foundation\Testing\DatabaseMigrations ;
use Illuminate\Foundation\Testing\WithoutMiddleware ;
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 ()
{
2021-02-14 20:11:17 +01:00
$user = User :: factory () -> create ();
2015-12-25 03:08:49 +01:00
$this -> actingAs ( $user )
-> post ( '/api/v1/tracks' , [])
-> seeJsonEquals ([
'errors' => [
2021-02-14 03:39:15 +01:00
'track' => [ 'You must upload an audio file!' ],
2015-12-25 03:08:49 +01:00
],
2021-02-14 03:39:15 +01:00
'message' => 'Validation failed' ,
2015-12-25 03:08:49 +01:00
]);
$this -> assertResponseStatus ( 400 );
}
2016-09-30 00:26:31 +02:00
public function testUploadWithFileWithoutAutoPublish ()
{
2015-12-26 12:40:47 +01:00
$this -> callUploadWithParameters ([
2021-02-14 03:39:15 +01:00
'auto_publish' => false ,
2015-12-26 12:40:47 +01:00
]);
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. " ,
2021-02-14 03:39:15 +01:00
'id' => '1' ,
'status_url' => 'http://ponyfm-testing.poni/api/v1/tracks/1/upload-status' ,
'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 ([
2021-02-14 03:39:15 +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' ,
'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 */
2021-02-14 20:11:17 +01:00
$track = Track :: factory () -> make ();
2017-10-29 01:44:08 +02:00
/** @var Genre $genre */
2021-02-14 20:11:17 +01:00
$genre = Genre :: factory () -> make ();
2017-10-29 01:44:08 +02:00
/** @var Album $album */
2021-02-14 20:11:17 +01:00
$album = Album :: factory () -> 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 ,
2021-02-14 03:39:15 +01:00
'metadata' => $track -> metadata ,
2015-12-27 11:36:49 +01:00
], [
2021-02-14 03:39:15 +01:00
'cover' => $this -> getTestFileForUpload ( 'ponyfm-transparent-cover-art.png' ),
2015-12-26 12:40:47 +01:00
]);
$this -> seeInDatabase ( 'genres' , [
2021-02-14 03:39:15 +01:00
'name' => $genre -> name ,
2015-12-26 12:40:47 +01:00
]);
$this -> seeInDatabase ( 'albums' , [
2021-02-14 03:39:15 +01: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 ,
2021-02-14 03:39:15 +01:00
'uploaded_by' => $this -> user -> id ,
2015-12-27 11:36:49 +01:00
]);
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 ,
2021-02-14 03:39:15 +01:00
'released_at' => '2015-01-01 01:01:01' ,
2015-12-26 12:40:47 +01:00
'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 ,
2021-02-14 03:39:15 +01:00
'metadata' => $track -> metadata ,
2015-12-26 12:40:47 +01:00
]);
2015-12-25 03:08:49 +01:00
}
2017-10-29 01:44:08 +02:00
public function testGetTrackDetails ()
{
/** @var Track $track */
2021-02-14 20:11:17 +01:00
$track = Track :: factory () -> create ();
2017-10-29 01:44:08 +02:00
/** @var Genre $genre */
2021-02-14 20:11:17 +01:00
$genre = Genre :: factory () -> create ();
2017-10-29 01:44:08 +02:00
$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' ),
2021-02-14 03:39:15 +01:00
'mime_type' => Track :: $Formats [ 'MP3' ][ 'mime_type' ],
],
],
2017-10-29 01:44:08 +02:00
]);
}
2015-12-25 03:08:49 +01:00
}