--- trunk/t/2_soap.t 2005/05/17 22:23:40 39 +++ trunk/t/2_soap.t 2005/08/02 19:41:28 70 @@ -3,25 +3,46 @@ use strict; use blib; -use Test::More tests => 11; +use Test::More tests => 38; BEGIN { use_ok('Nos'); use_ok('SOAP::Transport::HTTP'); use_ok('SOAP::Lite'); + use_ok('Cwd'); }; -ok(my $nos = new Nos::SOAP('dsn' => 'dbi:Pg:dbname=notices'), "new"); +my $debug = 0; +my $list_name = 'SOAP test'; + +$debug = 1 if (@ARGV); + +my $aliases = Cwd::abs_path($0); +$aliases =~ s#/[^/]*$#/#; +$aliases .= 'aliases'; + +ok($aliases, "using aliases file $aliases"); + +ok(new Nos::SOAP( + 'dsn' => 'dbi:Pg:dbname=notices', + 'aliases' => $aliases, +), "new"); ok(my $daemon = new SOAP::Transport::HTTP::Daemon(LocalAddr => 'localhost')->dispatch_to('Nos::SOAP'), "SOAP daemon"); +# start server + my $pid; +unless ($pid = fork) { -$SIG{CHLD} = 'IGNORE'; + local $SIG{HUP} = sub { + diag "exiting SOAP server"; + exit 0; + }; -unless ($pid = fork) { diag "SOAP server at ", $daemon->url; $daemon->handle; + } diag "child pid: $pid"; @@ -31,40 +52,146 @@ ->uri('http://localhost/Nos/SOAP/') ->proxy($daemon->url); +$soap->on_debug(sub{print "## ", join("\n## ",@_), "\n";}) if ($debug); + +# NewList + ok(my $list_id = $soap->NewList({ - list => 'SOAP test', - email => 'soap-test@example.com', -})->result, "NewList"); + list => $list_name, + from => 'SOAP list', + email => 'soap-test@example.com', +})->result, "NewList named"); + +ok(my $list_id2 = $soap->NewList( + $list_name, + 'SOAP test list', + 'soap-test@example.com', +)->result, "NewList positional"); + +cmp_ok($list_id, '==', $list_id2, "list_id $list_id"); -diag "list_id: $list_id"; + +# AddMemberToList ok(my $member_id = $soap->AddMemberToList({ - list => 'SOAP test', + list => $list_name, email => 'dpavlin@rot13.org', name => 'Dobrica Pavlinusic', -})->result, "AddMemberToList"); + ext_id => 42, +})->result, "AddMemberToList named"); -diag "member_id: $member_id"; +ok(my $member_id2 = $soap->AddMemberToList( + $list_name, + 'dpavlin@rot13.org', + 'Dobrica Pavlinusic', + 42, +)->result, "AddMemberToList positional"); -ok(my $message_id = $soap->AddMessageToList({ - list => 'SOAP test', - message => 'To: member@example.com +cmp_ok($member_id, '==', $member_id2, "member_id: $member_id"); + + +ok($member_id = $soap->AddMemberToList({ + list => $list_name, + email => 'nobody@example.com', +})->result, "AddMemberToList named"); + +ok($member_id2 = $soap->AddMemberToList( + $list_name, + 'nobody@example.com', +)->result, "AddMemberToList positional"); + +cmp_ok($member_id, '==', $member_id2, "member_id: $member_id"); + +# AddMessageToList + +my $msg = 'To: member@example.com From: mylist@example.com Subject: text This is a dummy test -', -})->result, "AddMessageToList"); +'; + +ok(my $message_id = $soap->AddMessageToList({ + list => $list_name, + message => $msg, +})->result, "AddMessageToList named"); -diag "message_id: $message_id"; +ok(my $message_id2 = $soap->AddMessageToList( + $list_name, + $msg, +)->result, "AddMessageToList positional"); -ok(kill('TERM' => $pid), "kill $pid"); +cmp_ok($message_id, '==', $message_id2, "message_id: $message_id"); -sleep 1; -print `ps ax`; -ok(! kill(0, $pid), "child dead"); +# ListMembers + +ok(my $arr = $soap->ListMembers({ + list => $list_name, +})->result, "ListMembers named"); + +ok(my $arr2 = $soap->ListMembers( + $list_name, +)->result, "ListMembers positional"); + +eq_array($arr, $arr2, "members lists same"); + +cmp_ok($#{$arr}, '==', 1, "member count ok"); + +cmp_ok($arr->[0]->{'full_name'}, '==', 'Dobrica Pavlinusic', "full_name"); +cmp_ok($arr->[0]->{'email'}, '==', 'dpavlin@rot13.org', "email"); + +cmp_ok($arr->[1]->{'email'}, '==', 'nobody@example.com', "email"); + +# DeleteMember + +ok($soap->DeleteMemberFromList({ + list => $list_name, + email => $arr->[0]->{'email'}, +})->result, "DeleteMemberFromList ".$arr->[0]->{'email'}); + + +ok($arr = $soap->ListMembers({ + list => $list_name, +})->result, "ListMembers named"); + +cmp_ok($#{$arr}, '==', 0, "member deleted"); + +# DeleteList + +ok($soap->DeleteList({ + list => $list_name, +})->result, "DeleteList named"); + +ok(my $has_members = $soap->ListMembers({ + list => $list_name, +})->result, "ListMembers for $list_name"); + +cmp_ok($#{$has_members}, '==', -1, "ok, no members"); + +ok($list_id = $soap->NewList({ + list => $list_name, + from => 'SOAP list', + email => 'soap-test@example.com', +})->result, "NewList $list_name (recreated)"); + +ok($soap->DeleteList( + $list_name, +)->result, "DeleteList positional"); + +ok($has_members = $soap->ListMembers({ + list => $list_name, +})->result, "ListMembers for $list_name"); + +cmp_ok($#{$has_members}, '==', -1, "ok, no members"); + +# kill server + +ok(kill('HUP' => $pid), "kill $pid"); ok(waitpid($pid,0), "waitpid"); +ok(! kill(0, $pid), "child dead"); + exit 1; +