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 )