#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 36;
use IO::File;
use File::Basename;
use lib File::Basename::dirname(__FILE__)."/../../../lib";
use lib File::Basename::dirname(__FILE__)."/../..";
use URT; # dummy namespace
use URT::DataSource::SomeFileMux;
my $ds = URT::DataSource::SomeFileMux->get();
ok($ds, 'got the datasource object');
&setup_files_and_classes($ds);
my $thing1 = URT::Thing->get(thing_id => 1, thing_type => 'person');
ok($thing1, 'got an object');
ok($thing1->thing_color('changed'), 'Changed its color');
my $thing2 = URT::Thing->get(thing_id => 10, thing_type => 'robot');
ok($thing2, 'Got another object');
ok($thing2->thing_name('TomTom'), 'Changed its name');
my $thing3 = URT::Thing->get(thing_id => 2, thing_type => 'person');
ok($thing3, 'Got a third thing');
ok($thing3->delete, 'Deleted it');
my $new1 = URT::Thing->create(thing_id => 3, thing_name => 'Shaggy', thing_color => 'green', thing_type => 'person');
ok($new1, 'Created a new thing');
my $new2 = URT::Thing->create(thing_id => 9, thing_name => 'Fred', thing_color => 'white', thing_type => 'person');
ok($new2, 'Created a new thing 2');
my $new3 = URT::Thing->create(thing_id => 0, thing_name => 'Velma', thing_color => 'red', thing_type => 'person');
ok($new3, 'Created a new thing 3');
my $new4 = URT::Thing->create(thing_id => 11, thing_name => 'Robbie', thing_color => 'black', thing_type => 'robot');
ok($new4, 'Created a new thing 4');
my $new5 = URT::Thing->create(thing_id => 20, thing_name => 'Scooby', thing_color => 'brown', thing_type => 'animal');
ok($new5, 'Created a new thing 5');
ok(UR::Context->commit(), 'Commit');
&check_files($ds);
foreach my $obj ( $new1, $new2, $new3, $new4, $new5 ) {
ok(exists($obj->{'db_committed'}), "New object now has a 'db_committed' hash key")
}
sub check_files {
my $ds = shift;
my $dir = $URT::DataSource::SomeFileMux::BASE_PATH;
my $f = IO::File->new("$dir/person");
ok($f, 'Opened file for person data');
my $line = $f->getline();
is($line, qq(0\tVelma\tred\n), 'Line 0');
$line = $f->getline();
is($line, qq(1\tJoel\tchanged\n), 'Line 1');
$line = $f->getline();
is($line, qq(3\tShaggy\tgreen\n), 'Line 2');
$line = $f->getline();
is($line, qq(4\tFrank\tblack\n), 'Line 3');
$line = $f->getline();
is($line, qq(5\tClayton\tgreen\n), 'Line 4');
$line = $f->getline();
is($line, qq(9\tFred\twhite\n), 'Line 5');
$line = $f->getline();
is($line, undef, 'end of file');
$f->close();
$f = IO::File->new("$dir/robot");
ok($f, 'Opened file for robot data');
$line = $f->getline();
is($line, qq(8\tCrow\tgold\n), 'Line 0');
$line = $f->getline();
is($line, qq(10\tTomTom\tred\n), 'Line 1');
$line = $f->getline();
is($line, qq(11\tRobbie\tblack\n), 'Line 3');
$line = $f->getline();
is($line, qq(12\tGypsy\tpurple\n), 'Line 2');
$line = $f->getline();
is($line, undef, 'end of file');
$f->close();
$f = IO::File->new("$dir/animal");
ok($f, 'Opened file for animal data');
$line = $f->getline();
is($line, qq(20\tScooby\tbrown\n), 'Line 0');
$line = $f->getline();
is($line, undef, 'end of file');
$f->close();
unlink("$dir/person", "$dir/robot", "$dir/animal");
}
sub setup_files_and_classes {
my $ds = shift;
my $dir = $URT::DataSource::SomeFileMux::BASE_PATH;
my $delimiter = $ds->delimiter;
unlink("$dir/person", "$dir/robot", "$dir/animal");
my $file = "$dir/person";
my $f = IO::File->new(">$file") || die "Can't open $file for writing: $!";
$f->print(join($delimiter, qw(1 Joel grey)),"\n");
$f->print(join($delimiter, qw(2 Mike blue)),"\n");
$f->print(join($delimiter, qw(4 Frank black)),"\n");
$f->print(join($delimiter, qw(5 Clayton green)),"\n");
$f->close();
$file = "$dir/robot";
$f = IO::File->new(">$file") || die "Can't open $file for writing: $!";
$f->print(join($delimiter, qw(8 Crow gold)),"\n");
$f->print(join($delimiter, qw(10 Tom red)),"\n");
$f->print(join($delimiter, qw(12 Gypsy purple)),"\n");
$f->close();
my $c = UR::Object::Type->define(
class_name => 'URT::Thing',
id_by => [
thing_id => { is => 'Integer' },
],
has => [
thing_name => { is => 'String' },
thing_color => { is => 'String' },
thing_type => { is => 'String' },
],
table_name => 'wefwef',
data_source => 'URT::DataSource::SomeFileMux',
);
ok($c, 'Created class');
}