App-DrivePlayer

 view release on metacpan or  search on metacpan

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

package Test::DrivePlayer::DB;

use strict;
use warnings;

use Test::Most;
use Test::DrivePlayer::TestBase;
use Test::DrivePlayer::Utils qw( :all );

use parent 'Test::DrivePlayer::TestBase';

# Each test gets a fresh in-memory-like DB via a temp file.
sub setup : Tests(setup) {
    my ($self) = @_;
    $self->SUPER::setup();
    $self->{db} = fake_db($self->_temp_db_path);
    return;
}

sub db { $_[0]->{db} }

# ---- Schema ----

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

    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) {



( run in 0.734 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )