[vuser] r590 committed - - Fix test code to make it easier to test specific modules...

2 views
Skip to first unread message

codesite...@google.com

unread,
Jul 2, 2010, 3:27:28 PM7/2/10
to vuser-...@googlegroups.com
Revision: 590
Author: perlstalker
Date: Fri Jul 2 12:26:12 2010
Log: - Fix test code to make it easier to test specific modules
- Add RetrieveAllGroupsInDomain and RetrieveAllGroupsForMember

http://code.google.com/p/vuser/source/detail?r=590

Modified:
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Groups/V2_0.pm
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/ProvisioningAPI.pm
/VUser-Google-ProvisioningAPI/trunk/t/tests/My/Test/Class.pm

/VUser-Google-ProvisioningAPI/trunk/t/tests/Test/VUser/Google/Groups/V2_0.pm

=======================================
--- /VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Groups/V2_0.pm Sat
Dec 12 22:21:21 2009
+++ /VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Groups/V2_0.pm Fri
Jul 2 12:26:12 2010
@@ -131,11 +131,51 @@

sub RetrieveAllGroupsInDomain {
my $self = shift;
+
+ return $self->RetrieveAllGroupsForMember();
+
+# my $url = $self->base_url.$self->google->domain;
+
+# my @groups = ();
+
+# if ($self->google->Request('GET', $url)) {
+# foreach my $entry_xml (@{ $self->google->result->{'entry'} }) {
+# my $entry = $self->_build_group_entry($entry_xml);
+# push @groups, $entry;
+# }
+# }
+# else {
+# die "Cannot retrieve all groups in domain: ".
+# $self->google->result->{'reason'};
+# }
+
+# return @groups;
}

sub RetrieveAllGroupsForMember {
my $self = shift;
my $member = shift;
+
+ my $url = $self->base_url.$self->google->domain;
+ if ($member) {
+ $url = '?member='.$member;
+ }
+
+ my @groups = ();
+
+ if ($self->google->Request('GET', $url)) {
+ foreach my $entry_xml (@{ $self->google->result->{'entry'} }) {
+ my $entry = $self->_build_group_entry($entry_xml);
+ push @groups, $entry;
+ }
+ }
+ else {
+ die "Cannot retrieve all groups in domain: ".
+ $self->google->result->{'reason'};
+ }
+
+ return @groups;
+
}

sub DeleteGroup {
@@ -155,6 +195,29 @@
}

sub AddMemberToGroup {
+ my $self = shift;
+ my %options = @_;
+
+ die "Cannot add member to group: No member specified\n" if not
$options{'member'};
+ die "Cannot add member to group: No group specified\n" if not
$options{'group'};
+
+ my $url = $self->base_url.$self->google->domain
+ .'/'.$options{group}.'/member';
+
+ my $post = '<?xml version="1.0" encoding="UTF-8"?>
+<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:apps="http://schemas.google.com/apps/2006"
+ xmlns:gd="http://schemas.google.com/g/2005">';
+
+ $post .= "<apps:property name=\"memberId\"
value=\"$options{'member'}\"/>";
+ $post .= '</atom:entry>';
+
+ if ($self->google->Request('POST', $url, $post)) {
+ return 1;
+ }
+ else {
+ die "Cannot add member to group: ".$self->google->result->{'reason'}."\n";
+ }
}

sub RetrieveAllMembersOfGroup {
=======================================
--- /VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/ProvisioningAPI.pm
Sat Feb 14 16:07:12 2009
+++ /VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/ProvisioningAPI.pm
Fri Jul 2 12:26:12 2010
@@ -81,6 +81,8 @@

=head1 DESCRIPTION

+B<VUser::Google::ProvisioningAPI::* is depricated in favor of
VUser::Google::ApiProtocol and VUser::Google::Provisioning.>
+
VUser::Google::ProvisioningAPI provides a simple interface to the Google
Apps for Your Domain Provisioning API.
It uses the C<LWP::UserAgent> module for the HTTP transport, and the
C<HTTP::Request> module for the HTTP request and response.

=======================================
--- /VUser-Google-ProvisioningAPI/trunk/t/tests/My/Test/Class.pm Thu Dec 3
22:36:05 2009
+++ /VUser-Google-ProvisioningAPI/trunk/t/tests/My/Test/Class.pm Fri Jul 2
12:26:12 2010
@@ -5,7 +5,38 @@
use Test::Most;
use base qw(Test::Class Class::Data::Inheritable);

+use vars qw($gapps_domain $gapps_admin $gapps_passwd);
+
BEGIN {
+
+ $gapps_domain = $ENV{GAPPS_DOMAIN};
+ $gapps_admin = $ENV{GAPPS_ADMIN};
+ $gapps_passwd = $ENV{GAPPS_PASSWD};
+
+ print STDERR "Domain: $gapps_domain\n";
+
+ if (not $gapps_domain
+ and not $gapps_admin
+ and not $gapps_passwd
+ ) {
+ plan skip_all =>
+ "Set the GAPPS_DOMAIN, GAPPS_ADMIN or GAPPS_PASSWD environment
variables to run tests.";
+ exit;
+ }
+
+ if (defined $ENV{GAPPS_SKIP_LONG_TESTS}) {
+ $Test::VUser::Google::SKIP_LONG_TESTS = $ENV{GAPPS_SKIP_LONG_TESTS}?1:0;
+ }
+
+ if (not defined $Test::VUser::Google::SKIP_LONG_TESTS) {
+ $Test::VUser::Google::SKIP_LONG_TESTS = 0;
+ print STDERR "\nSome of the tests can take a long time to complete.";
+ print STDERR " (20 minutes or more)\n";
+ print STDERR "Would you like to skip these tests? [y/N]: ";
+ my $response = <STDIN>;
+ $Test::VUser::Google::SKIP_LONG_TESTS = 1 if $response =~ /^y/i;
+ }
+
__PACKAGE__->mk_classdata('class');
}

@@ -24,10 +55,10 @@
sub create_google {
use VUser::Google::ApiProtocol::V2_0;
my $google = VUser::Google::ApiProtocol::V2_0->new(
- domain => $ENV{GAPPS_DOMAIN},
- admin => $ENV{GAPPS_ADMIN},
+ domain => $ENV{GAPPS_DOMAIN},
+ admin => $ENV{GAPPS_ADMIN},
password => $ENV{GAPPS_PASSWD},
- debug => 1
+ debug => $ENV{GAPPS_DEBUG} || 0,
);

return $google;
=======================================
---
/VUser-Google-ProvisioningAPI/trunk/t/tests/Test/VUser/Google/Groups/V2_0.pm
Sat Dec 12 22:21:21 2009
+++
/VUser-Google-ProvisioningAPI/trunk/t/tests/Test/VUser/Google/Groups/V2_0.pm
Fri Jul 2 12:26:12 2010
@@ -42,7 +42,7 @@
'... and delete suceeded';
}

-sub RetrieveUser : Tests(6) {
+sub RetrieveGroup : Tests(6) {
my $test = shift;
my $class = $test->class;

@@ -126,5 +126,102 @@
ok $api->DeleteGroup($group),
'... and delete suceeded';
}
+
+sub AddMemberToGroup : Tests(8) {
+ my $test = shift;
+ my $class = $test->class;
+
+ my $api = $class->new(google => $test->create_google);
+
+ ## create test group
+ my $group = $test->get_test_group;
+
+ my $entry = $api->CreateGroup(
+ groupId => $group,
+ groupName => "test group $group",
+ description => 'test group descr',
+ emailPermission => 'Domain',
+ );
+
+ isa_ok $entry, 'VUser::Google::Groups::GroupEntry',
+ '... and the create succeeded';
+
+ ## add member to group
+ can_ok $api, 'AddMemberToGroup';
+ $api->AddMemberToGroup(
+ 'member' => 'te...@example.com',
+ 'group' => $group
+ );
+
+ ## get group members
+ TODO: {
+ local $TODO = '...';
+ is 0, '2048',
+ '... and member is in the group';
+ }
+
+ ## remove group member
+ TODO: {
+ local $TODO = 'RemoveMemberOfGroup not written';
+ can_ok $api, 'RemoveMemberOfGroup';
+ ok $api->RemoveMemberOfGroup(
+ 'member' => 'te...@example.com',
+ 'group' => $group
+ );
+ }
+
+ ## get group members, member deleted?
+ TODO: {
+ local $TODO = '...';
+ is 0, '2048',
+ '... and member is in the group';
+ }
+
+ ## delete group
+ can_ok $api, 'DeleteGroup';
+ ok $api->DeleteGroup($group),
+ '... and delete suceeded';
+}
+
+sub RetrieveAllGroupsInDomain : Tests(13) {
+ my $test = shift;
+ my $class = $test->class;
+
+ my $api = $class->new(google => $test->create_google);
+ can_ok $api, 'RetrieveAllGroupsInDomain';
+
+ my @c_groups = (); # created groups
+
+ my $base_group = $test->get_test_group;
+
+ for my $i (0 .. 3) {
+ my $entry = $api->CreateGroup(
+ groupId => $base_group.$i,
+ groupName => "test group $base_group$i",
+ description => 'test group descr'.$i,
+ emailPermission => 'Domain',
+ );
+
+ push @c_groups, $entry;
+ }
+
+ my @r_groups = $api->RetrieveAllGroupsInDomain;
+
+ for my $i (0 .. 3) {
+ is $r_groups[$i]->GroupId,
$c_groups[$i]->GroupId.'@'.$api->google->domain,
+ "... [$i] groupId matches";
+
+ is $r_groups[$i]->GroupName, $c_groups[$i]->GroupName,
+ "... [$i] groupName matches";
+
+ is $r_groups[$i]->Description, $c_groups[$i]->Description,
+ "... [$i] description matches";
+ }
+
+ ## Clean up
+ foreach my $group (@c_groups) {
+ $api->DeleteGroup($group->GroupId);
+ }
+}

1;

Reply all
Reply to author
Forward
0 new messages