Yep. Ok, based on https://metacpan.org/pod/Test::Mojo#post_ok,
$t = $t->post_ok('http://example.com/foo'); $t = $t->post_ok('/foo'); $t = $t->post_ok('/foo' => {Accept => '*/*'} => 'Content!'); $t = $t->post_ok('/foo' => {Accept => '*/*'} => form => {a => 'b'}); $t = $t->post_ok('/foo' => {Accept => '*/*'} => json => {a => 'b'}); In my case, I have more than 1 file to upload. How would I fit the 2 files (Mojo::Asset::File) into the post_ok() body? Thank you On Friday, 24 July 2020 at 21:24:33 UTC+10 rabbi...@gmail.com wrote: > In the test, you're sending your files as JSON. Don't you mean to send > them as a multipart file upload, using the multipart generator. > > On Fri, Jul 24, 2020 at 12:43 PM Gordon Dollarnanda <anex...@gmail.com> > wrote: > >> Hi guys, >> >> Good day. >> >> I have my controller working perfectly for file uploads. >> I get my file uploads by doing >> >> *my* *@file_uploads* = *@{* *$self->req->uploads*() *}*; >> >> >> I tried writing the test before development but due to time >> constraints, I had to cheat and use something else like a webform which i >> kept posting to my controller. >> >> Done with the development now and Im picking up where I left off with >> the test. >> >> >> *What I want to achieve:* >> >> Create a Test::Mojo object which will upload 2 files into my Mojo >> application . >> >> *My test code:* >> >> >> * 27 my* *$t* = Test::Mojo->new(*'EMU'*); >> >> * 28 my* *$header* = Mojo::Headers->new->from_hash( *$t->app->conf->get*( >> *'test_default_headers'*) ); >> >> * 29 my* *$base_url* = *q{/emu/api/func/v6/fwm}*; >> >> * 30 my* *$user_info* = *$t->app->conf->get*(*'test_userinfo'*); >> >> * 31 * >> >> * 32 *{ >> >> * 33 * *my* *$file_1* = Mojo::Asset::File->new(); >> >> * 34 * *$file_1->add_chunk*(*' this is a test '*); >> >> * 35 * >> >> * 36 * *my* *$file_2* = Mojo::Asset::File->new(); >> >> * 37 * *$file_2->add_chunk*(*' this is another test '*); >> >> * 38 * >> >> * 39 * *my* *$userinfo* = >> *'ad...@mytestdomain.com.au:testPasswordHere'*; >> >> * 40 * >> >> * 41 * *my* *$specifc_device_scenario* = >> >> * 42 * { >> >> * 43 * *'url'* => *join*(*q{/}*, *$base_url*, *q{files}*), >> >> * 44 * *'header'* => *$header*, >> >> * 45 * *'contents'* => [ >> >> * 46 * *'format'* => *q{json}*, >> >> * 47 * *'file'* => [ >> >> * 48 * *'deviceTypeFile'* => *$file_1*, >> >> * 49 * *'deviceTypeFile'* => *$file_2*, >> >> * 50 * ], >> >> * 51 * ], >> >> * 52 * *'method'* => [ *'post'*, ], >> >> * 53 * *'content-type'* => *q{application/octet-stream}*, >> >> * 54 * }; >> >> * 55 * >> >> * 56 * *$header->append*( *'deviceTypeFile'* => *$file_1*); >> >> * 57 * *$header->append*( *'deviceTypeFile'* => *$file_2*); >> >> * 58 * >> >> * 59 * *my* *$request_url* = Mojo::URL->new( >> *$specifc_device_scenario->{**'url'**}*)->userinfo( >> >> * 60 * *$userinfo* >> >> * 61 * ); >> >> * 62 * >> >> * 63 * *$request_url->query*( *$specifc_device_scenario->{* >> *'contents'**}* ); >> >> * 64 * *$t->post_ok*( *$request_url*, *$specifc_device_scenario->{* >> *'header'**}*)->status_is(*200*, *q{Success in upload}* ); >> >> * 65 *} >> >> * 66 * >> >> * 67 *done_testing(); >> >> * 68 * >> >> >> >> *What I have tried to do:* >> >> In my controller , i dumped out the contents of the uploads: >> >> *my* *@file_uploads* = *@{* *$self->req->uploads*() *}*; >> >> *$self->log->debug*(*" the file uploads: "* . Dumper([ \ >> *@file_uploads* ] ) ); >> >> >> However, whether I used append (in line 56 and 57 ), or replaced append >> with 'add', or set the static file asset contents in the request object >> (in line 59 ), the file uploads persist to be blank. >> >> Very strangely, when I looked in my logs, this is what I see: >> >> >> [2020-07-24 19:26:23.55465] [30776] [debug] [_is_nOV1] Input data: >> >> { >> >> "file" => [ >> >> "deviceTypeFile", >> >> "Mojo::Asset::File=HASH(0x7fc606825b28)", >> >> "deviceTypeFile", >> >> "Mojo::Asset::File=HASH(0x7fc5e2102b90)" >> >> ], >> >> "format" => "json" >> >> } >> >> >> *Manual testing with a form:* >> >> When I use a webform and submit the contents via the form,it's perfect. >> The form's element name is 'deviceTypeFile'. >> >> I have also even used the following in the controller to no avail. >> >> *my* *@file_uploads* = *@{* *$self->req->uploads*('deviceTypeFile') >> *}*; >> >> >> *My question:* >> >> >> With the attempts above, can anyone please show me how to use >> Test::Mojo to test POSTing two file objects (Mojo::File::Asset) to a Mojo >> application? >> >> >> >> Thank you, everyone. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Mojolicious" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to mojolicious...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/mojolicious/4c7be939-a40e-494e-8360-b848ed98c8f9n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/mojolicious/4c7be939-a40e-494e-8360-b848ed98c8f9n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/mojolicious/8dd9e850-4185-4262-869b-1d9e836aa4cfn%40googlegroups.com.