#!/usr/bin/perl use warnings; use strict; # Test User::Identity::Collection use lib qw/. ../; use Test::More tests => 44; BEGIN { use_ok('User::Identity::Collection::Locations'); use_ok('User::Identity'); } my $ui = 'User::Identity'; my $uil = 'User::Identity::Location'; my $uic = 'User::Identity::Collection'; my $uicl = 'User::Identity::Collection::Locations'; sub same_obj($$$) { my ($l, $r, $msg) = @_; is("$l", "$r", $msg); } # # We need a user to test with # my $user = $ui->new('markov' , firstname => 'Mark', surname => 'Overmeer' , titles => 'drs.', initials => 'M.A.C.J.' , language => 'nl-NL', charset => 'iso-8859-15' ); ok(defined $user, "Created a user"); # # Now an location # my $loc = $uil->new ( 'home' , street => 'Pad 12' , postal_code => '66341 XA' , city => 'Arnhem' , country => 'Nederland' , country_code => 'nl' , phone => '+18-12-2344556' , fax => '+11-11-2344556' ); ok(defined $loc, "Created a location"); ok(!defined $loc->user, "User-less location"); # # Now a location collection # my $col = $uicl->new; ok(defined $col, "Created a location collection"); isa_ok($col, $uic, "Is a collection"); isa_ok($col, $uicl, "Correct collection"); cmp_ok($col->roles, '==', 0, "No roles yet"); cmp_ok(scalar @$col, '==', 0, "No overloaded roles yet"); ok(! defined $loc->parent, "Role has no parent yet"); same_obj($loc, $col->addRole($loc), "Add prepared role"); cmp_ok($col->roles, '==', 1, "First role in collection"); same_obj($loc->parent, $col, "Role's parent is collection"); cmp_ok(scalar @$col, '==', 1, "One overloaded role"); same_obj($col->[0], $loc, "The role is there"); is("$col", "locations: home"); ok(!defined $loc->user, "User-less location"); same_obj($user->addCollection($col), $col, "Adding collection to a user"); same_obj($col->user, $user, "User of collection"); same_obj($col->[0]->user, $user, "User of collection item"); # # find collection in ui # my $l = $user->collection('locations'); ok(defined $l, "Find locations"); isa_ok($l, $uicl); my $l2 = $user->collection('location'); ok(defined $l, "Find location"); same_obj($l, $l2, "location==locations"); my $e = $user->collection('email'); ok(! defined $e, "Not available email"); # # Fast forward location # my $w = $user->add(location => [ work => street => 'at home' ]); ok(defined $w, "Work location created"); isa_ok($w, $uil); same_obj($w->user, $user, "Knows about user"); cmp_ok(scalar $col->roles, '==', 2, "Found pre-defined collection"); cmp_ok(@$col, '==', 2, "Visible in overload as well"); is("$col", "locations: home, work", "Stringification"); # # Find # my $f = $user->find(location => 'work'); ok(defined $f, "Found anything"); same_obj($w, $f, "Found work back"); $f = $user->find(location => 'unknown'); ok(! defined $f, "Unknown role"); $f = $user->find(unknown => 'work'); ok(! defined $f, "Unknown collection"); # # Add a whole new group at once # ok(! $user->find(email => 'private')); $w = $user->add(email => [ private => address => 'markov@cpan.org' ]); ok(defined $w, "Private email created"); $col = $user->collection('email'); ok(defined $col, "Email collection created"); isa_ok($col, $uic); isa_ok($col, "${uic}::Emails"); $f = $user->find(email => 'private'); ok(defined $f, "Found anything"); isa_ok($f, "${ui}::Item"); isa_ok($f, "Mail::Identity");