ACME-QuoteDB
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
t/04-get_quotes_more.t view on Meta::CPAN
#!perl -T
# TODO more tests, make add_quote break!
# TODO see bottom of file for more todo's
use strict;
use warnings;
use ACME::QuoteDB;
use ACME::QuoteDB::LoadDB;
#use Test::More 'no_plan';
use Test::More tests => 24;
use File::Basename qw/dirname/;
use Data::Dumper qw/Dumper/;
use Carp qw/croak/;
use File::Spec;
use Readonly;
BEGIN {
eval "use DBD::SQLite";
$@ and croak 'DBD::SQLite is a required dependancy';
}
Readonly my $FG_QUOTE => 'Lois: Peter, what did you promise me?' .
"\nPeter: That I wouldn't drink at the stag party." .
"\nLois: And what did you do?" .
"\nPeter: Drank at the stag pa-- ... Whoa. I almost walked into that one.";
{
#make test db writeable
use ACME::QuoteDB::DB::DBI;
# yeah, this is supposed to be covered by the build process
# but is failing sometimes,...
chmod 0666, ACME::QuoteDB::DB::DBI->get_current_db_path;
my $q = File::Spec->catfile((dirname(__FILE__),'data'),
'simpsons_quotes.csv'
);
my $load_db = ACME::QuoteDB::LoadDB->new({
file => $q,
file_format => 'csv',
create_db => 1,
});
isa_ok $load_db, 'ACME::QuoteDB::LoadDB';
$load_db->data_to_db;
is $load_db->success, 1;
}
my $sq = ACME::QuoteDB->new;
is $sq->get_quote({Rating => '8.7'}),
"Me fail English? That's unpossible.\n-- Ralph Wiggum";
is( $sq->list_attr_sources, 'The Simpsons');
is( $sq->list_categories, 'Humor');
{
eval { # quote is mandatory
$sq->add_quote({
Quote => q{},
AttrName => 'Peter Griffin',
Source => 'Family Guy',
Rating => '8.6',
Category => 'TV Humor',
});
};
if ($@) {
if ($@ =~ m/ are mandatory parameters/){
pass 'correct, exception expected'
}
else {fail 'unexpected exception occured'};
}
else {fail 'quote and name are required'};
}
# quote does not yet exist in db
{
eval { # see, not exist yet
$sq->get_quote({AttrName => 'Griffin'});
};
if ($@) {
pass 'ok' if $@ =~ m/attribution not found/;
} else {
fail 'attribution does not yet exist, so should not be found'
};
}
{ # now, add new quote to the db
$sq->add_quote({
Quote => $FG_QUOTE,
AttrName => 'Peter Griffin',
Source => 'Family Guy',
Rating => '8.6',
Category => 'TV Humor',
});
# exist now
ok scalar $sq->get_quote({AttrName => 'GRIFFIN'}); # case insensitve
my $fgc = $FG_QUOTE;
$fgc .= "\n-- Peter Griffin";
is $fgc, $sq->get_quote({AttrName => 'Peter G'});
# get newly updated source and category
is( $sq->list_attr_sources, "Family Guy\nThe Simpsons" );
is( $sq->list_categories, "Humor\nTV Humor");
}
{
# crud
# get_quote id, update quote content, delete quote
my $qid = $sq->get_quote_id({Quote => $FG_QUOTE});
my $qu = $FG_QUOTE;
$qu =~ s/Lois/Marge/xmsg;
$qu =~ s/Peter/Homer/xmsg;
is $sq->get_quote({Rating => '9.6'}), undef;
$sq->update_quote({
QuoteId => $qid,
Quote => $qu,
AttrName => 'Lois Simpson',
Source => 'The Simpsons Guys',
Rating => '9.6',
Category => 'Cartoon Noir',
});
$qu .= "\n-- Lois Simpson";
eval { # see, updated, should now be 'Lois Simpson'
$sq->get_quote({AttrName => 'Peter G'});
};
if ($@) {
pass 'ok' if $@ =~ m/attribution not found/;
} else {fail 'attribution does not yet exist, so should not be found'};
is $sq->get_quote({AttrName => 'Lois Simpson'}), $qu;
is $sq->get_quote({AttrName => 'Lois S'}), $qu;
is $sq->get_quote({Rating => '9.6'}), $qu;
is $sq->get_quote({Source => 'The Simpsons Guys'}), $qu;
is $sq->get_quote({Category => 'Cartoon Noir'}), $qu;
$sq->delete_quote({QuoteId => $qid});
# see, bye, bye
is $sq->get_quote({AttrName => 'Lois S'}), undef;
is $sq->get_quote({Rating => '9.6'}), undef;
}
# TODO
{ # add new quote to the db
$sq->add_quote({
Quote => $FG_QUOTE,
AttrName => 'Peter Griffin',
Source => 'Family Guy',
Rating => '8.6',
Category => [qw(Humor TV PG13 Crude Cartoon ROTFLMAO)]
});
my $qid = $sq->get_quote_id({Quote => $FG_QUOTE});
# one quote can belong to many categories
my $q = $FG_QUOTE;
$q .= "\n-- Peter Griffin";
is $sq->get_quote({
Source => 'Family Guy',
Category => [qw(Humor TV PG13 Crude Cartoon ROTFLMAO)]
}), $q;
# get all quotes from these categories
is $sq->get_quote({
Category => [qw(Crude Cartoon ROTFLMAO)]
}), $q;
is scalar @{$sq->get_quotes({
Category => [qw(Humor ROTFLMAO)]
})}, 30;
ok $sq->delete_quote({QuoteId => $qid});
}
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.664 second using v1.00-cache-2.02-grep-82fe00e-cpan-f5108d614456 )