#!perl # Tests for the authentication sequence. We start from an # empty config file, get a frob, then a token and a # timeline. use strict; use warnings; use Test::More tests => 7; use WebService::RTMAgent; my $config_file = "/tmp/config"; $WebService::RTMAgent::config_file = $config_file; unlink $WebService::RTMAgent::config_file; # Overload RTMAgent::request so as to not do any actual requests # Instead, we use request.* files that contains the tested # requests, and return the expected responses found in # response.* files. package RTMTestAgent; use base 'WebService::RTMAgent'; use HTTP::Response; use HTTP::Status; # Load all the requests and expected responses. my %responses; foreach my $req_file (glob 't/request.*') { local $/; undef $/; open my $f, $req_file or die "Unable to open $req_file: $!\n"; my $req = <$f>; my $res_file = $req_file; $res_file =~ s/request/response/; open $f, $res_file or die "Unable to open $res_file:$!\n"; my $res = <$f>; $responses{$req} = $res; } sub request { my ($self, $req) = @_; my $req_str = $req->as_string; die "No such request:\n####\n$req_str####\n" unless exists $responses{$req_str}; return HTTP::Response->parse($responses{$req_str}); } package main; my $ua = new RTMTestAgent; $ua->api_key("key"); $ua->api_secret("secret"); # check invalid frob works $WebService::RTMAgent::config->{frob} = 1234; eval { $ua->init; }; ok($@ =~ "101: Invalid frob", "Invalid frob is caught"); # check invalid token works $WebService::RTMAgent::config->{token} = 1234; eval { $ua->init; }; ok($@ =~ /98: Login failed/, "Invalid token is caught"); # Authentication URL tests ok($ua->get_auth_url eq "http://www.rememberthemilk.com/services/auth/?api_key=key&perms=delete&frob=0c9107b07a7e64fa460af183a6c0f01e7d0e3d54&api_sig=60e3e68636e2319a8977606c05499df5", "Checking authentication URL"); ok($WebService::RTMAgent::config->{frob} eq "0c9107b07a7e64fa460af183a6c0f01e7d0e3d54", "Checking the config file"); # Getting token and timeline ok($ua->init, "Initialising user agent"); ok($WebService::RTMAgent::config->{token} eq "token", "Checking token"); ok($WebService::RTMAgent::config->{timeline} eq "tl", "Checking timeline");