mirror of
https://github.com/koel/koel
synced 2024-11-14 00:17:13 +00:00
Refactor tests
This commit is contained in:
parent
9cd1e86533
commit
a8f98b2377
26 changed files with 228 additions and 224 deletions
|
@ -7,7 +7,11 @@ use App\Traits\SupportsDeleteWhereIDsNotIn;
|
||||||
use AWS;
|
use AWS;
|
||||||
use Aws\AwsClient;
|
use Aws\AwsClient;
|
||||||
use Cache;
|
use Cache;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
use Lastfm;
|
use Lastfm;
|
||||||
use YouTube;
|
use YouTube;
|
||||||
|
|
||||||
|
@ -55,16 +59,31 @@ class Song extends Model
|
||||||
*/
|
*/
|
||||||
public $incrementing = false;
|
public $incrementing = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A song belongs to an artist.
|
||||||
|
*
|
||||||
|
* @return BelongsTo
|
||||||
|
*/
|
||||||
public function artist()
|
public function artist()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Artist::class);
|
return $this->belongsTo(Artist::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A song belongs to a album.
|
||||||
|
*
|
||||||
|
* @return BelongsTo
|
||||||
|
*/
|
||||||
public function album()
|
public function album()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Album::class);
|
return $this->belongsTo(Album::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A song can belong to many playlists.
|
||||||
|
*
|
||||||
|
* @return BelongsToMany
|
||||||
|
*/
|
||||||
public function playlists()
|
public function playlists()
|
||||||
{
|
{
|
||||||
return $this->belongsToMany(Playlist::class);
|
return $this->belongsToMany(Playlist::class);
|
||||||
|
@ -130,7 +149,7 @@ class Song extends Model
|
||||||
/*
|
/*
|
||||||
* A collection of the updated songs.
|
* A collection of the updated songs.
|
||||||
*
|
*
|
||||||
* @var \Illuminate\Support\Collection
|
* @var Collection
|
||||||
*/
|
*/
|
||||||
$updatedSongs = collect();
|
$updatedSongs = collect();
|
||||||
|
|
||||||
|
@ -222,10 +241,10 @@ class Song extends Model
|
||||||
/**
|
/**
|
||||||
* Scope a query to only include songs in a given directory.
|
* Scope a query to only include songs in a given directory.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Database\Eloquent\Builder $query
|
* @param Builder $query
|
||||||
* @param string $path Full path of the directory
|
* @param string $path Full path of the directory
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
* @return Builder
|
||||||
*/
|
*/
|
||||||
public function scopeInDirectory($query, $path)
|
public function scopeInDirectory($query, $path)
|
||||||
{
|
{
|
||||||
|
@ -241,7 +260,7 @@ class Song extends Model
|
||||||
* @param User $user
|
* @param User $user
|
||||||
* @param bool $toArray
|
* @param bool $toArray
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Database\Eloquent\Collection|array
|
* @return Collection|array
|
||||||
*/
|
*/
|
||||||
public static function getFavorites(User $user, $toArray = false)
|
public static function getFavorites(User $user, $toArray = false)
|
||||||
{
|
{
|
||||||
|
@ -302,7 +321,7 @@ class Song extends Model
|
||||||
* Sometimes the tags extracted from getID3 are HTML entity encoded.
|
* Sometimes the tags extracted from getID3 are HTML entity encoded.
|
||||||
* This makes sure they are always sane.
|
* This makes sure they are always sane.
|
||||||
*
|
*
|
||||||
* @param $value
|
* @param string $value
|
||||||
*/
|
*/
|
||||||
public function setTitleAttribute($value)
|
public function setTitleAttribute($value)
|
||||||
{
|
{
|
||||||
|
@ -313,7 +332,7 @@ class Song extends Model
|
||||||
* Some songs don't have a title.
|
* Some songs don't have a title.
|
||||||
* Fall back to the file name (without extension) for such.
|
* Fall back to the file name (without extension) for such.
|
||||||
*
|
*
|
||||||
* @param $value
|
* @param string $value
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
@ -353,6 +372,11 @@ class Song extends Model
|
||||||
return compact('bucket', 'key');
|
return compact('bucket', 'key');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the ID of the song when it's converted to string.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function __toString()
|
public function __toString()
|
||||||
{
|
{
|
||||||
return $this->id;
|
return $this->id;
|
||||||
|
|
|
@ -9,13 +9,17 @@
|
||||||
processIsolation="false"
|
processIsolation="false"
|
||||||
stopOnFailure="false">
|
stopOnFailure="false">
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="Feature Tests">
|
<testsuite name="feature">
|
||||||
<directory suffix="Test.php">./tests/Feature</directory>
|
<directory suffix="Test.php">./tests/Feature</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
|
||||||
<testsuite name="Unit Tests">
|
<testsuite name="unit">
|
||||||
<directory suffix="Test.php">./tests/Unit</directory>
|
<directory suffix="Test.php">./tests/Unit</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
|
||||||
|
<testsuite name="integration">
|
||||||
|
<directory suffix="Test.php">./tests/Integration</directory>
|
||||||
|
</testsuite>
|
||||||
</testsuites>
|
</testsuites>
|
||||||
<filter>
|
<filter>
|
||||||
<whitelist processUncoveredFilesFromWhitelist="true">
|
<whitelist processUncoveredFilesFromWhitelist="true">
|
||||||
|
|
|
@ -8,13 +8,9 @@ use App\Models\Playlist;
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Download;
|
use Download;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class DownloadTest extends BrowserKitTestCase
|
class DownloadTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
|
@ -5,13 +5,11 @@ namespace Tests\Feature;
|
||||||
use App\Events\SongLikeToggled;
|
use App\Events\SongLikeToggled;
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class InteractionTest extends BrowserKitTestCase
|
class InteractionTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,17 +14,15 @@ use App\Services\Lastfm;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Psr7\Response;
|
use GuzzleHttp\Psr7\Response;
|
||||||
use Illuminate\Contracts\Auth\Guard;
|
use Illuminate\Contracts\Auth\Guard;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Routing\Redirector;
|
use Illuminate\Routing\Redirector;
|
||||||
use Mockery as m;
|
use Mockery as m;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
use Tymon\JWTAuth\JWTAuth;
|
use Tymon\JWTAuth\JWTAuth;
|
||||||
|
|
||||||
class LastfmTest extends BrowserKitTestCase
|
class LastfmTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function testGetSessionKey()
|
public function testGetSessionKey()
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,14 +9,12 @@ use App\Models\Artist;
|
||||||
use App\Models\File;
|
use App\Models\File;
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Services\Media;
|
use App\Services\Media;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Mockery as m;
|
use Mockery as m;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class MediaTest extends BrowserKitTestCase
|
class MediaTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function testSync()
|
public function testSync()
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,13 +3,12 @@
|
||||||
namespace Tests\Feature\ObjectStorage;
|
namespace Tests\Feature\ObjectStorage;
|
||||||
|
|
||||||
use App\Events\LibraryChanged;
|
use App\Events\LibraryChanged;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Tests\BrowserKitTestCase;
|
use Tests\Feature\TestCase;
|
||||||
|
|
||||||
class S3Test extends BrowserKitTestCase
|
class S3Test extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,13 +5,9 @@ namespace Tests\Feature;
|
||||||
use App\Models\Playlist;
|
use App\Models\Playlist;
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class PlaylistTest extends BrowserKitTestCase
|
class PlaylistTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
|
@ -3,13 +3,11 @@
|
||||||
namespace Tests\Feature;
|
namespace Tests\Feature;
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class ProfileTest extends BrowserKitTestCase
|
class ProfileTest extends TestCase
|
||||||
{
|
{
|
||||||
use WithoutMiddleware, DatabaseTransactions;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function testUpdate()
|
public function testUpdate()
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,14 +5,12 @@ namespace Tests\Feature;
|
||||||
use App\Services\RESTfulService;
|
use App\Services\RESTfulService;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Psr7\Response;
|
use GuzzleHttp\Psr7\Response;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Mockery as m;
|
use Mockery as m;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class RESTfulAPIServiceTest extends BrowserKitTestCase
|
class RESTfulAPIServiceTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function testUrlConstruction()
|
public function testUrlConstruction()
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,14 +4,12 @@ namespace Tests\Feature;
|
||||||
|
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Services\Lastfm;
|
use App\Services\Lastfm;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Mockery as m;
|
use Mockery as m;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class ScrobbleTest extends BrowserKitTestCase
|
class ScrobbleTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function testScrobble()
|
public function testScrobble()
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,14 +4,12 @@ namespace Tests\Feature;
|
||||||
|
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Media;
|
use Media;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class SettingTest extends BrowserKitTestCase
|
class SettingTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function testSetSingleKeyValue()
|
public function testSetSingleKeyValue()
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,17 +7,11 @@ use App\Models\Album;
|
||||||
use App\Models\Artist;
|
use App\Models\Artist;
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Aws\AwsClient;
|
|
||||||
use Cache;
|
|
||||||
use GuzzleHttp\Psr7\Request;
|
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Mockery as m;
|
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class SongTest extends BrowserKitTestCase
|
class SongTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Tests;
|
namespace Tests\Feature;
|
||||||
|
|
||||||
use App\Models\Album;
|
use App\Models\Album;
|
||||||
use App\Models\Artist;
|
use App\Models\Artist;
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use JWTAuth;
|
use JWTAuth;
|
||||||
use Laravel\BrowserKitTesting\TestCase as BaseBrowserKitTestCase;
|
use Laravel\BrowserKitTesting\DatabaseTransactions;
|
||||||
|
use Laravel\BrowserKitTesting\TestCase as BaseTestCase;
|
||||||
|
use Tests\CreatesApplication;
|
||||||
|
|
||||||
abstract class BrowserKitTestCase extends BaseBrowserKitTestCase
|
abstract class TestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
use CreatesApplication;
|
use CreatesApplication, DatabaseTransactions;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
|
@ -3,13 +3,9 @@
|
||||||
namespace Tests\Feature;
|
namespace Tests\Feature;
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
|
|
||||||
class UserTest extends BrowserKitTestCase
|
class UserTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
public function testCreateUser()
|
public function testCreateUser()
|
||||||
{
|
{
|
||||||
// Non-admins can't do shit
|
// Non-admins can't do shit
|
||||||
|
|
|
@ -6,15 +6,13 @@ use App\Models\Song;
|
||||||
use App\Services\YouTube;
|
use App\Services\YouTube;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Psr7\Response;
|
use GuzzleHttp\Psr7\Response;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
||||||
use Mockery as m;
|
use Mockery as m;
|
||||||
use Tests\BrowserKitTestCase;
|
|
||||||
use YouTube as YouTubeFacade;
|
use YouTube as YouTubeFacade;
|
||||||
|
|
||||||
class YouTubeTest extends BrowserKitTestCase
|
class YouTubeTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions, WithoutMiddleware;
|
use WithoutMiddleware;
|
||||||
|
|
||||||
public function testSearch()
|
public function testSearch()
|
||||||
{
|
{
|
||||||
|
|
29
tests/Integration/AlbumTest.php
Normal file
29
tests/Integration/AlbumTest.php
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Integration;
|
||||||
|
|
||||||
|
use App\Models\Album;
|
||||||
|
use Lastfm;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class AlbumTest extends TestCase
|
||||||
|
{
|
||||||
|
/** @test */
|
||||||
|
public function extra_info_can_be_retrieved_for_an_album()
|
||||||
|
{
|
||||||
|
// Given there's an album
|
||||||
|
/** @var Album $album */
|
||||||
|
$album = factory(Album::class)->create();
|
||||||
|
|
||||||
|
// When I get the extra info for the album
|
||||||
|
Lastfm::shouldReceive('getAlbumInfo')
|
||||||
|
->once()
|
||||||
|
->with($album->name, $album->artist->name)
|
||||||
|
->andReturn(['foo' => 'bar']);
|
||||||
|
|
||||||
|
$info = $album->getInfo();
|
||||||
|
|
||||||
|
// Then I receive the extra info
|
||||||
|
$this->assertEquals(['foo' => 'bar'], $info);
|
||||||
|
}
|
||||||
|
}
|
29
tests/Integration/ArtistTest.php
Normal file
29
tests/Integration/ArtistTest.php
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Integration;
|
||||||
|
|
||||||
|
use App\Models\Artist;
|
||||||
|
use Lastfm;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class ArtistTest extends TestCase
|
||||||
|
{
|
||||||
|
/** @test */
|
||||||
|
public function extra_info_can_be_retrieved_for_an_artist()
|
||||||
|
{
|
||||||
|
// Given there's an artist
|
||||||
|
/** @var Artist $artist */
|
||||||
|
$artist = factory(Artist::class)->create();
|
||||||
|
|
||||||
|
// When I get the extra info
|
||||||
|
Lastfm::shouldReceive('getArtistInfo')
|
||||||
|
->once()
|
||||||
|
->with($artist->name)
|
||||||
|
->andReturn(['foo' => 'bar']);
|
||||||
|
|
||||||
|
$info = $artist->getInfo();
|
||||||
|
|
||||||
|
// Then I receive the extra info
|
||||||
|
$this->assertEquals(['foo' => 'bar'], $info);
|
||||||
|
}
|
||||||
|
}
|
101
tests/Integration/SongTest.php
Normal file
101
tests/Integration/SongTest.php
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Integration;
|
||||||
|
|
||||||
|
use App\Models\Song;
|
||||||
|
use App\Models\User;
|
||||||
|
use Aws\AwsClient;
|
||||||
|
use Cache;
|
||||||
|
use Lastfm;
|
||||||
|
use Mockery as m;
|
||||||
|
use Tests\TestCase;
|
||||||
|
use YouTube;
|
||||||
|
|
||||||
|
class SongTest extends TestCase
|
||||||
|
{
|
||||||
|
/** @test */
|
||||||
|
public function it_returns_object_storage_public_url()
|
||||||
|
{
|
||||||
|
// Given there's a song hosted on Amazon S3
|
||||||
|
/** @var Song $song */
|
||||||
|
$song = factory(Song::class)->create(['path' => 's3://foo/bar']);
|
||||||
|
$mockedURL = 'http://aws.com/foo/bar';
|
||||||
|
|
||||||
|
// When I get the song's object storage public URL
|
||||||
|
$client = m::mock(AwsClient::class, [
|
||||||
|
'getCommand' => null,
|
||||||
|
'createPresignedRequest' => m::mock(Request::class, [
|
||||||
|
'getUri' => $mockedURL,
|
||||||
|
]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
Cache::shouldReceive('get')->once()->with("OSUrl/{$song->id}");
|
||||||
|
Cache::shouldReceive('put')->once()->with("OSUrl/{$song->id}", $mockedURL, 60);
|
||||||
|
$url = $song->getObjectStoragePublicUrl($client);
|
||||||
|
|
||||||
|
// Then I should receive the correct S3 public URL
|
||||||
|
$this->assertEquals($mockedURL, $url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_scrobbles_if_the_user_is_connected_to_lastfm()
|
||||||
|
{
|
||||||
|
// Given there's a song
|
||||||
|
/** @var Song $song */
|
||||||
|
$song = factory(Song::class)->create();
|
||||||
|
|
||||||
|
// And a user who's connected to lastfm
|
||||||
|
/** @var User $user */
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$user->setPreference('lastfm_session_key', 'foo');
|
||||||
|
|
||||||
|
// When I call the scrobble method
|
||||||
|
$time = time();
|
||||||
|
Lastfm::shouldReceive('scrobble')
|
||||||
|
->once()
|
||||||
|
->with($song->artist->name, $song->title, $time, $song->album->name, 'foo');
|
||||||
|
|
||||||
|
$song->scrobble($user, $time);
|
||||||
|
|
||||||
|
// Then I see the song is scrobbled
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_does_not_scrobble_if_the_user_is_not_connected_to_lastfm()
|
||||||
|
{
|
||||||
|
// Given there's a song
|
||||||
|
/** @var Song $song */
|
||||||
|
$song = factory(Song::class)->create();
|
||||||
|
|
||||||
|
// And a user who is not connected to lastfm
|
||||||
|
/** @var User $user */
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$user->setPreference('lastfm_session_key', false);
|
||||||
|
|
||||||
|
// When I call the scrobble method
|
||||||
|
Lastfm::shouldNotReceive('scrobble');
|
||||||
|
|
||||||
|
$song->scrobble($user, time());
|
||||||
|
|
||||||
|
// The the song shouldn't be scrobbled
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_gets_related_youtube_videos()
|
||||||
|
{
|
||||||
|
// Given there's a song
|
||||||
|
/** @var Song $song */
|
||||||
|
$song = factory(Song::class)->create();
|
||||||
|
|
||||||
|
// When I get is related YouTube videos
|
||||||
|
YouTube::shouldReceive('searchVideosRelatedToSong')
|
||||||
|
->once()
|
||||||
|
->with($song, 'foo')
|
||||||
|
->andReturn(['bar' => 'baz']);
|
||||||
|
|
||||||
|
$videos = $song->getRelatedYouTubeVideos('foo');
|
||||||
|
|
||||||
|
// Then I see the related YouTube videos returned
|
||||||
|
$this->assertEquals(['bar' => 'baz'], $videos);
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,11 +2,12 @@
|
||||||
|
|
||||||
namespace Tests;
|
namespace Tests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
||||||
|
|
||||||
abstract class TestCase extends BaseTestCase
|
abstract class TestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
use CreatesApplication;
|
use DatabaseTransactions, CreatesApplication;
|
||||||
|
|
||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,17 +2,13 @@
|
||||||
|
|
||||||
namespace Tests\Unit;
|
namespace Tests\Unit;
|
||||||
|
|
||||||
use App\Facades\Lastfm;
|
|
||||||
use App\Models\Album;
|
use App\Models\Album;
|
||||||
use App\Models\Artist;
|
use App\Models\Artist;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use org\bovigo\vfs\vfsStream;
|
use org\bovigo\vfs\vfsStream;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
class AlbumTest extends TestCase
|
class AlbumTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function it_can_be_instantiated()
|
public function it_can_be_instantiated()
|
||||||
{
|
{
|
||||||
|
@ -119,23 +115,4 @@ class AlbumTest extends TestCase
|
||||||
// And the album's cover attribute is updated
|
// And the album's cover attribute is updated
|
||||||
$this->assertEquals('http://localhost/public/img/covers/bar.jpg', Album::find($album->id)->cover);
|
$this->assertEquals('http://localhost/public/img/covers/bar.jpg', Album::find($album->id)->cover);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function extra_info_can_be_retrieved_for_an_album()
|
|
||||||
{
|
|
||||||
// Given there's an album
|
|
||||||
/** @var Album $album */
|
|
||||||
$album = factory(Album::class)->create();
|
|
||||||
|
|
||||||
// When I get the extra info for the album
|
|
||||||
Lastfm::shouldReceive('getAlbumInfo')
|
|
||||||
->once()
|
|
||||||
->with($album->name, $album->artist->name)
|
|
||||||
->andReturn(['foo' => 'bar']);
|
|
||||||
|
|
||||||
$info = $album->getInfo();
|
|
||||||
|
|
||||||
// Then I receive the extra info
|
|
||||||
$this->assertEquals(['foo' => 'bar'], $info);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ namespace Tests\Unit;
|
||||||
|
|
||||||
use App\Models\Artist;
|
use App\Models\Artist;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
use Lastfm;
|
|
||||||
use org\bovigo\vfs\vfsStream;
|
use org\bovigo\vfs\vfsStream;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
@ -91,25 +90,6 @@ class ArtistTest extends TestCase
|
||||||
$this->assertEquals('http://localhost/public/img/artists/foo.jpg', Artist::find($artist->id)->image);
|
$this->assertEquals('http://localhost/public/img/artists/foo.jpg', Artist::find($artist->id)->image);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function extra_info_can_be_retrieved_for_an_artist()
|
|
||||||
{
|
|
||||||
// Given there's an artist
|
|
||||||
/** @var Artist $artist */
|
|
||||||
$artist = factory(Artist::class)->create();
|
|
||||||
|
|
||||||
// When I get the extra info
|
|
||||||
Lastfm::shouldReceive('getArtistInfo')
|
|
||||||
->once()
|
|
||||||
->with($artist->name)
|
|
||||||
->andReturn(['foo' => 'bar']);
|
|
||||||
|
|
||||||
$info = $artist->getInfo();
|
|
||||||
|
|
||||||
// Then I receive the extra info
|
|
||||||
$this->assertEquals(['foo' => 'bar'], $info);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function artists_with_name_in_utf16_encoding_are_retrieved_correctly()
|
public function artists_with_name_in_utf16_encoding_are_retrieved_correctly()
|
||||||
{
|
{
|
||||||
|
@ -122,6 +102,5 @@ class ArtistTest extends TestCase
|
||||||
|
|
||||||
// Then I receive the artist
|
// Then I receive the artist
|
||||||
$this->assertEquals($artist->id, $retrieved->id);
|
$this->assertEquals($artist->id, $retrieved->id);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,12 +9,9 @@ use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Psr7\Response;
|
use GuzzleHttp\Psr7\Response;
|
||||||
use Mockery as m;
|
use Mockery as m;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
|
|
||||||
class LastfmTest extends TestCase
|
class LastfmTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function it_builds_lastfm_compatible_api_parameters()
|
public function it_builds_lastfm_compatible_api_parameters()
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,14 +4,11 @@ namespace Tests\Unit;
|
||||||
|
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use Cache;
|
use Cache;
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use MediaCache;
|
use MediaCache;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
class MediaCacheTest extends TestCase
|
class MediaCacheTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function it_queries_fresh_data_from_database_if_a_cache_is_not_found()
|
public function it_queries_fresh_data_from_database_if_a_cache_is_not_found()
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,13 +4,9 @@ namespace Tests\Unit;
|
||||||
|
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
|
|
||||||
class SettingTest extends TestCase
|
class SettingTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseMigrations, DatabaseTransactions;
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function it_can_be_instantiated()
|
public function it_can_be_instantiated()
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,70 +2,17 @@
|
||||||
|
|
||||||
namespace Tests\Unit;
|
namespace Tests\Unit;
|
||||||
|
|
||||||
use App\Facades\YouTube;
|
|
||||||
use App\Http\Requests\API\ObjectStorage\S3\Request;
|
|
||||||
use App\Models\Song;
|
use App\Models\Song;
|
||||||
use App\Models\User;
|
|
||||||
use Aws\AwsClient;
|
|
||||||
use Cache;
|
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
use Lastfm;
|
|
||||||
use Mockery as m;
|
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
class SongTest extends TestCase
|
class SongTest extends TestCase
|
||||||
{
|
{
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function it_can_be_instantiated()
|
public function it_can_be_instantiated()
|
||||||
{
|
{
|
||||||
$this->assertInstanceOf(Song::class, new Song());
|
$this->assertInstanceOf(Song::class, new Song());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function it_scrobbles_if_the_user_is_connected_to_lastfm()
|
|
||||||
{
|
|
||||||
// Given there's a song
|
|
||||||
/** @var Song $song */
|
|
||||||
$song = factory(Song::class)->create();
|
|
||||||
|
|
||||||
// And a user who's connected to lastfm
|
|
||||||
/** @var User $user */
|
|
||||||
$user = factory(User::class)->create();
|
|
||||||
$user->setPreference('lastfm_session_key', 'foo');
|
|
||||||
|
|
||||||
// When I call the scrobble method
|
|
||||||
$time = time();
|
|
||||||
Lastfm::shouldReceive('scrobble')
|
|
||||||
->once()
|
|
||||||
->with($song->artist->name, $song->title, $time, $song->album->name, 'foo');
|
|
||||||
|
|
||||||
$song->scrobble($user, $time);
|
|
||||||
|
|
||||||
// Then I see the song is scrobbled
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function it_does_not_scrobble_if_the_user_is_not_connected_to_lastfm()
|
|
||||||
{
|
|
||||||
// Given there's a song
|
|
||||||
/** @var Song $song */
|
|
||||||
$song = factory(Song::class)->create();
|
|
||||||
|
|
||||||
// And a user who is not connected to lastfm
|
|
||||||
/** @var User $user */
|
|
||||||
$user = factory(User::class)->create();
|
|
||||||
$user->setPreference('lastfm_session_key', false);
|
|
||||||
|
|
||||||
// When I call the scrobble method
|
|
||||||
Lastfm::shouldNotReceive('scrobble');
|
|
||||||
|
|
||||||
$song->scrobble($user, time());
|
|
||||||
|
|
||||||
// The the song shouldn't be scrobbled
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function it_can_be_retrieved_using_its_path()
|
public function it_can_be_retrieved_using_its_path()
|
||||||
{
|
{
|
||||||
|
@ -79,50 +26,6 @@ class SongTest extends TestCase
|
||||||
// Then the song is retrieved
|
// Then the song is retrieved
|
||||||
$this->assertEquals($song->id, $retrieved->id);
|
$this->assertEquals($song->id, $retrieved->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function it_returns_object_storage_public_url()
|
|
||||||
{
|
|
||||||
// Given there's a song hosted on Amazon S3
|
|
||||||
/** @var Song $song */
|
|
||||||
$song = factory(Song::class)->create(['path' => 's3://foo/bar']);
|
|
||||||
$mockedURL = 'http://aws.com/foo/bar';
|
|
||||||
|
|
||||||
// When I get the song's object storage public URL
|
|
||||||
$client = m::mock(AwsClient::class, [
|
|
||||||
'getCommand' => null,
|
|
||||||
'createPresignedRequest' => m::mock(Request::class, [
|
|
||||||
'getUri' => $mockedURL,
|
|
||||||
]),
|
|
||||||
]);
|
|
||||||
|
|
||||||
Cache::shouldReceive('get')->once()->with("OSUrl/{$song->id}");
|
|
||||||
Cache::shouldReceive('put')->once()->with("OSUrl/{$song->id}", $mockedURL, 60);
|
|
||||||
$url = $song->getObjectStoragePublicUrl($client);
|
|
||||||
|
|
||||||
// Then I should receive the correct S3 public URL
|
|
||||||
$this->assertEquals($mockedURL, $url);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function it_gets_related_youtube_videos()
|
|
||||||
{
|
|
||||||
// Given there's a song
|
|
||||||
/** @var Song $song */
|
|
||||||
$song = factory(Song::class)->create();
|
|
||||||
|
|
||||||
// When I get is related YouTube videos
|
|
||||||
YouTube::shouldReceive('searchVideosRelatedToSong')
|
|
||||||
->once()
|
|
||||||
->with($song, 'foo')
|
|
||||||
->andReturn(['bar' => 'baz']);
|
|
||||||
|
|
||||||
$videos = $song->getRelatedYouTubeVideos('foo');
|
|
||||||
|
|
||||||
// Then I see the related YouTube videos returned
|
|
||||||
$this->assertEquals(['bar' => 'baz'], $videos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function its_lyrics_has_all_new_line_characters_replace_by_br_tags()
|
public function its_lyrics_has_all_new_line_characters_replace_by_br_tags()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue