2017-12-09 22:39:34 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Tests\Integration\Services;
|
|
|
|
|
|
|
|
use App\Models\Album;
|
|
|
|
use App\Models\Artist;
|
2018-08-18 13:19:40 +00:00
|
|
|
use App\Services\LastfmService;
|
2017-12-09 22:39:34 +00:00
|
|
|
use GuzzleHttp\Client;
|
|
|
|
use GuzzleHttp\Psr7\Response;
|
2018-08-29 07:05:24 +00:00
|
|
|
use Illuminate\Contracts\Cache\Repository as Cache;
|
2018-08-31 13:47:15 +00:00
|
|
|
use Illuminate\Log\Logger;
|
2018-08-29 07:05:24 +00:00
|
|
|
use Mockery;
|
2017-12-09 22:39:34 +00:00
|
|
|
use Tests\TestCase;
|
|
|
|
|
2018-08-19 11:08:16 +00:00
|
|
|
class LastfmServiceTest extends TestCase
|
2017-12-09 22:39:34 +00:00
|
|
|
{
|
2018-08-31 13:47:15 +00:00
|
|
|
public function testGetArtistInformation(): void
|
2017-12-10 00:23:37 +00:00
|
|
|
{
|
|
|
|
/** @var Artist $artist */
|
2020-11-14 16:57:25 +00:00
|
|
|
$artist = Artist::factory()->make(['name' => 'foo']);
|
2017-12-10 00:23:37 +00:00
|
|
|
|
2018-08-19 11:08:16 +00:00
|
|
|
/** @var Client $client */
|
2018-08-29 07:05:24 +00:00
|
|
|
$client = Mockery::mock(Client::class, [
|
2020-12-22 20:11:22 +00:00
|
|
|
'get' => new Response(200, [], file_get_contents(__DIR__ . '../../../blobs/lastfm/artist.json')),
|
2017-12-10 00:23:37 +00:00
|
|
|
]);
|
|
|
|
|
2018-09-04 06:25:24 +00:00
|
|
|
$api = new LastfmService($client, app(Cache::class), app(Logger::class));
|
|
|
|
$info = $api->getArtistInformation($artist->name);
|
2017-12-10 00:23:37 +00:00
|
|
|
|
2020-09-06 18:21:39 +00:00
|
|
|
self::assertEquals([
|
2020-04-18 14:15:07 +00:00
|
|
|
'url' => 'https://www.last.fm/music/Kamelot',
|
2017-12-10 00:23:37 +00:00
|
|
|
'image' => 'http://foo.bar/extralarge.jpg',
|
|
|
|
'bio' => [
|
|
|
|
'summary' => 'Quisque ut nisi.',
|
|
|
|
'full' => 'Quisque ut nisi. Vestibulum ullamcorper mauris at ligula.',
|
|
|
|
],
|
|
|
|
], $info);
|
|
|
|
|
2020-12-22 23:01:49 +00:00
|
|
|
self::assertNotNull(cache()->get('0aff3bc1259154f0e9db860026cda7a6'));
|
2017-12-10 00:23:37 +00:00
|
|
|
}
|
|
|
|
|
2018-08-31 13:47:15 +00:00
|
|
|
public function testGetArtistInformationForNonExistentArtist(): void
|
2017-12-10 00:23:37 +00:00
|
|
|
{
|
|
|
|
/** @var Artist $artist */
|
2020-11-14 16:57:25 +00:00
|
|
|
$artist = Artist::factory()->make();
|
2017-12-10 00:23:37 +00:00
|
|
|
|
2018-08-19 11:08:16 +00:00
|
|
|
/** @var Client $client */
|
2018-08-29 07:05:24 +00:00
|
|
|
$client = Mockery::mock(Client::class, [
|
2020-12-22 20:11:22 +00:00
|
|
|
'get' => new Response(400, [], file_get_contents(__DIR__ . '../../../blobs/lastfm/artist-notfound.json')),
|
2017-12-10 00:23:37 +00:00
|
|
|
]);
|
|
|
|
|
2018-09-04 06:25:24 +00:00
|
|
|
$api = new LastfmService($client, app(Cache::class), app(Logger::class));
|
|
|
|
|
|
|
|
self::assertNull($api->getArtistInformation($artist->name));
|
2017-12-10 00:23:37 +00:00
|
|
|
}
|
|
|
|
|
2018-08-31 13:47:15 +00:00
|
|
|
public function testGetAlbumInformation(): void
|
2017-12-10 00:23:37 +00:00
|
|
|
{
|
|
|
|
/** @var Album $album */
|
2020-11-14 16:57:25 +00:00
|
|
|
$album = Album::factory()->create([
|
|
|
|
'artist_id' => Artist::factory()->create(['name' => 'bar'])->id,
|
2017-12-10 00:23:37 +00:00
|
|
|
'name' => 'foo',
|
|
|
|
]);
|
|
|
|
|
2018-08-19 11:08:16 +00:00
|
|
|
/** @var Client $client */
|
2018-08-29 07:05:24 +00:00
|
|
|
$client = Mockery::mock(Client::class, [
|
2020-12-22 20:11:22 +00:00
|
|
|
'get' => new Response(200, [], file_get_contents(__DIR__ . '../../../blobs/lastfm/album.json')),
|
2017-12-10 00:23:37 +00:00
|
|
|
]);
|
|
|
|
|
2018-09-04 06:25:24 +00:00
|
|
|
$api = new LastfmService($client, app(Cache::class), app(Logger::class));
|
|
|
|
$info = $api->getAlbumInformation($album->name, $album->artist->name);
|
2017-12-10 00:23:37 +00:00
|
|
|
|
2020-09-06 18:21:39 +00:00
|
|
|
self::assertEquals([
|
2020-04-18 14:15:07 +00:00
|
|
|
'url' => 'https://www.last.fm/music/Kamelot/Epica',
|
2017-12-10 00:23:37 +00:00
|
|
|
'image' => 'http://foo.bar/extralarge.jpg',
|
|
|
|
'tracks' => [
|
|
|
|
[
|
|
|
|
'title' => 'Track 1',
|
|
|
|
'url' => 'http://foo/track1',
|
|
|
|
'length' => 100,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'title' => 'Track 2',
|
|
|
|
'url' => 'http://foo/track2',
|
|
|
|
'length' => 150,
|
|
|
|
],
|
|
|
|
],
|
|
|
|
'wiki' => [
|
|
|
|
'summary' => 'Quisque ut nisi.',
|
|
|
|
'full' => 'Quisque ut nisi. Vestibulum ullamcorper mauris at ligula.',
|
|
|
|
],
|
|
|
|
], $info);
|
|
|
|
|
2020-12-22 23:01:49 +00:00
|
|
|
self::assertNotNull(cache()->get('fca889d13b3222589d7d020669cc5a38'));
|
2017-12-10 00:23:37 +00:00
|
|
|
}
|
|
|
|
|
2018-08-31 13:47:15 +00:00
|
|
|
public function testGetAlbumInformationForNonExistentAlbum(): void
|
2017-12-10 00:23:37 +00:00
|
|
|
{
|
2018-08-19 11:08:16 +00:00
|
|
|
/** @var Album $album */
|
2020-11-14 16:57:25 +00:00
|
|
|
$album = Album::factory()->create();
|
2017-12-10 00:23:37 +00:00
|
|
|
|
2018-08-19 11:08:16 +00:00
|
|
|
/** @var Client $client */
|
2018-08-29 07:05:24 +00:00
|
|
|
$client = Mockery::mock(Client::class, [
|
2020-12-22 20:11:22 +00:00
|
|
|
'get' => new Response(400, [], file_get_contents(__DIR__ . '../../../blobs/lastfm/album-notfound.json')),
|
2017-12-10 00:23:37 +00:00
|
|
|
]);
|
|
|
|
|
2018-09-04 06:25:24 +00:00
|
|
|
$api = new LastfmService($client, app(Cache::class), app(Logger::class));
|
2017-12-10 00:23:37 +00:00
|
|
|
|
2018-08-31 13:47:15 +00:00
|
|
|
self::assertNull($api->getAlbumInformation($album->name, $album->artist->name));
|
2017-12-10 00:23:37 +00:00
|
|
|
}
|
2017-12-09 22:39:34 +00:00
|
|
|
}
|