The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use utf8;
use strict;
use warnings;
use Test::More;

package T;

use Validation::Class;

package main;

my $data = {
    "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"
        ]
    },
};

my $schema = {
    'id'                        => {mixin => [':num'], max_length => 4},
    'name'                      => {mixin => [':str'], min_length => 2},
    'title'                     => {mixin => [':str'], min_length => 5},
    'company.name'              => {mixin => [':str'], min_length => 2},
    'company.tags.@'            => {mixin => [':str'], min_length => 2},
    'company.super*.name'       => {mixin => [':str'], min_length => 2},
    'company.super*.rating.@.*' => {mixin => [':str'], },
};

my $class;

eval { $class = T->new };

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

can_ok $class, 'validate_document';

ok $class->validate_document($schema => $data), "T (ad-hoc data) validated";
ok $data->{id} !~ /\D/, "document ID has been filtered";

done_testing;