You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
4.6 KiB
108 lines
4.6 KiB
use strict;
|
|
use warnings;
|
|
|
|
use Test::Collection;
|
|
use Test::FakeData;
|
|
use Test::More;
|
|
use Data::Dumper;
|
|
|
|
#init test_machine
|
|
my $test_machine = Test::Collection->new(
|
|
name => 'rewriterules',
|
|
embedded_resources => [qw/rewriterulesets/]
|
|
);
|
|
$test_machine->methods->{collection}->{allowed} = {map {$_ => 1} qw(GET HEAD OPTIONS POST)};
|
|
$test_machine->methods->{item}->{allowed} = {map {$_ => 1} qw(GET HEAD OPTIONS PUT PATCH DELETE)};
|
|
|
|
my $fake_data = Test::FakeData->new;
|
|
$fake_data->set_data_from_script({
|
|
rewriterules => {
|
|
data => {
|
|
set_id => sub { return shift->get_id('rewriterulesets',@_); },
|
|
#match_pattern => '^111$',
|
|
match_pattern => '^111$',
|
|
replace_pattern => '222',
|
|
description => 'test_api rewrite rule',
|
|
direction => 'in',#out
|
|
field => 'caller',#calee
|
|
priority => '1',
|
|
enabled => '1',
|
|
},
|
|
},
|
|
});
|
|
|
|
#for item creation test purposes /post request data/
|
|
$test_machine->DATA_ITEM_STORE($fake_data->process('rewriterules'));
|
|
|
|
$test_machine->form_data_item( );
|
|
# create 3 new field pbx devices from DATA_ITEM
|
|
my $rules = $test_machine->check_create_correct( 3, sub{
|
|
$_[0]->{description} .= $_[1]->{i};
|
|
#to test inflate/deflate
|
|
$_[0]->{match_pattern} = '${caller_in}_' . time().$_[1]->{i};
|
|
$_[0]->{replace_pattern} = '${caller_in}_' . time().$_[1]->{i};
|
|
} );
|
|
$test_machine->check_get2put();
|
|
$test_machine->check_bundle();
|
|
{
|
|
$rules->[1]->{content}->{match_pattern} = '${callee_in}_' . time();
|
|
$rules->[1]->{content}->{replace_pattern} = '${callee_in}_' . time();
|
|
$test_machine->request_put(@{$rules->[1]}{qw/content location/});
|
|
my ($res, $rule, $req) = $test_machine->check_item_get($rules->[1]->{location});
|
|
#While I don't know how to test raw data when we receive inflated
|
|
#so just checked in the DB
|
|
#print Dumper $rules->[1]->{content};
|
|
ok(exists $rule->{direction} && $rule->{direction} =~ /^(in|out)$/ , "check existence of direction");
|
|
ok(exists $rule->{field} && $rule->{field} =~ /^(caller|callee)$/, "check existence of field");
|
|
ok(exists $rule->{match_pattern} && length($rule->{match_pattern}) > 0, "check existence of match_pattern");
|
|
ok(exists $rule->{replace_pattern} && length($rule->{replace_pattern}) > 0, "check existence of replace_pattern");
|
|
ok(exists $rule->{description} && length($rule->{description}) > 0, "check existence of description");
|
|
ok(exists $rules->[1]->{content}->{_links}->{'ngcp:rewriterules'}, "check put presence of ngcp:rewriterules relation");
|
|
ok(exists $rules->[1]->{content}->{_links}->{'ngcp:rewriterulesets'}, "check put presence of ngcp:rewriterulesets relation");
|
|
}
|
|
# try to create rule with invalid set_id
|
|
{
|
|
my ($res, $err) = $test_machine->check_item_post(sub{$_[0]->{set_id} = 999999;});
|
|
is($res->code, 422, "create rule with invalid set_id");
|
|
is($err->{code}, "422", "check error code in body");
|
|
like($err->{message}, qr/Invalid 'set_id'/, "check error message in body");
|
|
}
|
|
# try to create rule with negative set_id
|
|
{
|
|
my ($res, $err) = $test_machine->check_item_post(sub{$_[0]->{set_id} = -100;});
|
|
is($res->code, 422, "create rule with negative set_id");
|
|
is($err->{code}, "422", "check error code in body");
|
|
like($err->{message}, qr/(Invalid|Validation failed).*'set_id'/, "check error message in body");
|
|
}
|
|
# try to create rule without set_id
|
|
{
|
|
my ($res, $err) = $test_machine->check_item_post(sub{ delete $_[0]->{set_id};});
|
|
is($res->code, 422, "create rule without set_id");
|
|
is($err->{code}, "422", "check error code in body");
|
|
like($err->{message}, qr/Required: 'set_id'|set_id.*required/, "check error message in body");
|
|
}
|
|
# try to create rule with missing match_pattern
|
|
{
|
|
my ($res, $err) = $test_machine->check_item_post(sub{ delete $_[0]->{match_pattern};});
|
|
is($res->code, 422, "create rule with missing match_pattern");
|
|
is($err->{code}, "422", "check error code in body");
|
|
like($err->{message}, qr/field='match_pattern'/, "check error message in body");
|
|
}
|
|
# try to create rule with invalid direction and field
|
|
{
|
|
my ($res, $err) = $test_machine->check_item_post(sub{
|
|
$_[0]->{direction} = 'foo';
|
|
$_[0]->{field} = 'bar';
|
|
});
|
|
is($res->code, 422, "create rule with invalid direction and field");
|
|
is($err->{code}, "422", "check error code in body");
|
|
like($err->{message}, qr/field='direction'/, "check error message in body");
|
|
like($err->{message}, qr/field='field'/, "check error message in body");
|
|
}
|
|
|
|
$test_machine->clear_test_data_all();
|
|
|
|
done_testing;
|
|
|
|
# vim: set tabstop=4 expandtab:
|