The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 14;

use File::Basename;
use lib File::Basename::dirname(__FILE__)."/../../lib";

use File::Temp;
use Cwd;

use UR;

my $current_dir = Cwd::cwd;
END { chdir $current_dir };  # so the temp dir can get cleaned up

my $tempdir = File::Temp::tempdir(CLEANUP => 1);
ok($tempdir, 'make temp dir');
chdir($tempdir);

push @INC,$tempdir; # so it can find the namespace modules it's creating

my $cmd = UR::Namespace::Command::Define::Namespace->create(nsname => 'NewNamespace');
ok($cmd, 'create UR::Namespace::Command::Define::Namespace');

$cmd->dump_status_messages(0);
$cmd->dump_error_messages(0);
$cmd->dump_warning_messages(0);
$cmd->queue_status_messages(1);
$cmd->queue_error_messages(1);
$cmd->queue_warning_messages(1);

ok($cmd->execute, 'execute');

my $namespace = UR::Namespace->get('NewNamespace');
ok($namespace, 'Namespace object created');

my $data_source = UR::DataSource->get('NewNamespace::DataSource::Meta');
ok($data_source, 'Metadata data source object created');

ok(-f 'NewNamespace.pm', 'NewNamespace.pm module exists');
ok(-d 'NewNamespace', 'NewNamespace directory exists');
ok(-d 'NewNamespace/DataSource', 'NewNamespace/DataSource directory exists');
ok(-f 'NewNamespace/DataSource/Meta.pm', 'NewNamespace/DataSource/Meta.pm module exists');
ok(-f 'NewNamespace/Vocabulary.pm', 'NewNamespace/Vocabulary.pm module exists');

my @messages = $cmd->status_messages();
is($messages[0], 'A   NewNamespace (UR::Namespace)', 'Message adding NewNamespace');
is($messages[1], 'A   NewNamespace::Vocabulary (UR::Vocabulary)', 'Message adding vocabulary');
is($messages[2], 'A   NewNamespace::DataSource::Meta (UR::DataSource::Meta)', 'Message adding meta datasource');
like($messages[3],
     qr(A   /.+/NewNamespace/DataSource/Meta\.sqlite3n?-dump [(]Metadata DB skeleton[)]),
     'Message adding metaDB dump file');