App-DrivePlayer

 view release on metacpan or  search on metacpan

t/unit/Test/DrivePlayer/DB.pm  view on Meta::CPAN

    my $dbh = $self->db->schema->storage->dbh;
    my @tables = map { (split /\./, $_)[-1] =~ s/"//gr }
                 $dbh->tables(undef, undef, undef, 'TABLE');

    ok grep({ $_ eq 'scan_folders' } @tables), 'scan_folders table created';
    ok grep({ $_ eq 'folders'      } @tables), 'folders table created';
    ok grep({ $_ eq 'tracks'       } @tables), 'tracks table created';
}

sub second_connect_no_redeploy : Tests(1) {
    my ($self) = @_;

    # Re-connecting to an existing DB must not fail (tables already exist).
    my $db2 = fake_db($self->_temp_db_path);
    ok $db2->track_count >= 0, 'second connection to existing DB succeeds';
}

# ---- scan_folders ----

sub upsert_scan_folder_create : Tests(4) {
    my ($self) = @_;

    my $sf = $self->db->upsert_scan_folder(FAKE_FOLDER_ID, FAKE_FOLDER_NAME);
    is ref($sf), 'HASH',             'upsert_scan_folder returns hashref';
    ok $sf->{id},                    'returned row has id';
    is $sf->{drive_id}, FAKE_FOLDER_ID,   'drive_id correct';
    is $sf->{name},     FAKE_FOLDER_NAME, 'name correct';
}

sub upsert_scan_folder_update : Tests(2) {
    my ($self) = @_;

    $self->db->upsert_scan_folder(FAKE_FOLDER_ID, 'Original Name');
    my $updated = $self->db->upsert_scan_folder(FAKE_FOLDER_ID, 'Updated Name');
    is $updated->{name}, 'Updated Name', 'name updated on conflict';
    is $self->db->schema->resultset('ScanFolder')->count, 1, 'no duplicate row created';
}

sub get_scan_folder_by_drive_id : Tests(3) {
    my ($self) = @_;

    $self->db->upsert_scan_folder(FAKE_FOLDER_ID, FAKE_FOLDER_NAME);
    my $sf = $self->db->get_scan_folder_by_drive_id(FAKE_FOLDER_ID);
    is $sf->{drive_id}, FAKE_FOLDER_ID,   'found by drive_id';
    is $sf->{name},     FAKE_FOLDER_NAME, 'name correct';
    is $self->db->get_scan_folder_by_drive_id('nonexistent'), undef, 'returns undef when not found';
}

sub all_scan_folders_ordering : Tests(2) {
    my ($self) = @_;

    $self->db->upsert_scan_folder('id_z', 'Zzz Folder');
    $self->db->upsert_scan_folder('id_a', 'Aaa Folder');
    $self->db->upsert_scan_folder('id_m', 'Mmm Folder');

    my @folders = $self->db->all_scan_folders;
    is scalar @folders, 3, 'all_scan_folders returns all rows';
    is $folders[0]{name}, 'Aaa Folder', 'scan_folders ordered by name';
}

sub delete_scan_folder_cascade : Tests(3) {
    my ($self) = @_;

    my $sf  = $self->db->upsert_scan_folder(FAKE_FOLDER_ID, FAKE_FOLDER_NAME);
    my $fld = $self->db->upsert_folder(sample_folder(scan_folder_id => $sf->{id}));
    $self->db->upsert_track(sample_track(folder_id => $fld->{id}));

    is $self->db->track_count, 1, 'track exists before delete';
    $self->db->delete_scan_folder(FAKE_FOLDER_ID);
    is $self->db->schema->resultset('ScanFolder')->count, 0, 'scan_folder deleted';
    is $self->db->track_count, 0, 'tracks cascade-deleted';
}

# ---- folders ----

sub upsert_folder_create : Tests(5) {
    my ($self) = @_;

    my $sf  = $self->db->upsert_scan_folder(FAKE_FOLDER_ID, FAKE_FOLDER_NAME);
    my $fld = $self->db->upsert_folder(sample_folder(scan_folder_id => $sf->{id}));

    is ref($fld), 'HASH',          'upsert_folder returns hashref';
    ok $fld->{id},                 'returned row has id';
    is $fld->{name},  'Rock',      'name correct';
    ok defined $fld->{path},       'path present';
    is $fld->{scan_folder_id}, $sf->{id}, 'scan_folder_id correct';
}

sub upsert_folder_update : Tests(2) {
    my ($self) = @_;

    my $sf = $self->db->upsert_scan_folder(FAKE_FOLDER_ID, FAKE_FOLDER_NAME);
    $self->db->upsert_folder(sample_folder(scan_folder_id => $sf->{id}, name => 'OldName'));
    my $updated = $self->db->upsert_folder(
        sample_folder(scan_folder_id => $sf->{id}, name => 'NewName')
    );
    is $updated->{name}, 'NewName', 'folder name updated on conflict';
    is $self->db->schema->resultset('Folder')->count, 1, 'no duplicate folder row';
}

sub get_folder_by_drive_id : Tests(2) {
    my ($self) = @_;

    my $sf = $self->db->upsert_scan_folder(FAKE_FOLDER_ID, FAKE_FOLDER_NAME);
    $self->db->upsert_folder(sample_folder(scan_folder_id => $sf->{id}));
    my $fld = $self->db->get_folder_by_drive_id('folder_drive_id_rock');
    is $fld->{name}, 'Rock', 'folder found by drive_id';
    is $self->db->get_folder_by_drive_id('nope'), undef, 'returns undef when not found';
}

sub folders_for_scan_folder : Tests(2) {
    my ($self) = @_;

    my $sf  = $self->db->upsert_scan_folder(FAKE_FOLDER_ID, FAKE_FOLDER_NAME);
    $self->db->upsert_folder(sample_folder(
        scan_folder_id => $sf->{id}, drive_id => 'f1', name => 'Z', path => 'Z'
    ));
    $self->db->upsert_folder(sample_folder(
        scan_folder_id => $sf->{id}, drive_id => 'f2', name => 'A', path => 'A'
    ));

    my @flds = $self->db->folders_for_scan_folder($sf->{id});
    is scalar @flds, 2,      'returns all folders for scan_folder';
    is $flds[0]{name}, 'A',  'folders ordered by path';
}

# ---- tracks ----

sub upsert_track_create : Tests(6) {
    my ($self) = @_;



( run in 1.513 second using v1.01-cache-2.11-cpan-e93a5daba3e )