File: 98-02-document-synopsis.t

package info (click to toggle)
libvalidation-class-perl 7.900057-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 1,616 kB
  • sloc: perl: 21,493; makefile: 2
file content (123 lines) | stat: -rw-r--r-- 2,692 bytes parent folder | download | duplicates (5)
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
use utf8;
use strict;
use warnings;
use Test::More;

{

    package T1;

    use Validation::Class;

    field  'title';
    field  'rating';
    field  'name';
    field  'id';

    document 'company' => {
        'company.name'                  => 'name',
        'company.supervisor.name'       => 'name',
        'company.supervisor.rating.@.*' => 'rating',
        'company.tags.@'                => 'name'
    };

    package main;

    my $class;

    eval { $class = T1->new; };

    ok "T1" eq ref $class, "T1 instantiated";

    my $person = {
        "id"      => "1234-ABC",
        "name"    => "Anita Campbell-Green",
        "title"   => "Designer",
        "company" => {
            "name"       => "House of de Vil",
            "supervisor" => {
                "name"   => "Cruella de Vil",
                "rating" => [
                    {   "support"  => -9,
                        "guidance" => -9
                    }
                ]
            },
            "tags" => [
                "evil",
                "cruelty",
                "dogs"
            ]
        },
    };

    ok $class->validate_document(company => $person), "T1 document (company) validated";

}

{

    package T2;

    use Validation::Class;

    field  'id' => {
        mixin      => [':str'],
        filters    => ['numeric'],
        max_length => 2,
    };

    field  'name' => {
        mixin      => [':str'],
        pattern    => qr/^[A-Za-z ]+$/,
        max_length => 20,
    };

    field  'tag' => {
        mixin      => [':str'],
        pattern    => qr/^(?!evil)\w+/,
        max_length => 20,
    };

    document 'company' => {
        'id'                            => 'id',
        'company.name'                  => 'name',
        'company.supervisor.name'       => 'name',
        'company.tags.@'                => 'tag'
    };

    package main;

    my $class;

    eval { $class = T2->new(ignore_unknown => 1); };

    ok "T2" eq ref $class, "T2 instantiated";

    my $person = {
        "id"      => "1234-ABC",
        "name"    => "Anita Campbell-Green",
        "title"   => "Designer",
        "company" => {
            "name"       => "House of de Vil",
            "supervisor" => {
                "name"   => "Cruella de Vil",
                "rating" => [
                    {   "support"  => -9,
                        "guidance" => -9
                    }
                ]
            },
            "tags" => [
                "evil",
                "cruelty",
                "dogs"
            ]
        },
    };

    ok ! $class->validate_document(company => $person), "T2 document (company) did not validate";

}

done_testing;