--- trunk/t/2_soap.t 2005/05/17 22:23:40 39 +++ trunk/t/2_soap.t 2006/12/18 19:35:04 90 @@ -3,25 +3,48 @@ use strict; use blib; -use Test::More tests => 11; +use Test::More tests => 40; 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"); +use Data::Dump qw/dump/; + +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(my $nos = new Nos::SOAP( + 'dsn' => 'dbi:Pg:dbname=notices', + 'aliases' => $aliases, +), "new Nos::SOAP"); 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 +54,179 @@ ->uri('http://localhost/Nos/SOAP/') ->proxy($daemon->url); -ok(my $list_id = $soap->NewList({ - list => 'SOAP test', - email => 'soap-test@example.com', -})->result, "NewList"); +$soap->on_debug(sub{print "## ", join("\n## ",@_), "\n";}) if ($debug); + +# CreateList + +ok(my $list_id = $soap->CreateList({ + list => $list_name, + from => 'SOAP list', + email => 'soap-test@example.com', +})->result, "CreateList named"); -diag "list_id: $list_id"; +ok(my $list_id2 = $soap->CreateList( + $list_name, + 'SOAP test list', + 'soap-test@example.com', +)->result, "CreateList positional"); + +cmp_ok($list_id, '==', $list_id2, "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"); +'; -diag "message_id: $message_id"; +ok(my $message_id = $soap->AddMessageToList({ + list => $list_name, + message => $msg, +})->result, "AddMessageToList named"); -ok(kill('TERM' => $pid), "kill $pid"); +ok(my $message_id2 = $soap->AddMessageToList( + $list_name, + $msg, +)->result, "AddMessageToList positional"); -sleep 1; -print `ps ax`; +cmp_ok($message_id, '==', $message_id2, "message_id: $message_id"); -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"); + +diag "arr = ", dump($arr) if ($debug); +cmp_ok($arr->[0]->{'name'}, 'eq', 'Dobrica Pavlinusic', "name"); +cmp_ok($arr->[0]->{'email'}, 'eq', 'dpavlin@rot13.org', "email"); + +cmp_ok($arr->[1]->{'email'}, 'eq', '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"); + +# DropList + +ok($soap->DropList({ + list => $list_name, +})->result, "DropList 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->CreateList({ + list => $list_name, + from => 'SOAP list', + email => 'soap-test@example.com', +})->result, "CreateList $list_name (recreated)"); + +ok($soap->DropList( + $list_name, +)->result, "DropList positional"); + +ok($has_members = $soap->ListMembers({ + list => $list_name, +})->result, "ListMembers for $list_name"); + +cmp_ok($#{$has_members}, '==', -1, "ok, no members"); + +diag "I should add e-mail send test!"; + +=for next_version + +ok(my $nos = new Nos( + 'dsn' => 'dbi:Pg:dbname=notices', + 'aliases' => $aliases, +), "new NOS"); + +# or + +ok(my $sent = $nos->_nos_object->send_queued_messages( + list => $list_name, + driver => 'Test', + sleep => 0, +), "send_queued_messages for $list_name"); + +my @emails = Email::Send::Test->emails; + +diag "emails = ", dump( @emails ); + +=cut + +# replay to messages + +ok(my $received = $soap->MessagesReceived({ + list => $list_name, +})->result, "MessagesReceived for $list_name"); + +diag "received = ", dump($received) if ($debug); +cmp_ok( scalar @$received, '==', 0, 'no messages' ); + +# kill server + +ok(kill('HUP' => $pid), "kill $pid"); ok(waitpid($pid,0), "waitpid"); +ok(! kill(0, $pid), "child dead"); + exit 1; +