finish up the databaseName method tests

This commit is contained in:
Colin Kuskie 2007-07-14 19:56:27 +00:00
parent 6b2ed836fb
commit 3d016a366b
2 changed files with 46 additions and 19 deletions

View file

@ -107,21 +107,22 @@ Based on the DSN, figures out what the database name is.
=cut =cut
sub databaseName { sub databaseName {
my $self = shift; my $self = shift;
return $self->{_databaseName} if $self->{_databaseName}; return $self->{_databaseName} if $self->{_databaseName};
my @dsnEntries = split(/[:;]/, $self->get->{DSN}); my @dsnEntries = split(/[:;]/, $self->get->{DSN});
my $databaseName; my $databaseName;
if ($dsnEntries[2] !~ /=/) { if ($dsnEntries[2] !~ /=/) {
$databaseName = $dsnEntries[2]; $databaseName = $dsnEntries[2];
} else { }
foreach (@dsnEntries) { else {
if ($_ =~ m/^(database|db|dbname)=(.+)$/) { foreach (@dsnEntries) {
$databaseName = $2; if ($_ =~ m/^(?:database|db|dbname)=(.+)$/) {
last; $databaseName = $1;
} last;
} }
} }
}
return $databaseName; return $databaseName;
} }

View file

@ -21,28 +21,54 @@ use Test::More; # increment this value for each test you create
my $session = WebGUI::Test->session; my $session = WebGUI::Test->session;
#DSNs for parsing tests, particularly the database name
my $DSNs = [ my $DSNs = [
{ {
dsn => 'DBI:mysql:colonSeparated:myHost:8008', dsn => 'DBI:mysql:colonSeparated:myHost:8008',
dbName => 'colonSeparated', dbName => 'colonSeparated',
comment => 'explicit',
}, },
{ {
dsn => 'DBI:mysql:database=myDatabase', dsn => 'DBI:mysql:database=myDatabase',
dbName => 'myDatabase', dbName => 'myDatabase',
comment => 'database=',
}, },
{ {
dsn => 'DBI:mysql:dbName=myDbName', dsn => 'DBI:mysql:dbName=myDbName',
dbName => 'myDbName', dbName => undef,
comment => 'dbName=, bad capitalization',
},
{
dsn => 'DBI:mysql:dbname=mydbname',
dbName => 'mydbname',
comment => 'dbname=',
},
{
dsn => 'DBI:mysql:dbnane=myDbName',
dbName => undef,
comment => 'dbnane=, misspelling',
},
{
dsn => 'DBI:mysql:db=myDb',
dbName => 'myDb',
comment => 'db=',
}, },
]; ];
plan tests => 2; plan tests => 2 + scalar @{ $DSNs };
my $dbLink = WebGUI::DatabaseLink->new($session, 0); my $dbLink = WebGUI::DatabaseLink->new($session, 0);
is($dbLink->get->{DSN}, $session->config->get('dsn'), 'DSN set correctly for default database link'); is($dbLink->get->{DSN}, $session->config->get('dsn'), 'DSN set correctly for default database link');
my ($databaseName) = $session->db->quickArray('SELECT DATABASE()'); my ($databaseName) = $session->db->quickArray('SELECT DATABASE()');
is ($dbLink->databaseName, $databaseName, 'databaseName parsed default DSN from config file'); is ($dbLink->databaseName, $databaseName, 'databaseName parsed default DSN from config file');
foreach my $dsn (@{ $DSNs }) {
my $dbl = WebGUI::DatabaseLink->create($session, { DSN => $dsn->{dsn} });
is( $dbl->databaseName(), $dsn->{dbName}, $dsn->{comment} );
$dbl->delete;
}
END { END {
foreach my $link ($dbLink, ) { foreach my $link ($dbLink, ) {
$link->delete if (defined $link and ref $link eq 'WebGUI::DatabaseLink'); $link->delete if (defined $link and ref $link eq 'WebGUI::DatabaseLink');