|
subtest 'no-rebase-on-empty-path' => sub {
my $rebase_rule_called = 0;
my $errors = validator({})->rebase( '/a' => sub {
$rebase_rule_called = 1;
})->errors;
is_deeply $errors , [], "no errors" ;
is $rebase_rule_called , 0, "no rebase rule has been called" ;
};
subtest 'rebase-simple' => sub {
my $data = [
{
a => {
b => [1],
c => {
dd => { v1 => 2 },
ee => [ 3, 4 ],
}
},
},
{
zz => [6],
}
];
my @visited_bases ;
my $errors = validator( $data )->rebase( '/*/*[key eq "a"]' => sub {
my $v = shift ;
push @visited_bases , $v ->current_base;
$v ->(
on => '/b/0' ,
should => sub {
push @visited_bases , "/0/a/b/0" ;
$_ [0] == 1;
},
because => '...r1...' ,
);
$v ->rebase( '/c' => sub {
my $v = shift ;
push @visited_bases , $v ->current_base;
$v ->(
on => '/dd/v1' ,
should => sub {
push @visited_bases , "/0/a/c/dd/v1" ;
$_ [0] == 2;
},
because => '...r2...' ,
)->(
on => '/ee/*' ,
should => sub {
push @visited_bases , "/0/a/c/ee" ;
@_ == 2 && $_ [0] == 3 && $_ [1] == 4;
},
because => '...r3..' ,
)->(
on => '//1/zz/*' ,
should => sub {
push @visited_bases , "/1/zz/1" ;
$_ [0] == 6;
},
because => '...r5...' ,
);
});
})->(
on => '/1/zz/*' ,
should => sub {
push @visited_bases , "/1/zz/1" ;
$_ [0] == 6;
},
because => '...r4...' ,
)->errors;
is_deeply $errors , [], "no errors" ;
@visited_bases = sort @visited_bases ;
is_deeply \ @visited_bases , [
"/0/a" ,
"/0/a/b/0" ,
"/0/a/c" ,
"/0/a/c/dd/v1" ,
"/0/a/c/ee" ,
"/1/zz/1" ,
"/1/zz/1" ,
], "visited routes with rebasing are correct" ;
};
done_testing;
|