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 )