use strict;
use warnings;
use Text::Tradition::Parser::GraphML qw/ graphml_parse /;
+use Text::Tradition::UserStore;
use TryCatch;
=head1 NAME
=begin testing
+use File::Temp;
+use Test::Warn;
use Text::Tradition;
binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";
is( $newt->stemma(0)->witnesses, $t->stemma(0)->witnesses, "Stemma has correct length witness list" );
}
+# Test user save / restore
+my $fh = File::Temp->new();
+my $file = $fh->filename;
+$fh->close;
+my $dsn = "dbi:SQLite:dbname=$file";
+my $userstore = Text::Tradition::UserStore->new( { dsn => $dsn,
+ extra_args => { create => 1 } } );
+my $scope = $userstore->new_scope();
+my $testuser = $userstore->add_user( { url => 'http://example.com' } );
+is( ref( $testuser ), 'Text::Tradition::User', "Created test user via userstore" );
+$testuser->add_tradition( $newt );
+is( $newt->user->id, $testuser->id, "Assigned tradition to test user" );
+$graphml_str = $newt->collation->as_graphml;
+my $usert;
+warning_is {
+ $usert = Text::Tradition->new( 'input' => 'Self', 'string' => $graphml_str );
+} 'DROPPING user assignment without a specified userstore',
+ "Got expected user drop warning on parse";
+$usert = Text::Tradition->new( 'input' => 'Self', 'string' => $graphml_str,
+ 'userstore' => { 'dsn' => $dsn } );
+is( $usert->user->id, $testuser->id, "Parsed tradition with userstore points to correct user" );
+
=end testing
my $val = $graph_data->{'global'}->{$gkey};
if( $gkey eq 'version' ) {
$use_version = $val;
- } elsif( $gkey eq 'stemmata' ) { # Special case, yuck
+ } elsif( $gkey eq 'stemmata' ) {
+ # Parse the stemmata into objects
foreach my $dotstr ( split( /\n/, $val ) ) {
$tradition->add_stemma( 'dot' => $dotstr );
}
+ } elsif( $gkey eq 'user' ) {
+ # Assign the tradition to the user if we can
+ if( exists $opts->{'userstore'} ) {
+ my $userdir;
+ try {
+ $userdir = Text::Tradition::UserStore->new( $opts->{'userstore'} );
+ } catch {
+ warn( "Could not connect to specified user store; DROPPING user assignment" );
+ }
+ my $user = $userdir->find_user( { username => $val } );
+ if( $user ) {
+ $user->add_tradition( $tradition );
+ } else {
+ warn( "Found no user with ID $val; DROPPING user assignment" );
+ }
+ } else {
+ warn( "DROPPING user assignment without a specified userstore" );
+ }
} elsif( $tmeta->has_attribute( $gkey ) ) {
$tradition->$gkey( $val );
} else {