db7efbca499d88da8a86ee22ba136fa5e7ad8678
[scpubgit/stemmaweb.git] / script / maketestdb.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5 use feature 'say';
6 use Text::Tradition;
7 use Text::Tradition::Directory;
8
9 my $DBDIR = 'db';
10 my $DBNAME = 'traditions.db';
11 my $DBEXT = 'test';
12 # Make the directory on the filesystem if necessary
13 unless( -d $DBDIR ) {
14         mkdir $DBDIR
15                 or die "Could not make database director $DBDIR";
16         say "Created directory for test database";
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 # Set up the test directory
30 symlink( "$DBNAME.$DBEXT", "$DBDIR/$DBNAME" ) or die "Could not set up testing db symlink";
31
32 my $dir = Text::Tradition::Directory->new(
33         dsn => "dbi:SQLite:dbname=$DBDIR/$DBNAME",
34         extra_args => { create => 1 } 
35         );
36 my $scope = $dir->new_scope();
37 say "Created test database";
38
39 # Create users
40 my $user = $dir->add_user({ username => 'user@example.org', password => 'UserPass' });
41 my $admin = $dir->add_user({ username => 'admin@example.org', 
42         password => 'AdminPass', role => 'admin' });
43 my $openid_user = $dir->create_user({
44         url      => 'https://www.google.com/accounts/o8/id?id=AItOawlFTlpuHGcI67tqahtw7xOod9VNWffB-Qg',
45         extensions => {'http://openid.net/srv/ax/1.0' => { 'value.email' =>'openid@example.org' } },
46     });
47 die "Failed to create test users" unless $user && $admin && $openid_user;
48 say "Created users";
49
50 my $t1 = Text::Tradition->new( input => 'Self', file => 't/data/besoin.xml' );
51 die "Failed to create test tradition #1" unless $t1;
52 $t1->add_stemma( dotfile => 't/data/besoin_stemweb.dot' );
53 $user->add_tradition( $t1 );
54 my $t1b = Text::Tradition->new( input => 'Self', file => 't/data/besoin.xml' );
55 $t1b->add_stemma( dotfile => 't/data/besoin_stemweb.dot' );
56 $openid_user->add_tradition($t1b);
57 $dir->store( $user );
58 $dir->store( $openid_user );
59 say "Created test user tradition";
60
61 my $t2 = Text::Tradition->new( input => 'Tabular', sep_char => ',', 
62         file => 't/data/florilegium.csv' );
63 $t2->add_stemma( dotfile => 't/data/florilegium.dot' );
64 die "Failed to create test tradition #2" unless $t2;
65 $t2->public( 1 );
66 $dir->store( $t2 );
67 my $t3 = Text::Tradition->new( input => 'Self', file => 't/data/john.xml' );
68 $t3->public( 1 );
69 $t3->name( 'John verse' );
70 $dir->store( $t3 );
71 my $t4 = Text::Tradition->new( input => 'Self', file => 't/data/collatecorr.xml' );
72 $t4->public( 1 );
73 $user->add_tradition( $t4 );
74 $dir->store( $t4 );
75 $dir->store( $user );
76
77 say "Created test public traditions";
78