Testing file Uploading
examples/dancer/uploader/test.t
use strict; use warnings; use Test::More; use Plack::Test; use Plack::Util; use HTTP::Request::Common; use File::Temp qw(tempdir); use Path::Tiny qw(path); my $source_dir = tempdir( CLEANUP => 1 ); my $upload_dir = tempdir( CLEANUP => 1 ); $ENV{UPLOAD_DIR} = $upload_dir; my $app = Plack::Util::load_psgi './app.psgi'; my $test = Plack::Test->create($app); subtest main => sub { my $res = $test->request(GET '/'); is $res->status_line, '200 OK', 'Status'; is $res->content, '<a href="/upload">Upload</a>', 'Content'; }; subtest empty_upload => sub { my $res = $test->request(POST '/upload'); is $res->status_line, '200 OK', 'Status'; is $res->content, 'Error', 'Content is error'; }; subtest upload => sub { my $filename = path($source_dir, 'abc.txt'); my $original_content = "First row\nSecond row\n"; path($filename)->spew($original_content); my $res = $test->request(POST '/upload', Content_Type => 'form-data', Content => [ file => [$filename, 'new.txt']]); is $res->status_line, '200 OK', 'Status'; is $res->content, 'Uploaded', 'Response Content'; my $uploaded_file = path($upload_dir)->child('new.txt'); ok -e $uploaded_file, 'file exists'; my $uploaded_content = $uploaded_file->slurp; is $uploaded_content, $original_content, 'content was uploaded'; }; done_testing();