CMS-Drupal-Modules-MembershipEntity
view release on metacpan or search on metacpan
lib/CMS/Drupal/Modules/MembershipEntity/Test.pm view on Meta::CPAN
subtest 'Built the test database' => sub {
plan tests => 5;
$dbh = $drupal->dbh( database => ':memory:',
driver => 'SQLite' );
isa_ok( $dbh, 'DBI::db', 'Got a valid $dbh' );
subtest 'Created the test database tables.' => sub {
plan tests => 4;
for (split( /\n{2,}/, read_text("$FindBin::Bin/data/test_db.sql") )) {
my $rv = $dbh->do($_);
isnt( $rv, undef, 'Added a table to the test database' );
}
};
#########
# Populate the test database
# First we have to have a default type
my $add_type = qq/
INSERT INTO membership_entity_type (type, label, weight, description, data, status, module)
VALUES (?, ?, ?, ?, ?, ?, ?)
/;
my @fields = split(',', read_text("$FindBin::Bin/data/test_types.dat")) or croak; # This file must have only ONE line
my $add_type_rv = $dbh->do( $add_type, {}, @fields, undef );
cmp_ok( $add_type_rv, '>', 0, 'Populate the membership_entity_type table with a default type' );
## Now add Memberships from the data file
my $add_mem = qq/
INSERT INTO membership_entity (mid, member_id, type, uid, status, created, changed)
VALUES ( ?, ?, ?, ?, ?, ?, ?)
/;
test 'Populate the membership_entity table with test data' => sub {
for ( read_lines("$FindBin::Bin/data/test_memberships.dat" ) ) {
my @fields = split(',');
my $add_mem_rv = $dbh->do( $add_mem, {}, @fields );
cmp_ok( $add_mem_rv, '>', 0, "Added a Membership for mid $fields[0]" );
}
};
## Now add Membership Terms from the data file
my $add_term = qq/
INSERT INTO membership_entity_term(id, mid, status, term, modifiers, start, end )
VALUES (?, ?, ?, ?, ?, ?, ?)
/;
test 'Populate the membership_entity_term table with test data' => sub {
for ( read_lines("$FindBin::Bin/data/test_terms.dat" ) ) {
my @fields = split(',');
my $add_term_rv = $dbh->do( $add_term, {}, @fields );
cmp_ok( $add_term_rv, '>', 0, "Added a Term for $fields[0]" );
}
};
}; # done building the test DB
$dbh->sqlite_backup_to_file("$FindBin::Bin/data/.DB.sqlite");
return $dbh;
}
sub build_test_db {
## No testing here!
## Reads the test data from .dat files and
## builds an in-memory SQLite database
my $drupal = shift;
my $dbh = $drupal->dbh( database => ':memory:',
driver => 'SQLite' );
for (split( /\n{2,}/, read_text("$FindBin::Bin/data/test_db.sql") )) {
my $rv = $dbh->do($_);
}
# First we have to have a default type
my $add_type = qq/
INSERT INTO membership_entity_type (type, label, weight, description, data, status, module)
VALUES (?, ?, ?, ?, ?, ?, ?)
/;
my @fields = split(',', read_text("$FindBin::Bin/data/test_types.dat")) or croak; # This file must have only ONE line
my $add_type_rv = $dbh->do( $add_type, {}, @fields, undef );
## Now add Memberships from the data file
my $add_mem = qq/
INSERT INTO membership_entity (mid, member_id, type, uid, status, created, changed)
VALUES ( ?, ?, ?, ?, ?, ?, ?)
/;
for ( read_lines("$FindBin::Bin/data/test_memberships.dat" ) ) {
my @fields = split(',');
my $add_mem_rv = $dbh->do( $add_mem, {}, @fields );
}
## Now add Membership Terms from the data file
my $add_term = qq/
INSERT INTO membership_entity_term(id, mid, status, term, modifiers, start, end )
VALUES (?, ?, ?, ?, ?, ?, ?)
/;
for ( read_lines("$FindBin::Bin/data/test_terms.dat" ) ) {
my @fields = split(',');
my $add_term_rv = $dbh->do( $add_term, {}, @fields );
}
$dbh->sqlite_backup_to_file( "$FindBin::Bin/data/.DB.sqlite" );
return $dbh;
}
############################
sub build_test_data {
my @mids = @_;
my %include;
for( @mids ) {
$include{ $_ }++;
}
my %membs;
my %terms;
for ( read_lines("$FindBin::Bin/data/test_memberships.dat" ) ) {
my @fields = split(',');
if (scalar @mids > 0) { next unless exists $include{ $fields[0] }; }
$membs{ $fields[0] } = { 'mid' => $fields[0],
'member_id' => $fields[1],
'type' => $fields[2],
'uid' => $fields[3],
'status' => $fields[4],
'created' => $fields[5],
'changed' => $fields[6] };
}
my %term_count;
for ( read_lines("$FindBin::Bin/data/test_terms.dat" ) ) {
my @fields = split(',');
if (scalar @mids > 0) { next unless exists $include{ $fields[1] } };
$term_count{ $fields[1] }++;
for (5..6) {
my @datetime = reverse (split /[-| |:]/, $fields[ $_ ]);
$datetime[4]--;
$fields[ $_ ] = timelocal( @datetime );
}
$terms{ $fields[0] } = bless(
{ 'tid' => $fields[0],
'mid' => $fields[1],
'status' => $fields[2],
'term' => $fields[3],
'modifiers' => $fields[4],
'start' => $fields[5],
'end' => $fields[6],
'array_position' => $term_count{ $fields[1] } },
'CMS::Drupal::Modules::MembershipEntity::Term' );
}
while ( my ($tid, $term) = each %terms ) {
$membs{ $term->{'mid'} }->{'terms'}->{ $tid } = $term;
}
foreach my $mem ( keys %membs ) {
$membs{ $mem } = bless( $membs{ $mem }, 'CMS::Drupal::Modules::MembershipEntity::Membership' );
}
( run in 1.404 second using v1.01-cache-2.11-cpan-5735350b133 )