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.
ngcp-panel/t/api-rest/api-rewriterules.t

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: