Commit | Line | Data |
53d47b78 |
1 | use strict; |
2 | use warnings FATAL => 'all'; |
3 | |
05aafc1a |
4 | use Test::More qw(no_plan); |
53d47b78 |
5 | |
6 | { |
7 | use Web::Simple 'PostTest'; |
8 | package PostTest; |
60647485 |
9 | sub dispatch_request { |
5705ec1e |
10 | sub (%:foo=&:bar~) { |
53d47b78 |
11 | $_[1]->{bar} ||= 'EMPTY'; |
12 | [ 200, |
13 | [ "Content-type" => "text/plain" ], |
14 | [ join(' ',@{$_[1]}{qw(foo bar)}) ] |
15 | ] |
16 | }, |
05aafc1a |
17 | sub (*baz=) { |
18 | [ 200, |
19 | [ "Content-type" => "text/plain" ], |
20 | [ $_[1]->reason || $_[1]->filename ], |
21 | ] |
22 | }, |
24ecd3bd |
23 | sub (POST + %* + %biff=) { |
24 | $_[1]->{bar} ||= 'EMPTY'; |
25 | [ 200, |
26 | [ "Content-type" => "text/plain" ], |
27 | [ join(' ',@{$_[1]}{qw(biff bong)}) ] |
28 | ] |
29 | }, |
92e23550 |
30 | } |
53d47b78 |
31 | } |
32 | |
33 | use HTTP::Request::Common qw(GET POST); |
34 | |
35 | my $app = PostTest->new; |
1bba6f88 |
36 | sub run_request { $app->run_test_request(@_); } |
53d47b78 |
37 | |
9f3d2dd9 |
38 | my $get = run_request(GET 'http://localhost/'); |
53d47b78 |
39 | |
40 | cmp_ok($get->code, '==', 404, '404 on GET'); |
41 | |
9f3d2dd9 |
42 | my $no_body = run_request(POST 'http://localhost/'); |
53d47b78 |
43 | |
44 | cmp_ok($no_body->code, '==', 404, '404 with empty body'); |
45 | |
9f3d2dd9 |
46 | my $no_foo = run_request(POST 'http://localhost/' => [ bar => 'BAR' ]); |
53d47b78 |
47 | |
48 | cmp_ok($no_foo->code, '==', 404, '404 with no foo param'); |
49 | |
9f3d2dd9 |
50 | my $no_bar = run_request(POST 'http://localhost/' => [ foo => 'FOO' ]); |
53d47b78 |
51 | |
52 | cmp_ok($no_bar->code, '==', 200, '200 with only foo param'); |
53 | |
54 | is($no_bar->content, 'FOO EMPTY', 'bar defaulted'); |
55 | |
56 | my $both = run_request( |
9f3d2dd9 |
57 | POST 'http://localhost/' => [ foo => 'FOO', bar => 'BAR' ] |
53d47b78 |
58 | ); |
59 | |
60 | cmp_ok($both->code, '==', 200, '200 with both params'); |
61 | |
62 | is($both->content, 'FOO BAR', 'both params returned'); |
05aafc1a |
63 | |
64 | my $upload = run_request( |
65 | POST 'http://localhost' |
66 | => Content_Type => 'form-data' |
67 | => Content => [ |
68 | foo => 'FOO', |
69 | bar => 'BAR' |
70 | ] |
71 | ); |
72 | |
73 | cmp_ok($upload->code, '==', 200, '200 with multipart'); |
74 | |
75 | is($upload->content, 'FOO BAR', 'both params returned'); |
76 | |
24ecd3bd |
77 | my $upload_splat = run_request( |
78 | POST 'http://localhost' |
79 | => Content_Type => 'form-data' |
80 | => Content => [ |
81 | biff => 'frew', |
82 | bong => 'fru' |
83 | ] |
84 | ); |
85 | |
86 | cmp_ok($upload_splat->code, '==', 200, '200 with multipart'); |
87 | |
88 | is($upload_splat->content, 'frew fru', 'both params returned'); |
89 | |
05aafc1a |
90 | my $upload_wrongtype = run_request( |
9f3d2dd9 |
91 | POST 'http://localhost' |
05aafc1a |
92 | => [ baz => 'fleem' ] |
93 | ); |
94 | |
95 | is( |
96 | $upload_wrongtype->content, |
97 | 'field baz exists with value fleem but body was not multipart/form-data', |
98 | 'error points out wrong body type' |
99 | ); |
100 | |
101 | my $upload_notupload = run_request( |
102 | POST 'http://localhost' |
103 | => Content_Type => 'form-data' |
104 | => Content => [ baz => 'fleem' ] |
105 | ); |
106 | |
107 | is( |
108 | $upload_notupload->content, |
109 | 'field baz exists with value fleem but was not an upload', |
110 | 'error points out field was not an upload' |
111 | ); |
112 | |
113 | my $upload_isupload = run_request( |
114 | POST 'http://localhost' |
115 | => Content_Type => 'form-data' |
116 | => Content => [ |
117 | baz => [ |
118 | undef, 'TESTFILE', |
119 | Content => 'test content', 'Content-Type' => 'text/plain' |
120 | ], |
121 | ] |
122 | ); |
123 | |
124 | is( |
125 | $upload_isupload->content, |
126 | 'TESTFILE', |
127 | 'Actual upload returns filename ok' |
128 | ); |