#!/usr/bin/perl -w
eval
"use Test::Database"
;
plan
skip_all
=>
"Test::Database required for DB testing"
if
($@);
plan
'no_plan'
;
my
$td
;
if
(
$td
= Test::Database->handle(
'mysql'
)) {
create_mysql_databases(
$td
);
}
SKIP: {
skip
"No supported databases available"
, 14
unless
(
$td
);
my
%opts
;
(
$opts
{dsn},
$opts
{dbuser},
$opts
{dbpass}) =
$td
->connection_info();
(
$opts
{driver}) =
$opts
{dsn} =~ /dbi:([^;:]+)/;
(
$opts
{database}) =
$opts
{dsn} =~ /database=([^;]+)/;
(
$opts
{database}) =
$opts
{dsn} =~ /dbname=([^;]+)/
unless
(
$opts
{database});
(
$opts
{dbhost}) =
$opts
{dsn} =~ /host=([^;]+)/;
(
$opts
{dbport}) =
$opts
{dsn} =~ /port=([^;]+)/;
my
%options
=
map
{
my
$v
=
$opts
{
$_
};
defined
(
$v
) ? (
$_
=>
$v
) : () }
qw(driver database dbfile dbhost dbport dbuser dbpass)
;
$options
{phrasebook} =
't/samples/phrasebook.ini'
;
$dbi
= Labyrinth::DBUtils->new(\
%options
);
isa_ok(
$dbi
,
'Labyrinth::DBUtils'
);
is(MetaSearch(),
undef
);
is(MetaSearch(
'keys'
=> [] ),
undef
);
is(MetaSearch(
'keys'
=> [
'Image'
] ),
undef
);
is(MetaSearch(
'keys'
=> [
'Image'
],
'meta'
=> [
'music'
] ),2);
is(MetaSearch(
'keys'
=> [
'Image'
],
'meta'
=> [
'jodrell'
] ),0);
is(MetaSearch(
'keys'
=> [
'Image'
],
'meta'
=> [
'jodrell'
],
full
=> 1 ),1);
my
@search
= MetaSearch(
'keys'
=> [
'Image'
],
'meta'
=> [
'cheshire'
],
sort
=>
'desc'
,
order
=>
'tag'
);
is(
$search
[0]->{tag},
'joy division'
);
is(
$search
[1]->{tag},
'jodrell bank'
);
@search
= MetaSearch(
'keys'
=> [
'Image'
],
'meta'
=> [
'cheshire'
],
sort
=>
'asc'
,
order
=>
'tag'
);
is(
$search
[0]->{tag},
'jodrell bank'
);
is(
$search
[1]->{tag},
'joy division'
);
is(MetaSave(),
undef
);
is(MetaSave(1),
undef
);
is(MetaGet(1,
'Image'
),
'empty'
);
is(MetaSave(1,[
'Image'
]),0);
is(MetaGet(1,
'Image'
),
undef
);
is(MetaSave(1,[
'Image'
],
'this'
,
'that'
),2);
is(MetaGet(1,
'Image'
),
'that this'
);
is(MetaGet(),
undef
);
is(MetaGet(1),
undef
);
is(MetaGet(
undef
,
'Image'
),
undef
);
my
@list
= MetaGet(1);
is_deeply(\
@list
,[]);
@list
= MetaGet(1,
'Image'
);
is_deeply(\
@list
,[
'that'
,
'this'
]);
is(MetaCloud(),
undef
);
is(MetaCloud(
key
=>
'Image'
),
undef
);
is(MetaCloud(
key
=>
'Image'
,
sectionid
=> 1 ),
undef
);
is(MetaCloud(
key
=>
'Image'
,
sectionid
=> 1,
actcode
=>
'meta-search'
),'<div id=
"htmltagcloud"
>
</div>');
is(MetaTags(),
undef
);
is(MetaTags(
key
=>
'Image'
),
undef
);
is(MetaTags(
key
=>
'Image'
,
sectionid
=> 1 ),5);
$td
->{driver}->drop_database(
$td
->name);
}
sub
create_sqlite_databases {
my
$db
=
shift
;
my
@create_example
= (
'PRAGMA auto_vacuum = 1'
,
q|DROP TABLE IF EXISTS images|
,
q|CREATE TABLE images (
imageid INTEGER,
tag TEXT,
link TEXT,
type INTEGER,
href TEXT,
dimensions TEXT,
PRIMARY KEY (imageid)
)|
,
q|INSERT INTO images VALUES (1,'a blank space','images/blank.png',1,NULL,NULL)|
,
q|INSERT INTO images VALUES (2,'nine inch nails','images/nineinchnails.png',1,NULL,NULL)|
,
q|INSERT INTO images VALUES (3,'jodrell bank','images/jodrellbank.png',1,'http://umist.ac.uk',NULL)|
,
q|INSERT INTO images VALUES (4,'joy division','images/joydivision.png',1,NULL,NULL)|
,
q|DROP TABLE IF EXISTS imetadata|
,
q|CREATE TABLE imetadata (
imageid INTEGER,
tag TEXT,
PRIMARY KEY (imageid,tag)
)|
,
q|INSERT INTO imetadata VALUES (1,'empty')|
,
q|INSERT INTO imetadata VALUES (2,'music')|
,
q|INSERT INTO imetadata VALUES (3,'cheshire')|
,
q|INSERT INTO imetadata VALUES (3,'science')|
,
q|INSERT INTO imetadata VALUES (4,'cheshire')|
,
q|INSERT INTO imetadata VALUES (4,'music')|
,
);
dosql(
$db
,\
@create_example
);
}
sub
create_mysql_databases {
my
$db
=
shift
;
my
@create_example
= (
q|DROP TABLE IF EXISTS images|
,
q|CREATE TABLE images (
imageid int(10) unsigned NOT NULL AUTO_INCREMENT,
tag varchar(255) DEFAULT NULL,
link varchar(255) DEFAULT NULL,
type int(4) DEFAULT NULL,
href varchar(255) DEFAULT NULL,
dimensions varchar(255) DEFAULT NULL,
PRIMARY KEY (imageid),
INDEX TYPIX (type)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8|
,
q|INSERT INTO images VALUES (1,'a blank space','images/blank.png',1,NULL,NULL)|
,
q|INSERT INTO images VALUES (2,'nine inch nails','images/nineinchnails.png',1,NULL,NULL)|
,
q|INSERT INTO images VALUES (3,'jodrell bank','images/jodrellbank.png',1,'http://umist.ac.uk',NULL)|
,
q|INSERT INTO images VALUES (4,'joy division','images/joydivision.png',1,NULL,NULL)|
,
q|DROP TABLE IF EXISTS imetadata|
,
q|CREATE TABLE imetadata (
imageid int(10) unsigned NOT NULL DEFAULT '0',
tag varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (imageid,tag)
) ENGINE=MyISAM DEFAULT CHARSET=utf8|
,
q|INSERT INTO imetadata VALUES (1,'empty')|
,
q|INSERT INTO imetadata VALUES (2,'music')|
,
q|INSERT INTO imetadata VALUES (3,'cheshire')|
,
q|INSERT INTO imetadata VALUES (3,'science')|
,
q|INSERT INTO imetadata VALUES (4,'cheshire')|
,
q|INSERT INTO imetadata VALUES (4,'music')|
,
);
dosql(
$db
,\
@create_example
);
}
sub
dosql {
my
(
$db
,
$sql
) =
@_
;
for
(
@$sql
) {
eval
{
$db
->dbh->
do
(
$_
); };
if
($@) {
diag $@;
return
1;
}
}
return
0;
}