BPM-Engine

 view release on metacpan or  search on metacpan

t/02-store/06-pi-attributes.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Test::Fatal;
use t::TestUtils;

my $schema = schema();
my $package = $schema->resultset('Package')->create({});
my $process = $schema->resultset('Process')->create({ package_id => $package->id });

#-- create

my $rs = $schema->resultset('ProcessInstanceAttribute');
isa_ok(exception { $rs->create() }, 'DBIx::Class::Exception');
like(  exception { $rs->create() }, qr/create needs a hashref/);
# mysql: execute failed: Field 'process_instance' doesn't have a default value
isa_ok(exception { $rs->create({}) }, 'DBIx::Class::Exception');
#like(  exception { $rs->create({}) }, qr/process_instance_id may not be NULL/);
# mysql: execute failed: Field 'name' doesn't have a default value
isa_ok(exception { $rs->create({ process_instance_id => 1 }) }, 'DBIx::Class::Exception');
#like(  exception { $rs->create({ process_instance_id => 1 }) }, qr/name may not be NULL/);

my $pi = $process->new_instance();
my $pia = $rs->create({ process_instance_id => $pi->id, name => 'some var' });
is($rs->count, 1);
isa_ok($pia, 'BPM::Engine::Store::Result::ProcessInstanceAttribute');
$pia->delete();
is($rs->count, 0);

ok($pia->process_instance);
$schema->resultset('ProcessInstance')->create({ process_id => $process->id });
isa_ok($pia->process_instance, 'BPM::Engine::Store::Result::ProcessInstance');


#-- add_to_attributes

$pi = $process->new_instance();

isa_ok(exception { $pi->add_to_attributes() }, 'DBIx::Class::Exception');
like(  exception { $pi->add_to_attributes() }, qr/needs a hash/);
isa_ok(exception { $pi->add_to_attributes({}) }, 'DBIx::Class::Exception');
# mysql: execute failed: Field 'name' doesn't have a default value
#like(  exception { $pi->add_to_attributes({}) }, qr/wfe_process_instance_attr.name may not be NULL/);

ok($pi->add_to_attributes({ name => 'e1',  }));
ok($pi->add_to_attributes({ name => 'e2', value => undef }));
ok($pi->add_to_attributes({ name => 'e3', value => \'NULL' }));
foreach(qw/e1 e2 e3/) {
    ok(!defined $pi->attribute($_)->value);
    }

ok($pi->add_to_attributes({ name => 'e4', value => '' }));
like(exception { $pi->attribute('e4')->value }, qr/malformed JSON string/, 'value, if any, should be a reference');
ok($pi->add_to_attributes({ name => 'e5', value => 'NULL' })); # string
like(exception { $pi->attribute('e5')->value }, qr/malformed JSON string/, 'value, if any, should be a reference');

ok($pi->add_to_attributes({ name => '' }));
isa_ok(exception { $pi->add_to_attributes({ name => ''}) }, 'DBIx::Class::Exception');
# mysql: execute failed: Duplicate entry '3-'
#like(  exception { $pi->add_to_attributes({ name => ''}) }, qr/columns process_instance_id, name are not unique/);

ok( $pi->add_to_attributes({ name => 'number', is_array => 0, value => [55] }), 'number attribute added');
ok( $pi->add_to_attributes({ name => 'string', is_array => 0, value => ['Some Thing'] }), 'string attribute added' );
#ok( $pi->add_to_attributes({ name => 'list',   is_array => 0, value => [55] }), 'list attribute added' );



( run in 1.189 second using v1.01-cache-2.11-cpan-54e63673c56 )