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