koel/tests/Unit/Services/ITunesServiceTest.php

83 lines
2.3 KiB
PHP
Raw Normal View History

2018-08-19 14:40:25 +00:00
<?php
namespace Tests\Unit\Services;
2020-12-22 20:11:22 +00:00
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;
2020-12-22 20:11:22 +00:00
use Mockery;
2018-08-19 14:40:25 +00:00
use Tests\TestCase;
2020-12-22 20:11:22 +00:00
class ITunesServiceTest extends TestCase
2018-08-19 14:40:25 +00:00
{
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]);
2020-12-22 20:11:22 +00:00
/** @var ITunesService $iTunes */
$iTunes = app()->make(ITunesService::class);
2020-09-06 18:21:39 +00:00
self::assertTrue($iTunes->used());
2018-08-19 14:40:25 +00:00
config(['koel.itunes.enabled' => false]);
2020-09-06 18:21:39 +00:00
self::assertFalse($iTunes->used());
2018-08-19 14:40:25 +00:00
}
2019-04-07 21:09:25 +00:00
2020-12-22 20:11:22 +00:00
/** @return array<mixed> */
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)]);
2020-12-22 20:11:22 +00:00
$cache = Mockery::mock(Cache::class);
$logger = Mockery::mock(Logger::class);
2019-04-07 21:09:25 +00:00
2020-12-22 20:11:22 +00:00
$service = new ITunesService($client, $cache, $logger);
2019-04-07 21:09:25 +00:00
$cache
->shouldReceive('remember')
2020-12-22 20:11:22 +00:00
->with($cacheKey, 10080, Mockery::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
}