File: 000-request-retrieve.t

package info (click to toggle)
libponapi-client-perl 0.002012-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 292 kB
  • sloc: perl: 941; makefile: 2
file content (106 lines) | stat: -rw-r--r-- 2,819 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!perl

use strict;
use warnings;

use Test::More;
use Test::Moose;

BEGIN {
    use_ok('PONAPI::Client::Request::Retrieve');
}

my %TEST_DATA = (
    type    => 'articles',
    id      => 2,
    fields  => { articles => [qw< title body >] },
    include => [qw< comments author >],
);

subtest '... testing object' => sub {

    my $req = PONAPI::Client::Request::Retrieve->new( %TEST_DATA );

    isa_ok( $req, 'PONAPI::Client::Request::Retrieve');
    does_ok($req, 'PONAPI::Client::Request');
    does_ok($req, 'PONAPI::Client::Request::Role::IsGET');
    does_ok($req, 'PONAPI::Client::Request::Role::HasType');
    does_ok($req, 'PONAPI::Client::Request::Role::HasId');
    does_ok($req, 'PONAPI::Client::Request::Role::HasFields');
    does_ok($req, 'PONAPI::Client::Request::Role::HasFilter');
    does_ok($req, 'PONAPI::Client::Request::Role::HasInclude');
    does_ok($req, 'PONAPI::Client::Request::Role::HasPage');

    can_ok( $req, 'request_params' );

};

subtest '... testing request parameters' => sub {

    my $req = PONAPI::Client::Request::Retrieve->new( %TEST_DATA );

    my $EXPECTED = +{
        method       => 'GET',
        path         => '/articles/2',
        query_string => 'fields%5Barticles%5D=title%2Cbody&include=comments%2Cauthor',
    };

    my $GOT = +{ $req->request_params };

    is_deeply( $GOT, $EXPECTED, 'checked request parametes' );

};

subtest '... testing request path base' => sub {

    my $req = PONAPI::Client::Request::Retrieve->new(
        %TEST_DATA,
        uri_base => '/myAPI/v3/',
    );

    my $EXPECTED = +{
        method       => 'GET',
        path         => '/myAPI/v3/articles/2',
        query_string => 'fields%5Barticles%5D=title%2Cbody&include=comments%2Cauthor',
    };

    my $GOT = +{ $req->request_params };

    is_deeply( $GOT, $EXPECTED, 'checked request parametes' );

};

subtest '... testing request path templating' => sub {
    foreach my $template (
        '/a/test/of/uri/template/path/with/id/{id}/and/type/{type}',
        '{}/a//path/with/id/{id}/and/type/{type}',
        "_woah_what_is_{type}_key_{id}_doing_here_",
        "-{type}-{id}-"
    )
    {
        my $req = PONAPI::Client::Request::Retrieve->new(
            %TEST_DATA,
            uri_template => $template,
        );

        (my $expected_path = $template) =~ s/
            \{
                ( [^}]+ )
            \}
        /
            my $meth = $1;
            eval { $req->$meth } || ""
        /egx;
        my $EXPECTED = {
            method => 'GET',
            path => $expected_path,
            query_string =>
              'fields%5Barticles%5D=title%2Cbody&include=comments%2Cauthor',
        };

        my $GOT = +{ $req->request_params };
        is_deeply( $GOT, $EXPECTED, 'checked request parametes' );
    }
};

done_testing;