silence warnings in tests
[catagits/Catalyst-Runtime.git] / t / query_keywords_and_parameters.t
CommitLineData
4910fc25 1use warnings;
2use strict;
3use Test::More;
4
5# Test case for reported issue when an action consumes JSON but a
6# POST sends nothing we get a hard error
7
8{
9 package MyApp::Controller::Root;
10 $INC{'MyApp/Controller/Root.pm'} = __FILE__;
11
12 use base 'Catalyst::Controller';
13
14 sub bar :Local Args(0) GET {
15 my( $self, $c ) = @_;
16 }
17
18 package MyApp;
19 use Catalyst;
20 MyApp->setup;
21}
22
23use HTTP::Request::Common;
24use Catalyst::Test 'MyApp';
25
26# These tests assume that the decoding that occurs for the query string follows
27# the payload decoding algorithm described here:
88e5a8b0 28# https://www.w3.org/TR/html5/forms.html#url-encoded-form-data
4910fc25 29
30{
3dbe9f3d 31 ok my $req = GET 'root/bar';
4910fc25 32
33 my ($res, $c) = ctx_request($req);
34
35 ok !defined($c->req->query_keywords), 'query_keywords is not defined when no ?';
36 is_deeply $c->req->query_parameters, {}, 'query_parameters defined, but empty for no ?';
37}
38
39
40{
3dbe9f3d 41 ok my $req = GET 'root/bar?';
4910fc25 42
43 my ($res, $c) = ctx_request($req);
44
b44833b8 45 ok !defined $c->req->query_keywords, 'query_keywords is not defined when ? with empty query string';
4910fc25 46 is_deeply $c->req->query_parameters, {}, 'query_parameters defined, but empty with empty query string';
47}
48
49
50{
3dbe9f3d 51 ok my $req = GET 'root/bar?a=b';
4910fc25 52
53 my ($res, $c) = ctx_request($req);
54
55 ok !defined($c->req->query_keywords), 'query_keywords undefined when isindex not set';
56 is_deeply $c->req->query_parameters, { a => 'b' }, 'query_parameters defined for ?a=b';
57}
58
59
60{
3dbe9f3d 61 ok my $req = GET 'root/bar?x';
4910fc25 62
63 my ($res, $c) = ctx_request($req);
64
65 is $c->req->query_keywords, 'x', 'query_keywords defined for ?x';
66 # The algorithm reads like 'x' should be treated as a value, not a name.
67 # Perl does not support undef as a hash key. I feel this would be the best
68 # alternative as isindex is moving towards complete deprecation.
69 is_deeply $c->req->query_parameters, { 'x' => undef }, 'query_parameters defined for ?x';
70}
71
72
73{
3dbe9f3d 74 ok my $req = GET 'root/bar?x&a=b';
4910fc25 75
76 my ($res, $c) = ctx_request($req);
77
78 is $c->req->query_keywords, 'x', 'query_keywords defined for ?x&a=b';
79 # See comment above about the 'query_parameters defined for ?x' test case.
80 is_deeply $c->req->query_parameters, { 'x' => undef, a => 'b' }, 'query_parameters defined for ?x&a=b';
81}
82
83
84done_testing();