2018-08-19 14:40:25 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Tests\Unit\Services;
|
|
|
|
|
|
|
|
use App\Services\iTunesService;
|
2019-04-07 21:09:25 +00:00
|
|
|
use GuzzleHttp\Client;
|
|
|
|
use GuzzleHttp\Handler\MockHandler;
|
|
|
|
use GuzzleHttp\HandlerStack;
|
|
|
|
use GuzzleHttp\Psr7\Response;
|
|
|
|
use Illuminate\Contracts\Cache\Repository as Cache;
|
|
|
|
use Illuminate\Log\Logger;
|
|
|
|
use Mockery as m;
|
2018-08-19 14:40:25 +00:00
|
|
|
use Tests\TestCase;
|
|
|
|
|
|
|
|
class iTunesServiceTest extends TestCase
|
|
|
|
{
|
2019-04-07 21:09:25 +00:00
|
|
|
public function testConfiguration(): void
|
2018-08-19 14:40:25 +00:00
|
|
|
{
|
|
|
|
config(['koel.itunes.enabled' => true]);
|
|
|
|
/** @var iTunesService $iTunes */
|
|
|
|
$iTunes = app()->make(iTunesService::class);
|
|
|
|
$this->assertTrue($iTunes->used());
|
|
|
|
|
|
|
|
config(['koel.itunes.enabled' => false]);
|
|
|
|
$this->assertFalse($iTunes->used());
|
|
|
|
}
|
2019-04-07 21:09:25 +00:00
|
|
|
|
|
|
|
public function provideGetTrackUrlData(): array
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
[
|
|
|
|
'Foo',
|
|
|
|
'Bar',
|
|
|
|
'Baz',
|
|
|
|
'https://itunes.apple.com/bar',
|
|
|
|
'https://itunes.apple.com/bar?at=foo',
|
|
|
|
'2ce68c30758ed9496c72c36ff49c50b2',
|
|
|
|
], [
|
|
|
|
'Foo',
|
|
|
|
'',
|
|
|
|
'Baz',
|
|
|
|
'https://itunes.apple.com/bar?qux=qux',
|
|
|
|
'https://itunes.apple.com/bar?qux=qux&at=foo',
|
|
|
|
'cda57916eb80c2ee79b16e218bdb70d2',
|
|
|
|
],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/** @dataProvider provideGetTrackUrlData */
|
|
|
|
public function testGetTrackUrl(
|
|
|
|
string $term,
|
|
|
|
string $album,
|
|
|
|
string $artist,
|
|
|
|
string $trackViewUrl,
|
|
|
|
string $affiliateUrl,
|
|
|
|
string $cacheKey
|
2019-04-07 21:09:51 +00:00
|
|
|
): void {
|
2019-04-07 21:09:25 +00:00
|
|
|
config(['koel.itunes.affiliate_id' => 'foo']);
|
|
|
|
|
|
|
|
$mock = new MockHandler([
|
|
|
|
new Response(200, [], json_encode([
|
|
|
|
'resultCount' => 1,
|
2019-04-07 21:09:51 +00:00
|
|
|
'results' => [['trackViewUrl' => $trackViewUrl]],
|
2019-04-07 21:09:25 +00:00
|
|
|
])),
|
|
|
|
]);
|
|
|
|
|
|
|
|
$client = new Client(['handler' => HandlerStack::create($mock)]);
|
|
|
|
$cache = m::mock(Cache::class);
|
|
|
|
$logger = m::mock(Logger::class);
|
|
|
|
|
|
|
|
$service = new iTunesService($client, $cache, $logger);
|
|
|
|
|
|
|
|
$cache
|
|
|
|
->shouldReceive('remember')
|
2019-04-07 21:09:51 +00:00
|
|
|
->with($cacheKey, 10080, m::on(static function (callable $generator) use ($affiliateUrl): bool {
|
2019-04-07 21:09:25 +00:00
|
|
|
return $generator() === $affiliateUrl;
|
|
|
|
}));
|
|
|
|
|
|
|
|
$service->getTrackUrl($term, $album, $artist);
|
|
|
|
}
|
2018-08-19 14:40:25 +00:00
|
|
|
}
|