App-DrivePlayer
view release on metacpan or search on metacpan
t/unit/Test/DrivePlayer/DB.pm view on Meta::CPAN
album => 'Physical Graffiti', track_number => 1, year => 1975,
mime_type => 'audio/flac', folder_id => $fld->{id} },
);
$self->db->upsert_track(%$_) for @tracks;
return ($sf, $fld);
}
sub all_tracks_ordering : Tests(3) {
my ($self) = @_;
$self->_populate_library;
my @tracks = $self->db->all_tracks;
is scalar @tracks, 4, 'all_tracks returns all rows';
# Order: artist, album, track_number, title
is $tracks[0]{artist}, 'Led Zeppelin', 'first artist alphabetically';
is $tracks[0]{title}, 'Stairway to Heaven', 'first track by album then track_number';
}
sub tracks_by_artist : Tests(3) {
my ($self) = @_;
$self->_populate_library;
my @queen = $self->db->tracks_by_artist('Queen');
is scalar @queen, 2, 'tracks_by_artist returns matching tracks';
is $queen[0]{title}, 'Bohemian Rhapsody', 'first Queen track by album+track_number';
# Case-insensitive
my @queen_lc = $self->db->tracks_by_artist('queen');
is scalar @queen_lc, 2, 'tracks_by_artist is case-insensitive';
}
sub tracks_by_album : Tests(3) {
my ($self) = @_;
$self->_populate_library;
my @album = $self->db->tracks_by_album('Led Zeppelin IV');
is scalar @album, 1, 'tracks_by_album returns matching tracks';
is $album[0]{title}, 'Stairway to Heaven', 'correct track returned';
my @album_lc = $self->db->tracks_by_album('led zeppelin iv');
is scalar @album_lc, 1, 'tracks_by_album is case-insensitive';
}
sub tracks_by_folder : Tests(2) {
my ($self) = @_;
my ($sf, $fld) = $self->_populate_library;
my @tracks = $self->db->tracks_by_folder($fld->{id});
is scalar @tracks, 4, 'tracks_by_folder returns all tracks in folder';
is $self->db->tracks_by_folder(99999), 0, 'non-existent folder returns empty list';
}
sub search_tracks : Tests(5) {
my ($self) = @_;
$self->_populate_library;
my @r1 = $self->db->search_tracks('queen');
is scalar @r1, 2, 'search by artist (lowercase)';
my @r2 = $self->db->search_tracks('stairway');
is scalar @r2, 1, 'search by title fragment';
is $r2[0]{title}, 'Stairway to Heaven', 'correct track found by title';
my @r3 = $self->db->search_tracks('graffiti');
is scalar @r3, 1, 'search by album fragment';
my @r4 = $self->db->search_tracks('zzznomatch');
is scalar @r4, 0, 'no results for non-matching query';
}
sub all_artists : Tests(3) {
my ($self) = @_;
$self->_populate_library;
my @artists = $self->db->all_artists;
is scalar @artists, 2, 'all_artists returns distinct artists';
is $artists[0], 'Led Zeppelin', 'artists ordered alphabetically';
is $artists[1], 'Queen', 'second artist correct';
}
sub all_albums : Tests(3) {
my ($self) = @_;
$self->_populate_library;
my @albums = $self->db->all_albums;
is scalar @albums, 4, 'all_albums returns distinct albums';
# All are distinct here; check ordering
is $albums[0], 'A Night at the Opera', 'first album alphabetically';
}
sub track_count : Tests(2) {
my ($self) = @_;
is $self->db->track_count, 0, 'track_count is 0 for empty DB';
$self->_populate_library;
is $self->db->track_count, 4, 'track_count reflects inserted tracks';
}
sub clear_scan_folder_tracks : Tests(3) {
my ($self) = @_;
my ($sf) = $self->_populate_library;
is $self->db->track_count, 4, 'tracks exist before clear';
$self->db->clear_scan_folder_tracks($sf->{id});
is $self->db->track_count, 0, 'tracks removed after clear';
is $self->db->schema->resultset('Folder')->count, 0, 'folders removed after clear';
}
1;
( run in 2.460 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )