Entering MooseX, Part the Tenth
Well back on the Moose path again and today a little post on my next test for my first little Moosex. Like I said in my last post I like my tests to be simple and functional.
I did have look at the test suite for MooseX-AuthorizedMethods and for me it was a little too Mooseish fro my tastes, I guess he was very keen on testing to see if bits of Moose worked rather than focusing on the functionality of the modual. For example I did not see test of using a Custom Verifiers at least one that I could figure out. Like I said in a previous post, one of those would been nice.
So lets just stick with the basic functionality no need I think to get into all the Moose side of stuff with the meta etc.
So I start with
#!perl -T
use Test::More tests => 1;
use Test::Moose::More;
use_ok('MooseX::AuthorizedMethodRoles');
Well I need some roles and then a package with some a few methods with my declartor applied. I like it simple and stupid so here we go
{
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');
}
{
package test_one_of_pass;
use MooseX::AuthorizedMethodRoles;
with 'test_role1';
authorized_roles ping => {one_of=>['test_role1','test_role2']}, sub {
return "ping test_one_of_pass";
};
}
{
package test_one_of_fail;
use MooseX::AuthorizedMethodRoles;
with 'test_role3';
authorized_roles ping => {one_of=>['test_role1','test_role2']}, sub {
return "ping test_one_of_fail";
};
}
{
package test_required_pass;
use MooseX::AuthorizedMethodRoles;
with 'test_role1';
authorized_roles ping => { required =>['test_role1']}, sub {
return "ping test_required_pass";
};
}
{
package test_required_fail;
use MooseX::AuthorizedMethodRoles;
with 'test_role2';
authorized_roles ping => { required =>['test_role1']}, sub {
return "ping test_required_fail";
};
}
{
package test_required_pass_2;
use MooseX::AuthorizedMethodRoles;
with qw(test_role1 test_role2);
authorized_roles ping => { required =>['test_role1','test_role2']}, sub {
return "ping test_required_pass_2";
};
}
{
package test_required_fail_2;
use MooseX::AuthorizedMethodRoles;
with qw(test_role1 test_role2);
authorized_roles ping => { required =>['test_role1','test_role2','test_role3']}, sub {
return "ping test_required_fail_2";
};
}
{
package test_all;
use MooseX::AuthorizedMethodRoles;
with qw(test_role1 test_role3);
authorized_roles ping => { required =>['test_role1'],
one_of=>['test_role2','test_role3']}, sub {
return "ping test_all";
};
}
and now just some very simple tests for the above
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");
my $test3 = test_required_pass->new();
ok($test3->ping(),"test_required_pass");
my $test4 = test_required_fail->new();
eval {
$test4->ping();
};
ok(scalar($@),"test_required_fail");
my $test5 = test_required_pass_2->new();
ok($test5->ping(),"test_required_pass_2");
my $test6 = test_required_fail_2->new();
eval {
$test6->ping();
};
ok(scalar($@),"test_required_fail_2");
my $test7 = test_all->new();
ok($test7->ping(),"test_all");
and my basic API is covered, and yes in the file I did go back and changed the test count from 1 to 8 so it all works. I ran it was happy so so am I. Now what this simple test set does give you is a good example of how it is suppose to work. I can't tell you the number of times I have had to dig into the .t files of a mod to see how it really should work when shall we say the POD just doesn't cut it.
The only little note on the test is my using scalar($@) to ensure my method call failed. I have found in the past that differing flavors of OS/Test will handle $@ differently and may result in false positives so this just enforces what I want.
Well that is a start I still have a number of other things to test such as the die messages, using the wrong key on the API or missing an array on the API and I think I should test using an improper key in the API.
Oh well there are a few posts left in this me thinks
N.B.
Seems I had a bug in the original version of this post. See this post on how I goofed.
Leave a comment