better db code
[scpubgit/stemmaweb.git] / t / lib / stemmaweb / Test / DB.pm
1 package stemmaweb::Test::DB;
2
3 use warnings;
4 use strict;
5
6 use FindBin;
7
8 sub new_db {
9     my $DBDIR = "$FindBin::Bin/db";
10     my $DBNAME = 'traditions.db';
11     my $DBEXT = 'test';
12
13     # Make the directory on the filesystem if necessary
14     unless( -d $DBDIR ) {
15         mkdir $DBDIR
16             or die "Could not make database director $DBDIR";
17     }
18     # Delete the old db if it exists
19     if( -f "$DBDIR/$DBNAME.$DBEXT" ) {
20         unlink( "$DBDIR/$DBNAME.$DBEXT" );
21     }
22     if( -l "$DBDIR/$DBNAME" ) {
23         unlink( "$DBDIR/$DBNAME" );
24     } elsif( -e "$DBDIR/$DBNAME" ) {
25         unlink( "$DBDIR/$DBNAME.bak" ) if -f "$DBDIR/$DBNAME.bak";
26         rename( "$DBDIR/$DBNAME", "$DBDIR/$DBNAME.bak" ) 
27             or die "Could not rename existing $DBNAME";
28     }
29
30     # Set up the test directory
31     symlink( "$DBNAME.$DBEXT", "$DBDIR/$DBNAME" ) or die "Could not set up testing db symlink";
32
33     my $dir = Text::Tradition::Directory->new(
34         dsn => "dbi:SQLite:dbname=$DBDIR/$DBNAME",
35         extra_args => { create => 1 } 
36         );
37     my $scope = $dir->new_scope();
38
39     # Create users
40     my $user = $dir->add_user({ username => 'user@example.org', password => 'UserPass' });
41
42
43     my $t2 = Text::Tradition->new( input => 'Tabular', sep_char => ',', 
44     file => 't/data/florilegium.csv' );
45     $t2->add_stemma( dotfile => 't/data/florilegium.dot' );
46
47     $user->add_tradition($t2);
48 }
49
50 1;