Hi,
recently I try to use Apache::Test with HTTP::Cookies. But it did not work as
expected. I suppose the way to add a cookie_jar to A::T was with
'Apache::TestRequest::user_agent'. I read the docs from
Apache::TestRequest::user_agent. Here is the relevant part of it.
And finally, the semantics of the "requests_redirectable"
parameter is different than for "LWP::UserAgent": It
either follows redirects for a request, or it doesn't.
Thus "requests_redirectable" is a boolean value instead of
the array reference that "LWP::UserAgent" expects. To
This implies to me that I have the choice to enable or disable redirects for
this useragent with a bool value.
Apache::TestRequest::user_agent(
reset => 1,
cookie_jar => $cookie_jar,
requests_redirectable => 1
);
But this way the cookies are ignored. I expected that
HTTP::Cookies->extract_cookies is called after every request. Therefor I
create the cookie_jar from
package My::Cookies;
use base 'HTTP::Cookies';
sub extract_cookies {
warn "extract_cookies!!!";
shift->SUPER::extract_cookies(@_);
}
To get it work, I need to parse the cookie headers myself or
Apache::TestRequest::user_agent(
reset => 1,
cookie_jar => $cookie_jar,
requests_redirectable => 0
);
But here I need to redirect myself or do it with the undocumented
Apache::TestRequest::user_agent(
reset => 1,
cookie_jar => $cookie_jar,
requests_redirectable => [qw~x y~]
);
that does anything I want but is undocumented!
Here is a part from Apache::TestRequest::user_agent that looks wrong to me.
my $redir = $args->{requests_redirectable};
if (ref $redir and (@$redir > 1 or $redir->[0] ne 'POST')) {
$RedirectOK = 1;
} else {
$RedirectOK = 0;
}
##############################
And a test script.
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest qw'GET POST';
plan tests => 3, have 'LWP';
require HTTP::Cookies;
require HTML::Form;
use Data::Dumper;
package My::Cookies;
use base 'HTTP::Cookies';
sub extract_cookies {
warn "extract_cookies!!!";
shift->SUPER::extract_cookies(@_);
}
package main;
my $cookie_jar = My::Cookies->new;
Apache::TestRequest::user_agent(
reset => 1,
cookie_jar => $cookie_jar,
requests_redirectable => [qw/c d/]
);
# check if we can request a page
my $r = GET '/x';
ok t_cmp( $r->code, 200, '$r->code == HTTP_OK?');
ok t_cmp( qr:\Qnew account:, $r->content, "new account page" );
$r = POST '/y', [
email => '[EMAIL PROTECTED]',
login => 'boris16',
];
ok t_cmp( $r->code, 200, '$r->code == HTTP_OK?');
--
Boris