File: | t/controller-attachment.t |
Coverage: | 100.0% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | #!/usr/bin/env perl | ||||||
2 | 1 1 | 1863 3 | use v5.24; | ||||
3 | |||||||
4 | 1 1 1 | 163 67144 3 | use Test2::V0; | ||||
5 | |||||||
6 | 1 1 1 1 1 1 1 | 1588 11496 5 503 3 1 11 | use ok('Yukki::Web::Context'); | ||||
7 | 1 1 1 1 1 1 1 | 361 1 4 556 2 1 12 | use ok('Yukki::Web::Controller::Attachment'); | ||||
8 | |||||||
9 | 1 | 92673 | my $mock_file = mock 'Yukki::Model::File' => ( | ||||
10 | add_constructor => [new => 'hash'], | ||||||
11 | add => [ | ||||||
12 | fetch => 'fake content', | ||||||
13 | ], | ||||||
14 | ); | ||||||
15 | |||||||
16 | my $mock_repo = mock 'Yukki::Model::Repository' => ( | ||||||
17 | add_constructor => [new => 'hash'], | ||||||
18 | add => [ | ||||||
19 | 1 | 4 | file => sub { Yukki::Model::File->new }, | ||||
20 | 1 | 362 | ], | ||||
21 | ); | ||||||
22 | |||||||
23 | my $mock_app = mock 'Yukki::Web' => ( | ||||||
24 | add_constructor => [new => 'hash'], | ||||||
25 | add => [ | ||||||
26 | 1 | 29 | model => sub { Yukki::Model::Repository->new }, | ||||
27 | 1 | 249 | ], | ||||
28 | ); | ||||||
29 | 1 | 236 | my $app = Yukki::Web->new; | ||||
30 | 1 | 9 | isa_ok $app, 'Yukki::Web'; | ||||
31 | |||||||
32 | 1 | 258 | my $attachment = Yukki::Web::Controller::Attachment->new( | ||||
33 | app => $app, | ||||||
34 | ); | ||||||
35 | |||||||
36 | { | ||||||
37 | 1 | 6 | my $ctx = Yukki::Web::Context->new( | ||||
38 | env => {}, | ||||||
39 | ); | ||||||
40 | |||||||
41 | 1 | 31 | $ctx->request->path_parameters->{action} = 'invalid'; | ||||
42 | |||||||
43 | like dies { | ||||||
44 | 1 | 12 | $attachment->fire($ctx); | ||||
45 | }, | ||||||
46 | 1 | 67 | qr/attachment action does not exist/, | ||||
47 | 'no action causes exception'; | ||||||
48 | } | ||||||
49 | |||||||
50 | { | ||||||
51 | 1 1 1 | 1482 190 20 | my $ctx = Yukki::Web::Context->new( | ||||
52 | env => {}, | ||||||
53 | ); | ||||||
54 | |||||||
55 | 1 | 30 | $ctx->request->path_parameters->{action} = 'download'; | ||||
56 | 1 | 63 | $ctx->request->path_parameters->{repository} = 'x'; | ||||
57 | 1 | 43 | $ctx->request->path_parameters->{file} = ['y']; | ||||
58 | |||||||
59 | 1 | 32 | $attachment->fire($ctx); | ||||
60 | |||||||
61 | 1 | 60 | is $ctx->response->content_type, 'application/octet', 'CT for downloads'; | ||||
62 | 1 | 441 | is $ctx->response->body, ['fake content'], 'response body contains expected content'; | ||||
63 | } | ||||||
64 | |||||||
65 | 1 | 578 | done_testing; |