koel/tests/Unit/Services/MediaMetadataServiceTest.php

93 lines
2.8 KiB
PHP

<?php
namespace Tests\Unit\Services;
use App\Models\Album;
use App\Models\Artist;
use App\Services\ImageWriter;
use App\Services\MediaMetadataService;
use App\Services\SpotifyService;
use Mockery;
use Mockery\LegacyMockInterface;
use Mockery\MockInterface;
use Tests\TestCase;
class MediaMetadataServiceTest extends TestCase
{
private LegacyMockInterface|SpotifyService|MockInterface $spotifyService;
private LegacyMockInterface|ImageWriter|MockInterface $imageWriter;
private MediaMetadataService $mediaMetadataService;
public function setUp(): void
{
parent::setUp();
$this->spotifyService = Mockery::mock(SpotifyService::class);
$this->imageWriter = Mockery::mock(ImageWriter::class);
$this->mediaMetadataService = new MediaMetadataService($this->spotifyService, $this->imageWriter);
}
public function testTryDownloadAlbumCover(): void
{
/** @var Album $album */
$album = Album::factory()->create(['cover' => '']);
$this->spotifyService
->shouldReceive('tryGetAlbumCover')
->with($album)
->andReturn('/dev/null/cover.jpg');
$this->imageWriter->shouldReceive('write')->twice();
$this->mediaMetadataService->tryDownloadAlbumCover($album);
}
public function testWriteAlbumCover(): void
{
/** @var Album $album */
$album = Album::factory()->create();
$coverPath = '/koel/public/img/album/foo.jpg';
$this->imageWriter
->shouldReceive('write')
->once()
->with('/koel/public/img/album/foo.jpg', 'dummy-src');
$this->imageWriter->shouldReceive('write')->once();
$this->mediaMetadataService->writeAlbumCover($album, 'dummy-src', 'jpg', $coverPath);
self::assertSame(album_cover_url('foo.jpg'), $album->refresh()->cover);
}
public function testTryDownloadArtistImage(): void
{
/** @var Artist $artist */
$artist = Artist::factory()->create(['image' => '']);
$this->spotifyService
->shouldReceive('tryGetArtistImage')
->with($artist)
->andReturn('/dev/null/img.jpg');
$this->imageWriter->shouldReceive('write')->once();
$this->mediaMetadataService->tryDownloadArtistImage($artist);
}
public function testWriteArtistImage(): void
{
/** @var Artist $artist */
$artist = Artist::factory()->create();
$imagePath = '/koel/public/img/artist/foo.jpg';
$this->imageWriter
->shouldReceive('write')
->once()
->with('/koel/public/img/artist/foo.jpg', 'dummy-src');
$this->mediaMetadataService->writeArtistImage($artist, 'dummy-src', 'jpg', $imagePath);
self::assertSame(artist_image_url('foo.jpg'), $artist->refresh()->image);
}
}