The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;

use Test::Mock::LWP::Dispatch;
use HTTP::Response;
use FindBin qw( $Bin );
use File::Slurp qw( read_file );

use Test::More tests => 15;
use Test::Deep;

BEGIN { use_ok 'WWW::Discogs' }

my $rt = read_file("$Bin/../requests/master.res");
my $response = HTTP::Response->parse($rt);
$mock_ua->map('http://api.discogs.com/master/23992', $response);

my $client = new_ok('WWW::Discogs' => [], '$client');
my $master = $client->master(id => 23992);
isa_ok($master, 'WWW::Discogs::Master', '$master');
isa_ok($master, 'WWW::Discogs::HasMedia', '$master');
isa_ok($master, 'WWW::Discogs::ReleaseBase', '$master');

is($master->id, 23992, 'id');
is($master->main_release, 830189, 'main_release');

my @versions = $master->versions;
for (@versions) {
    if ($_->{id} == 830189) {
        cmp_deeply($_,
                  {
                      country  => 'Germany',
                      status   => 'Accepted',
                      released => '2006-10-06',
                      thumb    => ignore(),
                      format   => 'CD, Album',
                      id       => 830189,
                      title    => 'The Last Resort',
                      label    => 'Poker Flat Recordings, Rough Trade Arvato',
                      catno    => 'PFRCD18, RTD 586.1018.2'
                  }, 'versions');
    }
}

my @images = $master->images(type => 'primary');
cmp_deeply(\@images, bag({
            uri150 => ignore(),
            width  => 600,
            type   => 'primary',
            height => 600,
            uri    => 'http://api.discogs.com/image/R-830189-1265162680.jpeg'
          }), 'images');

is($master->year, 2006, 'year');

my @styles = $master->styles;
cmp_deeply(\@styles, bag(
                         'Techno',
                         'IDM',
                         'Post Rock',
                         'Tech House',
                         'Ambient',
                         'Minimal' ), 'styles');

my @genres = $master->genres;
cmp_deeply(\@genres, bag('Electronic', 'Rock'), 'genres');

my @artists = $master->artists;
cmp_deeply(\@artists, bag({
            tracks => '',
            name   => "Trentem\x{f8}ller",
            anv    => '',
            role   => '',
            join   => '',
          }), 'artists');

my @extraartists = $master->extraartists;
cmp_deeply(\@extraartists, bag(), 'extraartists');

for ($master->tracklist) {
    if($_->{position} == 1) {
        cmp_deeply($_, {
                           position     => 1,
                           title        => 'Take Me Into Your Skin',
                           duration     => '7:44',
                           extraartists => ignore(),
                       }, 'tracklist');
    }
}