#!perl # Tests for undo feature. We do a couple of undo-able # functions, then we undo them. use strict; use warnings; use Test::More tests => 7; use WebService::RTMAgent; use File::Copy; copy("t/config","/tmp/config") or die "Could not copy config file to /tmp\n"; $WebService::RTMAgent::config_file = "/tmp/config"; # 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"); ok($ua->tasks_add("name=\"A new task\""), "Adding a task"); ok($WebService::RTMAgent::config->{undo}->[0]->{op} eq "rtm.tasks.add", "Stored undo info"); ok($ua->tasks_add("name=\"A new task\""), "Adding another task"); ok($WebService::RTMAgent::config->{undo}->[1]->{op} eq "rtm.tasks.add", "Stored undo info"); use Data::Dumper; my $undoable = $ua->get_undoable; ok($undoable->[1]->{op} eq "rtm.tasks.add", "get_undoable returns list"); # The actual undo doesn't need to be tested, it's just a # normal request using what's in the list. ok($ua->clear_undo(1), "Remove an undoable"); ok(scalar @{$ua->get_undoable} == 1, "remove worked");