mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-28 17:01:16 +00:00
225 lines
7.6 KiB
PHP
225 lines
7.6 KiB
PHP
<?php
|
|
|
|
namespace Tests\Integration;
|
|
|
|
use App\Services\ItunesService;
|
|
use Tests\TestCase;
|
|
|
|
/**
|
|
* Integration tests for the iTunes API Service.
|
|
* These tests make real API calls to iTunes to verify the implementation works.
|
|
* Note: Movie support has been removed due to API issues.
|
|
*
|
|
* Run with: php artisan test --filter=ItunesServiceIntegrationTest
|
|
*/
|
|
class ItunesServiceIntegrationTest extends TestCase
|
|
{
|
|
protected ItunesService $itunes;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$this->itunes = new ItunesService;
|
|
}
|
|
|
|
// ==========================================
|
|
// MUSIC TESTS
|
|
// ==========================================
|
|
|
|
/**
|
|
* Test searching for music albums and ebooks (the two supported media types).
|
|
*/
|
|
public function test_supported_media_types_work(): void
|
|
{
|
|
// Test Music Album
|
|
$album = $this->itunes->findAlbum('Abbey Road Beatles');
|
|
$this->assertNotNull($album, 'Music album search failed');
|
|
$this->assertNotEmpty($album['name'], 'Album name is empty');
|
|
$this->assertNotEmpty($album['artist'], 'Album artist is empty');
|
|
$this->assertNotEmpty($album['cover'], 'Album cover is empty');
|
|
$this->assertStringContainsString('800x800', $album['cover'], 'Album cover should be high resolution');
|
|
|
|
fwrite(STDERR, "\n[MUSIC] Found: {$album['name']} by {$album['artist']}\n");
|
|
fwrite(STDERR, " Genre: {$album['genre']}\n");
|
|
fwrite(STDERR, " Cover: Yes (800x800)\n");
|
|
|
|
// Test Ebook
|
|
$book = $this->itunes->findEbook('Harry Potter');
|
|
$this->assertNotNull($book, 'Ebook search failed');
|
|
$this->assertNotEmpty($book['name'], 'Book name is empty');
|
|
$this->assertNotEmpty($book['author'], 'Book author is empty');
|
|
|
|
fwrite(STDERR, "\n[EBOOK] Found: {$book['name']} by {$book['author']}\n");
|
|
fwrite(STDERR, " Genre: {$book['genre']}\n");
|
|
fwrite(STDERR, ' Cover: '.(! empty($book['cover']) ? 'Yes' : 'No')."\n");
|
|
}
|
|
|
|
/**
|
|
* Test normalized album data structure.
|
|
*/
|
|
public function test_album_has_correct_structure(): void
|
|
{
|
|
$album = $this->itunes->findAlbum('Dark Side of the Moon Pink Floyd');
|
|
|
|
$this->assertNotNull($album);
|
|
$this->assertArrayHasKey('id', $album);
|
|
$this->assertArrayHasKey('name', $album);
|
|
$this->assertArrayHasKey('artist', $album);
|
|
$this->assertArrayHasKey('genre', $album);
|
|
$this->assertArrayHasKey('release_date', $album);
|
|
$this->assertArrayHasKey('cover', $album);
|
|
$this->assertArrayHasKey('store_url', $album);
|
|
$this->assertArrayHasKey('track_count', $album);
|
|
}
|
|
|
|
/**
|
|
* Test normalized ebook data structure.
|
|
*/
|
|
public function test_ebook_has_correct_structure(): void
|
|
{
|
|
$book = $this->itunes->findEbook('1984 George Orwell');
|
|
|
|
$this->assertNotNull($book);
|
|
$this->assertArrayHasKey('id', $book);
|
|
$this->assertArrayHasKey('name', $book);
|
|
$this->assertArrayHasKey('author', $book);
|
|
$this->assertArrayHasKey('genre', $book);
|
|
$this->assertArrayHasKey('genres', $book);
|
|
$this->assertArrayHasKey('release_date', $book);
|
|
$this->assertArrayHasKey('description', $book);
|
|
$this->assertArrayHasKey('cover', $book);
|
|
}
|
|
|
|
/**
|
|
* Test empty search term handling.
|
|
*/
|
|
public function test_empty_search_returns_null(): void
|
|
{
|
|
$this->assertNull($this->itunes->searchAlbums(''));
|
|
$this->assertNull($this->itunes->searchAlbums(' '));
|
|
$this->assertNull($this->itunes->searchEbooks(''));
|
|
}
|
|
|
|
/**
|
|
* Test non-existent search returns empty array.
|
|
*/
|
|
public function test_nonexistent_search_returns_empty_array(): void
|
|
{
|
|
$results = $this->itunes->searchAlbums('xyznonexistentalbumzzz123456789');
|
|
|
|
$this->assertIsArray($results);
|
|
$this->assertEmpty($results);
|
|
}
|
|
|
|
/**
|
|
* Test lookup by ID works.
|
|
*/
|
|
public function test_lookup_by_id(): void
|
|
{
|
|
// First find an album to get an ID
|
|
$album = $this->itunes->findAlbum('Thriller Michael Jackson');
|
|
$this->assertNotNull($album);
|
|
$this->assertNotNull($album['id']);
|
|
|
|
// Now lookup by ID
|
|
$result = $this->itunes->lookupById($album['id']);
|
|
|
|
$this->assertNotNull($result);
|
|
$this->assertEquals($album['id'], $result['collectionId']);
|
|
}
|
|
|
|
/**
|
|
* Test track search.
|
|
*/
|
|
public function test_track_search(): void
|
|
{
|
|
$track = $this->itunes->findTrack('Bohemian Rhapsody Queen');
|
|
|
|
$this->assertNotNull($track);
|
|
$this->assertArrayHasKey('name', $track);
|
|
$this->assertArrayHasKey('artist', $track);
|
|
$this->assertArrayHasKey('album', $track);
|
|
$this->assertArrayHasKey('duration_ms', $track);
|
|
|
|
fwrite(STDERR, "\n[TRACK] Found: {$track['name']} by {$track['artist']}\n");
|
|
}
|
|
|
|
/**
|
|
* Test audiobook search.
|
|
*/
|
|
public function test_audiobook_search(): void
|
|
{
|
|
$results = $this->itunes->searchAudiobooks('The Hobbit');
|
|
|
|
$this->assertNotNull($results);
|
|
$this->assertIsArray($results);
|
|
$this->assertNotEmpty($results);
|
|
}
|
|
|
|
/**
|
|
* Test country setting.
|
|
*/
|
|
public function test_country_setting(): void
|
|
{
|
|
$ukResults = $this->itunes->country('GB')->searchAlbums('Adele');
|
|
|
|
$this->assertNotNull($ukResults);
|
|
$this->assertNotEmpty($ukResults);
|
|
}
|
|
|
|
/**
|
|
* Test limit setting.
|
|
*/
|
|
public function test_limit_setting(): void
|
|
{
|
|
$results = $this->itunes->limit(5)->searchAlbums('Rock');
|
|
|
|
$this->assertNotNull($results);
|
|
$this->assertLessThanOrEqual(5, count($results));
|
|
}
|
|
|
|
/**
|
|
* Comprehensive output test - outputs all data for manual verification.
|
|
*/
|
|
public function test_comprehensive_data_output(): void
|
|
{
|
|
fwrite(STDERR, "\n\n========================================\n");
|
|
fwrite(STDERR, "ITUNES SERVICE - MUSIC & EBOOK TEST\n");
|
|
fwrite(STDERR, "========================================\n");
|
|
|
|
// Music
|
|
$album = $this->itunes->findAlbum('Back in Black AC/DC');
|
|
if ($album) {
|
|
fwrite(STDERR, "\n--- MUSIC ALBUM ---\n");
|
|
fwrite(STDERR, "Name: {$album['name']}\n");
|
|
fwrite(STDERR, "Artist: {$album['artist']}\n");
|
|
fwrite(STDERR, "ID: {$album['id']}\n");
|
|
fwrite(STDERR, "Genre: {$album['genre']}\n");
|
|
fwrite(STDERR, "Release: {$album['release_date']}\n");
|
|
fwrite(STDERR, "Tracks: {$album['track_count']}\n");
|
|
fwrite(STDERR, 'Cover: '.substr($album['cover'], 0, 60)."...\n");
|
|
}
|
|
|
|
// Book
|
|
$book = $this->itunes->findEbook('To Kill a Mockingbird Harper Lee');
|
|
if ($book) {
|
|
fwrite(STDERR, "\n--- EBOOK ---\n");
|
|
fwrite(STDERR, "Name: {$book['name']}\n");
|
|
fwrite(STDERR, "ID: {$book['id']}\n");
|
|
fwrite(STDERR, "Author: {$book['author']}\n");
|
|
fwrite(STDERR, "Genre: {$book['genre']}\n");
|
|
fwrite(STDERR, "Release: {$book['release_date']}\n");
|
|
fwrite(STDERR, 'Description: '.substr($book['description'] ?? '', 0, 100)."...\n");
|
|
if (! empty($book['cover'])) {
|
|
fwrite(STDERR, 'Cover: '.substr($book['cover'], 0, 60)."...\n");
|
|
}
|
|
}
|
|
|
|
fwrite(STDERR, "\n========================================\n");
|
|
fwrite(STDERR, "TEST COMPLETE - Music & Ebook working!\n");
|
|
fwrite(STDERR, "========================================\n\n");
|
|
|
|
$this->assertTrue(true);
|
|
}
|
|
}
|