koel/tests/Feature/KoelPlus/DownloadTest.php

47 lines
1.6 KiB
PHP
Raw Normal View History

2024-01-10 23:11:45 +00:00
<?php
namespace Tests\Feature\KoelPlus;
use App\Models\Song;
use App\Services\DownloadService;
2024-01-18 11:13:05 +00:00
use Tests\PlusTestCase;
2024-01-10 23:11:45 +00:00
2024-01-11 12:41:33 +00:00
use function Tests\create_user;
use function Tests\test_path;
2024-01-18 11:13:05 +00:00
class DownloadTest extends PlusTestCase
2024-01-10 23:11:45 +00:00
{
public function testDownloadPolicy(): void
{
2024-01-11 12:41:33 +00:00
$owner = create_user();
2024-01-10 23:11:45 +00:00
$apiToken = $owner->createToken('Koel')->plainTextToken;
// Can't download a private song that doesn't belong to the user
/** @var Song $externalPrivateSong */
$externalPrivateSong = Song::factory()->private()->create();
$this->get("download/songs?songs[]=$externalPrivateSong->id&api_token=" . $apiToken)
->assertForbidden();
// Can download a public song that doesn't belong to the user
/** @var Song $externalPublicSong */
$externalPublicSong = Song::factory()->public()->create();
$downloadService = self::mock(DownloadService::class);
$downloadService->shouldReceive('getDownloadablePath')
->once()
->andReturn(test_path('songs/blank.mp3'));
$this->get("download/songs?songs[]=$externalPublicSong->id&api_token=" . $apiToken)
->assertOk();
// Can download a private song that belongs to the user
/** @var Song $ownSong */
$ownSong = Song::factory()->for($owner, 'owner')->private()->create();
$downloadService->shouldReceive('getDownloadablePath')
->once()
->andReturn(test_path('songs/blank.mp3'));
$this->get("download/songs?songs[]=$ownSong->id&api_token=" . $apiToken)
->assertOk();
}
}