Entering MooseX, The Last Test I Promise*
Well nearing the end of my test now, I have done the basic stuff in this post,the api parts here, the validation bits in this one and the instance bits with my last one. So to carry on I think it would be prudent to test this in a composed setting though I doubt anyone would use it like that.
So will name this one 40-composit and I start as usual with my testing boilerplate and my three little roles
#!perl -T
use Test::More;
{
package test_role1;
use Moose::Role;
has 'nothing_r1 '=> (is => 'ro',default=>'role 1');
}
{
package test_role2;
use Moose::Role;
has 'nothing_r2' => (is => 'ro',default=>'role 2');
}
{
package test_role3;
use Moose::Role;
has 'nothing_r3' => (is => 'ro',default=>'role 3');
}
Next I lifted the test class from the original .t and adapted it to my use like this;
{ package MyRole;
use Moose::Role;
with 'MooseX::Meta::Method::Role::Authorized';
};
Next I use some new test packages this time I create them as standard Moose classes with one sub and one of my test role
{
package test_one_of_pass;
use Moose;
with 'test_role2';
sub ping {
return "ping test_one_of_pass";
}
}
{
package test_one_of_fail;
use Moose;
with 'test_role2';
sub ping {
return "ping test_one_of_fail";
};
}
Now the very Mooseish bits, I get the meta class for the 'ping' method from my class like this;
my $meth = test_one_of_pass->meta->get_method('ping');
my $meth2 = test_one_of_fail->meta->get_method('ping');
Next I apply the 'MyRole' to that method, This one has the 'MooseX::Meta::Method::Role::Authorized' role and it has one param 'requires' and I need to fill that in with the API hashref in this test it is the 'one_of' key and array-ref
MyRole->meta->apply($meth, rebless_params => {requires=>{ one_of => ['test_role2'] }});
MyRole->meta->apply($meth2, rebless_params => {requires=>{ one_of => ['test_role3'] }});
Now I just redo the API test again like this;
my $test1 = test_one_of_pass->new();
ok($test1->ping(),"one_of pass");
my $test2 = test_one_of_fail->new();
eval {
$test2->ping();
};
ok(scalar($@),"test_one_of_fail");
and give it a run and I get
D:\Blogs\Moosex-AuthorizedMethodRoles\t\40-Composed.t ..
1..2
ok 1 - one_of pass
not ok 2 - test_one_of_fail
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/2 subtests
Opps!! That's not right failing #2 means I am able to call the 'ping' sub without a die, so looks like this may be the last test post but not the last post in this series because it looks like I have some debugging to do.
Leave a comment