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.
153 lines
6.3 KiB
153 lines
6.3 KiB
use strict;
|
|
use warnings;
|
|
|
|
use Test::More;
|
|
use Test::Collection;
|
|
use Test::FakeData;
|
|
use Data::Dumper;
|
|
|
|
my $test_machine = Test::Collection->new(
|
|
name => 'cfdestinationsets',
|
|
QUIET_DELETION => 1,
|
|
);
|
|
my $fake_data = Test::FakeData->new;
|
|
|
|
$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)};
|
|
|
|
$fake_data->set_data_from_script({
|
|
'cfdestinationsets' => {
|
|
data => {
|
|
destinations => [
|
|
{
|
|
destination => "customhours",
|
|
priority => 1,
|
|
timeout => 300,
|
|
announcement_id => sub { return shift->get_id('soundhandles_custom_announcements',@_); },,
|
|
},
|
|
#without announcement
|
|
{
|
|
destination => "customhours",
|
|
priority => 1,
|
|
timeout => 300,
|
|
}
|
|
],
|
|
name => "Weekend days",
|
|
subscriber_id => sub { return shift->get_id('subscribers',@_); },
|
|
},
|
|
},
|
|
});
|
|
|
|
$test_machine->DATA_ITEM_STORE($fake_data->process('cfdestinationsets'));
|
|
$test_machine->form_data_item( );
|
|
|
|
# create 3 new billing zones from DATA_ITEM
|
|
$test_machine->check_create_correct( 3, sub{ $_[0]->{name} .= $_[1]->{i} ; } );
|
|
$test_machine->check_get2put();
|
|
$test_machine->check_bundle();
|
|
|
|
diag('Note that the next tests require at least one subscriber to be present ' .
|
|
'and accessible to the current API user.');
|
|
|
|
# fetch a cfdestinationset for testing that
|
|
{
|
|
my ($res, $content) = $test_machine->check_item_get('/api/cfdestinationsets/?page=1&rows=10', "fetch cfdestinationsets collection");
|
|
($res, $content) = $test_machine->check_item_get('/api/cftimesets/?page=1&rows=10', "fetch cftimesets collection");
|
|
}
|
|
|
|
# fetch a cfdestinationset being a reseller
|
|
SKIP:
|
|
{
|
|
my ($res,$sub1,$cf_collection1,$cft_collection1,$cf_collection2,$cft_collection2);
|
|
|
|
{#todo: move to fake_data
|
|
my $reseller_admin = $test_machine->get_item_hal('admins','/api/admins/?login=api_test');
|
|
if (!(exists $reseller_admin->{total_count} && $reseller_admin->{total_count})) {
|
|
$fake_data->test_machine($test_machine);#because we removed shared certs when runas admin
|
|
my $data = $fake_data->process('admins');
|
|
$data->{login} = 'api_test';
|
|
$data->{password} = 'api_test';
|
|
$data->{lawful_intercept} = 0;
|
|
my($res,$content) = $test_machine->request_post($data, '/api/admins/');
|
|
$test_machine->http_code_msg(201, "create reseller",$res,$content);
|
|
$test_machine->set_reseller_credentials($data);
|
|
}
|
|
}
|
|
$test_machine->runas('reseller');
|
|
|
|
($res, $cf_collection1) = $test_machine->request_get('/api/cfdestinationsets/?page=1&rows=10');
|
|
if ($res->code == 401) { # Authorization required
|
|
skip("Couldn't login as reseller", 1);
|
|
}
|
|
is($res->code, 200, "fetch cfdestinationsets collection as reseller");
|
|
|
|
($res, $cft_collection1) = $test_machine->check_item_get('/api/cftimesets/?page=1&rows=10', "fetch cftimesets collection as reseller");
|
|
|
|
($res, $sub1) = $test_machine->check_item_get('/api/subscribers/?page=1&rows=1',"fetch a subscriber of our reseller for testing");
|
|
if ($sub1->{total_count} < 1) {
|
|
skip("Precondition not met: need a subscriber",1);
|
|
}
|
|
my $sub1_id = $test_machine->get_id_from_hal($sub1,'subscribers');
|
|
cmp_ok ($sub1_id, '>', 0, "should be positive integer");
|
|
|
|
|
|
($res, $cf_collection2) = $test_machine->check_item_get('/api/cfdestinationsets/?page=1&rows=10&subscriber_id='.$sub1_id, "fetch cfdestinationsets collection as reseller with subscriber filter");
|
|
|
|
cmp_ok($cf_collection1->{total_count}, '>=', $cf_collection2->{total_count},
|
|
"filtered collection (cfdestinationsets) should be smaller or equal");
|
|
|
|
# --------
|
|
|
|
($res, $cft_collection2) = $test_machine->check_item_get('/api/cftimesets/?page=1&rows=10&subscriber_id='.$sub1_id, "fetch cftimesets collection as reseller with subscriber filter");
|
|
|
|
cmp_ok($cft_collection1->{total_count}, '>=', $cft_collection2->{total_count},
|
|
"filtered collection (cftimesets) should be smaller or equal");
|
|
}
|
|
|
|
{
|
|
$test_machine->runas('admin');
|
|
|
|
my($res, $content) = $test_machine->request_get('/api/callforwards/99987');
|
|
is($res->code, 404, "check get nonexistent callforwards item");
|
|
|
|
($res, $content) = $test_machine->request_get('/api/cfdestinationsets/99987');
|
|
is($res->code, 404, "check get nonexistent cfdestinationsets item");
|
|
|
|
($res, $content) = $test_machine->request_get('/api/cftimesets/99987');
|
|
is($res->code, 404, "check get nonexistent cftimesets item");
|
|
}
|
|
{
|
|
#5954
|
|
my($res,$content,$req);
|
|
$test_machine->runas('admin');
|
|
my $d = $test_machine->check_create_correct( 1, sub{
|
|
$_[0]->{name} .= '5954' ;
|
|
} )->[0];
|
|
ok(exists $d->{content}->{destinations}->[0]->{announcement_id},"Check announcement_id existence");
|
|
|
|
my (undef,$announcement_hal) = $test_machine->check_item_get('/api/soundhandles/'.$d->{content}->{destinations}->[0]->{announcement_id});
|
|
ok($announcement_hal->{group} eq 'custom_announcements', 'Check announcement group' );
|
|
|
|
$d->{content}->{destinations}->[0]->{announcement_id} = 'aaa';
|
|
($res,$content,$req) = $test_machine->request_put(@$d{qw/content location/});
|
|
$test_machine->http_code_msg(422, "Check invalid announcement_id", $res, $content);
|
|
|
|
$d->{content}->{destinations}->[0]->{announcement_id} = '999999';
|
|
($res,$content,$req) = $test_machine->request_put(@$d{qw/content location/});
|
|
$test_machine->http_code_msg(422, "Check absent announcement_id", $res, $content);
|
|
|
|
my $wrong_announcement_hal = $test_machine->get_item_hal('soundhandles', '/api/soundhandles/?group=pbx');
|
|
$d->{content}->{destinations}->[0]->{announcement_id} = $wrong_announcement_hal->{content}->{id};
|
|
($res,$content,$req) = $test_machine->request_put(@$d{qw/content location/});
|
|
$test_machine->http_code_msg(422, "Check announcement_id from other group", $res, $content);
|
|
|
|
}
|
|
$test_machine->runas('admin');
|
|
$fake_data->clear_test_data_all();
|
|
$test_machine->clear_test_data_all();
|
|
undef $fake_data;
|
|
undef $test_machine;
|
|
done_testing;
|
|
|
|
# vim: set tabstop=4 expandtab:
|