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.
1094 lines
47 KiB
1094 lines
47 KiB
#use Sipwise::Base;
|
|
use Net::Domain qw(hostfqdn);
|
|
use JSON qw();
|
|
use Test::More;
|
|
use Data::Dumper;
|
|
|
|
my $is_local_env = 0;
|
|
|
|
my $uri = $ENV{CATALYST_SERVER} || ('https://'.hostfqdn.':4443');
|
|
|
|
my ($ua, $req, $res);
|
|
|
|
use Test::Collection;
|
|
$ua = Test::Collection->new()->ua();
|
|
|
|
#$ua->add_handler("request_send", sub {
|
|
# my ($request, $ua, $h) = @_;
|
|
# print $request->method . ' ' . $request->uri . "\n" . ($request->content ? $request->content . "\n" : '') unless $request->header('authorization');
|
|
# return undef;
|
|
#});
|
|
#$ua->add_handler("response_done", sub {
|
|
# my ($response, $ua, $h) = @_;
|
|
# print $response->decoded_content . "\n" if $response->code != 401;
|
|
# return undef;
|
|
#});
|
|
|
|
my $t = time;
|
|
my $reseller_id = 1;
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/domains/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
domain => 'test' . $t . '.example.org',
|
|
reseller_id => $reseller_id,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test domain");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch created test domain");
|
|
my $domain = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/billingprofiles/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json({
|
|
name => "test profile $t",
|
|
handle => "testprofile$t",
|
|
reseller_id => $reseller_id,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test billing profile");
|
|
my $billing_profile_id = $res->header('Location');
|
|
$billing_profile_id =~ s/^.+\/(\d+)$/$1/;
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/subscriberprofilesets/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => "subscriber_profile_1_set_".$t,
|
|
reseller_id => $reseller_id,
|
|
description => "subscriber_profile_1_set_description_".$t,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "POST test subscriberprofileset 1");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch POSTed test subscriberprofileset 1");
|
|
my $subscriberprofile1set = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/subscriberprofilesets/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => "subscriber_profile_2_set_".$t,
|
|
reseller_id => $reseller_id,
|
|
description => "subscriber_profile_2_set_description_".$t,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "POST test subscriberprofileset 2");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch POSTed test subscriberprofileset 2");
|
|
my $subscriberprofile2set = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/subscriberprofilesets/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => "subscriber_profile_3_set_".$t,
|
|
reseller_id => $reseller_id,
|
|
description => "subscriber_profile_3_set_description_".$t,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "POST test subscriberprofileset 3");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch POSTed test subscriberprofileset 3");
|
|
my $subscriberprofile3set = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('GET', $uri.'/api/subscriberpreferencedefs/');
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch profilepreferencedefs");
|
|
my $subscriberpreferencedefs = JSON::from_json($res->decoded_content);
|
|
|
|
my @subscriber_profile_attributes = ();
|
|
foreach my $attr (keys %$subscriberpreferencedefs) {
|
|
push(@subscriber_profile_attributes,$attr);
|
|
}
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/subscriberprofiles/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => "subscriber_profile_1_".$t,
|
|
profile_set_id => $subscriberprofile1set->{id},
|
|
attributes => \@subscriber_profile_attributes,
|
|
description => "subscriber_profile_1_description_".$t,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "POST test subscriberprofile 1");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch POSTed test subscriberprofile 1");
|
|
my $subscriberprofile1 = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/subscriberprofiles/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => "subscriber_profile_2_".$t,
|
|
profile_set_id => $subscriberprofile2set->{id},
|
|
attributes => \@subscriber_profile_attributes,
|
|
description => "subscriber_profile_2_description_".$t,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "POST test subscriberprofile 2");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch POSTed test subscriberprofile 2");
|
|
my $subscriberprofile2 = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/subscriberprofiles/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => "subscriber_profile_3_".$t,
|
|
profile_set_id => $subscriberprofile3set->{id},
|
|
attributes => \@subscriber_profile_attributes,
|
|
description => "subscriber_profile_3_description_".$t,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "POST test subscriberprofile 3");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch POSTed test subscriberprofile 3");
|
|
my $subscriberprofile3 = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/customercontacts/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
firstname => "cust_contact_first",
|
|
lastname => "cust_contact_last",
|
|
email => "cust_contact\@custcontact.invalid",
|
|
reseller_id => $reseller_id,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test customer contact");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch test customer contact");
|
|
my $custcontact = JSON::from_json($res->decoded_content);
|
|
|
|
my %subscriber_map = ();
|
|
my %customer_map = ();
|
|
|
|
goto SKIP;
|
|
{ #end_ivr:
|
|
my $customer = _create_customer(
|
|
type => "sipaccount",
|
|
);
|
|
my $cc = 800;
|
|
my $ac = '1'.(scalar keys %subscriber_map);
|
|
my $sn = $t;
|
|
my $subscriber = _create_subscriber($customer,
|
|
primary_number => { cc => $cc, ac => $ac, sn => $sn },
|
|
);
|
|
|
|
my $call_forwards = set_callforwards($subscriber,{ cfu => {
|
|
destinations => [
|
|
{ destination => "5678" },
|
|
{ destination => "autoattendant", },
|
|
],
|
|
}});
|
|
$call_forwards = set_callforwards($subscriber,{ cfu => {
|
|
destinations => [
|
|
{ destination => "5678" },
|
|
],
|
|
}});
|
|
_check_event_history("events generated using /api/callforwards: ",$subscriber->{id},"%ivr",[
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr" },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr" },
|
|
]);
|
|
}
|
|
|
|
#SKIP:
|
|
{ #end_ivr:
|
|
my $customer = _create_customer(
|
|
type => "sipaccount",
|
|
);
|
|
my $cc = 800;
|
|
my $ac = '1'.(scalar keys %subscriber_map);
|
|
my $sn = $t;
|
|
my $aliases = [
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0001' },
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0002' },
|
|
];
|
|
my $subscriber = _create_subscriber($customer,
|
|
primary_number => { cc => $cc, ac => $ac, sn => $sn },
|
|
alias_numbers => $aliases,
|
|
);
|
|
|
|
my $call_forwards = set_callforwards($subscriber,{ cfu => {
|
|
destinations => [
|
|
{ destination => "5678" },
|
|
{ destination => "autoattendant", },
|
|
],
|
|
}});
|
|
$call_forwards = set_callforwards($subscriber,{ cfu => {
|
|
destinations => [
|
|
{ destination => "5678" },
|
|
],
|
|
}});
|
|
_check_event_history("multiple alaises - events generated using /api/callforwards: ",$subscriber->{id},"%ivr",[
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
]);
|
|
}
|
|
|
|
#$t = time;
|
|
|
|
#SKIP:
|
|
{ #end_ivr:
|
|
|
|
my $customer = _create_customer(
|
|
type => "sipaccount",
|
|
);
|
|
my $cc = 800;
|
|
my $ac = '2'.(scalar keys %subscriber_map);
|
|
my $sn = $t;
|
|
my $aliases = [
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0001' },
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0002' },
|
|
];
|
|
my $subscriber = _create_subscriber($customer,
|
|
primary_number => { cc => $cc, ac => $ac, sn => $sn },
|
|
alias_numbers => $aliases,
|
|
);
|
|
#my $subscriber = _create_subscriber($customer,
|
|
# primary_number => { cc => 888, ac => '2'.(scalar keys %subscriber_map), sn => $t },
|
|
# alias_numbers => $aliases,
|
|
# );
|
|
|
|
my $destinationset_1 = _create_cfdestinationset($subscriber,"dest1_$t",[{ destination => "1234",
|
|
timeout => '10',
|
|
priority => '1',
|
|
simple_destination => undef },{ destination => "autoattendant",
|
|
timeout => '10',
|
|
priority => '1',
|
|
simple_destination => undef }
|
|
]);
|
|
my $destinationset_2 = _create_cfdestinationset($subscriber,"dest2_$t",[{ destination => "1234",
|
|
timeout => '10',
|
|
priority => '1',
|
|
simple_destination => undef },{ destination => "autoattendant",
|
|
timeout => '10',
|
|
priority => '1',
|
|
simple_destination => undef }
|
|
]);
|
|
|
|
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($t);
|
|
my $timeset = _create_cftimeset($subscriber,[{ year => $year + 1900,
|
|
month => $mon + 1,
|
|
mday => $mday,
|
|
wday => $wday + 1,
|
|
hour => $hour,
|
|
minute => $min}]);
|
|
my $mappings = _create_cfmapping($subscriber,{
|
|
#cfb => [{ destinationset => $cfdestinationset->{name},
|
|
# timeset => $cftimeset->{name}}],
|
|
#cfna => [{ destinationset => $cfdestinationset->{name},
|
|
# timeset => $cftimeset->{name}}],
|
|
#cft => [{ destinationset => $cfdestinationset->{name},
|
|
# timeset => $cftimeset->{name}}],
|
|
cfb => [],
|
|
cfna => [],
|
|
cft => [{ destinationset => $destinationset_1->{name},
|
|
timeset => $timeset->{name}}],
|
|
cfu => [{ destinationset => $destinationset_2->{name},
|
|
timeset => $timeset->{name}}],
|
|
cfs => [],
|
|
cfr => [],
|
|
cfo => [],
|
|
});
|
|
|
|
#1. update destination set:
|
|
$destinationset_1 = _update_cfdestinationset($destinationset_1,[{ destination => "1234",
|
|
timeout => '10',
|
|
priority => '1',
|
|
simple_destination => undef },
|
|
]);
|
|
_check_event_history("multiple alaises - events generated by updating /api/cfdestinationsets: ",$subscriber->{id},"%ivr",[
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
]);
|
|
#2. update cfmappings:
|
|
$mappings = _update_cfmapping($subscriber,"cfu",[]);
|
|
_check_event_history("multiple alaises - events generated by updating /api/cfmappings: ",$subscriber->{id},"%ivr",[
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
]);
|
|
|
|
}
|
|
|
|
#SKIP:
|
|
{ #end_ivr:
|
|
my $customer = _create_customer(
|
|
type => "sipaccount",
|
|
);
|
|
my $cc = 800;
|
|
my $ac = '3'.(scalar keys %subscriber_map);
|
|
my $sn = $t;
|
|
my $aliases = [
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0001' },
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0002' },
|
|
];
|
|
my $subscriber = _create_subscriber($customer,
|
|
primary_number => { cc => $cc, ac => $ac, sn => $sn },
|
|
alias_numbers => $aliases,
|
|
);
|
|
|
|
my $call_forwards = set_callforwards($subscriber,{ cfu => {
|
|
destinations => [
|
|
{ destination => "5678" },
|
|
{ destination => "autoattendant", },
|
|
],
|
|
}});
|
|
_update_subscriber($subscriber, status => 'terminated');
|
|
_check_event_history("multiple alaises - events generated when terminating the subscriber: ",$subscriber->{id},"%ivr",[
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "start_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn} },
|
|
{ subscriber_id => $subscriber->{id}, type => "end_ivr", non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn} },
|
|
]);
|
|
}
|
|
|
|
#SKIP:
|
|
#cloudpbx = 0 only
|
|
#{ #pilot_primary_number, primary_number:
|
|
#
|
|
# my $customer = _create_customer(
|
|
# type => "pbxaccount",
|
|
# );
|
|
# my $cc = "888";
|
|
# my $pilot_ac = undef; #'3'.(scalar keys %subscriber_map);
|
|
# my $pilot_sn = $t.(scalar keys %subscriber_map);
|
|
# my $pilot_subscriber = _create_subscriber($customer,
|
|
# primary_number => { cc => $cc, ac => $pilot_ac, sn => $pilot_sn },
|
|
# is_pbx_pilot => JSON::true,
|
|
# profile_id => $subscriberprofile1->{id},
|
|
# profile_set_id => $subscriberprofile1set->{id},
|
|
# );
|
|
# my $ac = undef; #'3'.(scalar keys %subscriber_map);
|
|
# my $sn = ($t+1).(scalar keys %subscriber_map);
|
|
# my $subscriber = _create_subscriber($customer,
|
|
# primary_number => { cc => $cc, ac => $ac, sn => $sn },
|
|
# profile_id => $subscriberprofile1->{id},
|
|
# profile_set_id => $subscriberprofile1set->{id},
|
|
# );
|
|
# #_update_subscriber($subscriber,
|
|
# _check_event_history("start_profile when creating a pbx pilot subscriber: ",$pilot_subscriber->{id},"start_profile",[
|
|
# { subscriber_id => $pilot_subscriber->{id}, type => "start_profile",
|
|
# subscriber_profile_id => $subscriberprofile1->{id}, subscriber_profile_name => $subscriberprofile1->{name},
|
|
# subscriber_profile_set_id => $subscriberprofile1set->{id}, subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
# primary_number_cc => $cc, primary_number_ac => $pilot_ac, primary_number_sn => $pilot_sn,
|
|
# pilot_subscriber_id => $pilot_subscriber->{id},
|
|
# pilot_subscriber_profile_id => $subscriberprofile1->{id}, pilot_subscriber_profile_name => $subscriberprofile1->{name},
|
|
# pilot_subscriber_profile_set_id => $subscriberprofile1set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
# pilot_primary_number_cc => $cc, pilot_primary_number_ac => $pilot_ac, pilot_primary_number_sn => $pilot_sn,
|
|
# },
|
|
# ]);
|
|
# _check_event_history("start_profile when creating a pbx subscriber: ",$subscriber->{id},"start_profile",[
|
|
# { subscriber_id => $subscriber->{id}, type => "start_profile",
|
|
# subscriber_profile_id => $subscriberprofile1->{id}, subscriber_profile_name => $subscriberprofile1->{name},
|
|
# subscriber_profile_set_id => $subscriberprofile1set->{id}, subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
# primary_number_cc => $cc, primary_number_ac => $ac, primary_number_sn => $sn,
|
|
# pilot_subscriber_id => $pilot_subscriber->{id},
|
|
# pilot_subscriber_profile_id => $subscriberprofile1->{id}, pilot_subscriber_profile_name => $subscriberprofile1->{name},
|
|
# pilot_subscriber_profile_set_id => $subscriberprofile1set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
# pilot_primary_number_cc => $cc, pilot_primary_number_ac => $pilot_ac, pilot_primary_number_sn => $pilot_sn,
|
|
# },
|
|
# ]);
|
|
#
|
|
#}
|
|
|
|
SKIP:
|
|
{ #pilot_primary_number, primary_number, pilot_first_non_primary_alias, susbcriber_first_non_primary_alias:
|
|
|
|
my $customer = _create_customer(
|
|
type => "pbxaccount",
|
|
);
|
|
my $cc = "888";
|
|
my $ac = 5; #'3'.(scalar keys %subscriber_map);
|
|
my $sn = $t.(scalar keys %subscriber_map);
|
|
my $pilot_aliases = [
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0001' },
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0002' },
|
|
#{ cc => $cc, ac => $ac, sn => $sn.'0003' },
|
|
#{ cc => $cc, ac => $ac, sn => $sn.'0004' },
|
|
#{ cc => $cc, ac => $ac, sn => $sn.'0005' },
|
|
];
|
|
my $pilot_subscriber = _create_subscriber($customer,
|
|
primary_number => { cc => $cc, ac => $ac, sn => $sn },
|
|
alias_numbers => $pilot_aliases,
|
|
profile_id => $subscriberprofile1->{id},
|
|
profile_set_id => $subscriberprofile1set->{id},
|
|
is_pbx_pilot => JSON::true,
|
|
);
|
|
my $ext = '1';
|
|
my $aliases = [
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0003' },
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0004' },
|
|
#{ cc => $cc, ac => $ac, sn => $sn.'0006' },
|
|
];
|
|
#make sure cloudpbx = 1
|
|
my $subscriber = _create_subscriber($customer,
|
|
pbx_extension => $ext,
|
|
alias_numbers => $aliases,
|
|
profile_id => $subscriberprofile1->{id},
|
|
profile_set_id => $subscriberprofile1set->{id},
|
|
);
|
|
#_update_subscriber($subscriber,
|
|
my %pilot_event = (
|
|
subscriber_id => $pilot_subscriber->{id},
|
|
subscriber_profile_id => $subscriberprofile1->{id}, subscriber_profile_name => $subscriberprofile1->{name},
|
|
subscriber_profile_set_id => $subscriberprofile1set->{id}, subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
primary_number_cc => $cc, primary_number_ac => $ac, primary_number_sn => $sn,
|
|
pilot_subscriber_id => $pilot_subscriber->{id},
|
|
pilot_subscriber_profile_id => $subscriberprofile1->{id}, pilot_subscriber_profile_name => $subscriberprofile1->{name},
|
|
pilot_subscriber_profile_set_id => $subscriberprofile1set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
pilot_primary_number_cc => $cc, pilot_primary_number_ac => $ac, pilot_primary_number_sn => $sn,
|
|
|
|
first_non_primary_alias_username_before => undef,
|
|
first_non_primary_alias_username_after => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_before => undef,
|
|
pilot_first_non_primary_alias_username_after => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
|
|
primary_alias_username_before => $cc.$ac.$sn,
|
|
primary_alias_username_after => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_before => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_after => $cc.$ac.$sn,
|
|
);
|
|
_check_event_history("start_profile when creating a pbx pilot subscriber w alias: ",$pilot_subscriber->{id},"%profile",[
|
|
{ %pilot_event, ## no critic (ProhibitCommaSeparatedStatements)
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile1->{id},
|
|
|
|
non_primary_alias_username => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
},
|
|
{ %pilot_event,
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile1->{id},
|
|
|
|
non_primary_alias_username => $pilot_aliases->[1]->{cc}.$pilot_aliases->[1]->{ac}.$pilot_aliases->[1]->{sn},
|
|
},
|
|
#{ %pilot_event,
|
|
|
|
# type => "start_profile",
|
|
|
|
# non_primary_alias_username => $pilot_aliases->[2]->{cc}.$pilot_aliases->[2]->{ac}.$pilot_aliases->[2]->{sn},
|
|
#},
|
|
]);
|
|
my %subscriber_event = (
|
|
subscriber_id => $subscriber->{id},
|
|
subscriber_profile_id => $subscriberprofile1->{id}, subscriber_profile_name => $subscriberprofile1->{name},
|
|
subscriber_profile_set_id => $subscriberprofile1set->{id}, subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
primary_number_cc => $cc, primary_number_ac => $ac, primary_number_sn => $sn.$ext,
|
|
pilot_subscriber_id => $pilot_subscriber->{id},
|
|
pilot_subscriber_profile_id => $subscriberprofile1->{id}, pilot_subscriber_profile_name => $subscriberprofile1->{name},
|
|
pilot_subscriber_profile_set_id => $subscriberprofile1set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
pilot_primary_number_cc => $cc, pilot_primary_number_ac => $ac, pilot_primary_number_sn => $sn,
|
|
|
|
first_non_primary_alias_username_before => undef,
|
|
first_non_primary_alias_username_after => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_before => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_after => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
|
|
primary_alias_username_before => $cc.$ac.$sn.$ext,
|
|
primary_alias_username_after => $cc.$ac.$sn.$ext,
|
|
pilot_primary_alias_username_before => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_after => $cc.$ac.$sn,
|
|
|
|
);
|
|
_check_event_history("start_profile when creating a pbx extension subscriber w alias: ",$subscriber->{id},"%profile",[
|
|
{ %subscriber_event, ## no critic (ProhibitCommaSeparatedStatements)
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile1->{id},
|
|
|
|
non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn},
|
|
},
|
|
{ %subscriber_event,
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile1->{id},
|
|
|
|
non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn},
|
|
},
|
|
|
|
]);
|
|
|
|
my $new_aliases = [
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0004' },
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0005' },
|
|
];
|
|
_update_subscriber($subscriber,
|
|
alias_numbers => $new_aliases,
|
|
profile_id => $subscriberprofile2->{id},
|
|
profile_set_id => $subscriberprofile2set->{id},
|
|
);
|
|
%subscriber_event = (
|
|
subscriber_id => $subscriber->{id},
|
|
subscriber_profile_id => $subscriberprofile2->{id}, subscriber_profile_name => $subscriberprofile2->{name},
|
|
subscriber_profile_set_id => $subscriberprofile2set->{id}, subscriber_profile_set_name => $subscriberprofile2set->{name},
|
|
primary_number_cc => $cc, primary_number_ac => $ac, primary_number_sn => $sn.$ext,
|
|
pilot_subscriber_id => $pilot_subscriber->{id},
|
|
pilot_subscriber_profile_id => $subscriberprofile1->{id}, pilot_subscriber_profile_name => $subscriberprofile1->{name},
|
|
pilot_subscriber_profile_set_id => $subscriberprofile1set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile1set->{name},
|
|
pilot_primary_number_cc => $cc, pilot_primary_number_ac => $ac, pilot_primary_number_sn => $sn,
|
|
|
|
first_non_primary_alias_username_before => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn},
|
|
first_non_primary_alias_username_after => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_before => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_after => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
|
|
primary_alias_username_before => $cc.$ac.$sn.$ext,
|
|
primary_alias_username_after => $cc.$ac.$sn.$ext,
|
|
pilot_primary_alias_username_before => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_after => $cc.$ac.$sn,
|
|
);
|
|
_check_event_history("start/update/end_profile when updating a pbx extension subscriber w alias: ",$subscriber->{id},"%profile",[
|
|
{},{},
|
|
{ %subscriber_event,
|
|
|
|
type => "update_profile",
|
|
old_status => $subscriberprofile1->{id},
|
|
new_status => $subscriberprofile2->{id},
|
|
|
|
non_primary_alias_username => $aliases->[1]->{cc}.$aliases->[1]->{ac}.$aliases->[1]->{sn},
|
|
},
|
|
{ %subscriber_event,
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile2->{id},
|
|
|
|
non_primary_alias_username => $new_aliases->[1]->{cc}.$new_aliases->[1]->{ac}.$new_aliases->[1]->{sn},
|
|
},
|
|
{ %subscriber_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile1->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $aliases->[0]->{cc}.$aliases->[0]->{ac}.$aliases->[0]->{sn},
|
|
},
|
|
]);
|
|
|
|
my $new_pilot_aliases = [
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0002' },
|
|
{ cc => $cc, ac => $ac, sn => $sn.'0003' },
|
|
];
|
|
_update_subscriber($pilot_subscriber,
|
|
alias_numbers => $new_pilot_aliases,
|
|
profile_id => $subscriberprofile3->{id},
|
|
profile_set_id => $subscriberprofile3set->{id},
|
|
);
|
|
%pilot_event = (
|
|
subscriber_id => $pilot_subscriber->{id},
|
|
subscriber_profile_id => $subscriberprofile3->{id}, subscriber_profile_name => $subscriberprofile3->{name},
|
|
subscriber_profile_set_id => $subscriberprofile3set->{id}, subscriber_profile_set_name => $subscriberprofile3set->{name},
|
|
primary_number_cc => $cc, primary_number_ac => $ac, primary_number_sn => $sn,
|
|
pilot_subscriber_id => $pilot_subscriber->{id},
|
|
pilot_subscriber_profile_id => $subscriberprofile3->{id}, pilot_subscriber_profile_name => $subscriberprofile3->{name},
|
|
pilot_subscriber_profile_set_id => $subscriberprofile3set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile3set->{name},
|
|
pilot_primary_number_cc => $cc, pilot_primary_number_ac => $ac, pilot_primary_number_sn => $sn,
|
|
|
|
first_non_primary_alias_username_before => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
first_non_primary_alias_username_after => $new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_before => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_after => $new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
|
|
primary_alias_username_before => $cc.$ac.$sn,
|
|
primary_alias_username_after => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_before => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_after => $cc.$ac.$sn,
|
|
|
|
);
|
|
_check_event_history("start/update/end_profile when updating a pbx pilot subscriber w alias: ",$pilot_subscriber->{id},"%profile",[
|
|
{},{},
|
|
{ %pilot_event,
|
|
|
|
type => "update_profile",
|
|
old_status => $subscriberprofile1->{id},
|
|
new_status => $subscriberprofile3->{id},
|
|
|
|
non_primary_alias_username => $pilot_aliases->[1]->{cc}.$pilot_aliases->[1]->{ac}.$pilot_aliases->[1]->{sn},
|
|
},
|
|
{ %pilot_event,
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile3->{id},
|
|
|
|
non_primary_alias_username => $new_pilot_aliases->[1]->{cc}.$new_pilot_aliases->[1]->{ac}.$new_pilot_aliases->[1]->{sn},
|
|
},
|
|
{ %pilot_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile1->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $pilot_aliases->[0]->{cc}.$pilot_aliases->[0]->{ac}.$pilot_aliases->[0]->{sn},
|
|
},
|
|
]);
|
|
|
|
_update_subscriber($subscriber, status => 'terminated');
|
|
%subscriber_event = (
|
|
subscriber_id => $subscriber->{id},
|
|
subscriber_profile_id => $subscriberprofile2->{id}, subscriber_profile_name => $subscriberprofile2->{name},
|
|
subscriber_profile_set_id => $subscriberprofile2set->{id}, subscriber_profile_set_name => $subscriberprofile2set->{name},
|
|
primary_number_cc => $cc, primary_number_ac => $ac, primary_number_sn => $sn.$ext,
|
|
pilot_subscriber_id => $pilot_subscriber->{id},
|
|
pilot_subscriber_profile_id => $subscriberprofile3->{id}, pilot_subscriber_profile_name => $subscriberprofile3->{name},
|
|
pilot_subscriber_profile_set_id => $subscriberprofile3set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile3set->{name},
|
|
pilot_primary_number_cc => $cc, pilot_primary_number_ac => $ac, pilot_primary_number_sn => $sn,
|
|
|
|
first_non_primary_alias_username_before => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
first_non_primary_alias_username_after => undef,
|
|
pilot_first_non_primary_alias_username_before => $new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
#would be this:
|
|
pilot_first_non_primary_alias_username_after => $new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
#but since api termination always returns aliases to the pilot:
|
|
#pilot_first_non_primary_alias_username_after => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
#pilot_first_non_primary_alias_username_after => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
|
|
primary_alias_username_before => $cc.$ac.$sn.$ext,
|
|
primary_alias_username_after => $cc.$ac.$sn.$ext,
|
|
pilot_primary_alias_username_before => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_after => $cc.$ac.$sn,
|
|
|
|
);
|
|
#_check_event_history("end_profile when terminating a pbx extension subscriber w alias: ",$subscriber->{id},"%profile",[
|
|
# {},{},{},{},{},
|
|
# { %subscriber_event,
|
|
#
|
|
# type => "update_profile",
|
|
# old_status => $subscriberprofile2->{id},
|
|
# new_status => $subscriberprofile3->{id},
|
|
#
|
|
# non_primary_alias_username => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
# },
|
|
# { %subscriber_event,
|
|
#
|
|
# type => "update_profile",
|
|
# old_status => $subscriberprofile2->{id},
|
|
# new_status => $subscriberprofile3->{id},
|
|
#
|
|
# non_primary_alias_username => $new_aliases->[1]->{cc}.$new_aliases->[1]->{ac}.$new_aliases->[1]->{sn},
|
|
# },
|
|
#]);
|
|
_check_event_history("end_profile when terminating a pbx extension subscriber w alias: ",$subscriber->{id},"%profile",[
|
|
{},{},{},{},{},
|
|
{ %subscriber_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile2->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
},
|
|
{ %subscriber_event,
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile3->{id},
|
|
|
|
non_primary_alias_username => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
},
|
|
|
|
{ %subscriber_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile2->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $new_aliases->[1]->{cc}.$new_aliases->[1]->{ac}.$new_aliases->[1]->{sn},
|
|
},
|
|
{ %subscriber_event,
|
|
|
|
type => "start_profile",
|
|
old_status => '',
|
|
new_status => $subscriberprofile3->{id},
|
|
|
|
non_primary_alias_username => $new_aliases->[1]->{cc}.$new_aliases->[1]->{ac}.$new_aliases->[1]->{sn},
|
|
},
|
|
]);
|
|
|
|
_update_subscriber($pilot_subscriber, status => 'terminated');
|
|
%pilot_event = (
|
|
subscriber_id => $pilot_subscriber->{id},
|
|
subscriber_profile_id => $subscriberprofile3->{id}, subscriber_profile_name => $subscriberprofile3->{name},
|
|
subscriber_profile_set_id => $subscriberprofile3set->{id}, subscriber_profile_set_name => $subscriberprofile3set->{name},
|
|
primary_number_cc => $cc, primary_number_ac => $ac, primary_number_sn => $sn,
|
|
pilot_subscriber_id => $pilot_subscriber->{id},
|
|
pilot_subscriber_profile_id => $subscriberprofile3->{id}, pilot_subscriber_profile_name => $subscriberprofile3->{name},
|
|
pilot_subscriber_profile_set_id => $subscriberprofile3set->{id}, pilot_subscriber_profile_set_name => $subscriberprofile3set->{name},
|
|
pilot_primary_number_cc => $cc, pilot_primary_number_ac => $ac, pilot_primary_number_sn => $sn,
|
|
|
|
#would be this:
|
|
#$new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
#but since api termination always returns aliases to the pilot:
|
|
#first_non_primary_alias_username_before => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_after => $new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
first_non_primary_alias_username_after => undef,
|
|
#pilot_first_non_primary_alias_username_before => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_after => $new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
pilot_first_non_primary_alias_username_after => undef,
|
|
|
|
primary_alias_username_before => $cc.$ac.$sn,
|
|
primary_alias_username_after => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_before => $cc.$ac.$sn,
|
|
pilot_primary_alias_username_after => $cc.$ac.$sn,
|
|
|
|
);
|
|
_check_event_history("end_profile when terminating a pbx pilot subscriber w alias: ",$pilot_subscriber->{id},"%profile",[
|
|
{},{},{},{},{},
|
|
#aliases ordered by id, so by the order they were created:
|
|
#id=2:0002
|
|
#id=6:0003
|
|
#--
|
|
#id=4:0004
|
|
#id=5:0005
|
|
#-->
|
|
#id=2:0002
|
|
#id=4:0004
|
|
#id=5:0005
|
|
#id=6:0003
|
|
{ %pilot_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile3->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $new_pilot_aliases->[0]->{cc}.$new_pilot_aliases->[0]->{ac}.$new_pilot_aliases->[0]->{sn},
|
|
},
|
|
|
|
{ %pilot_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile3->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $new_aliases->[0]->{cc}.$new_aliases->[0]->{ac}.$new_aliases->[0]->{sn},
|
|
},
|
|
|
|
|
|
{ %pilot_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile3->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $new_aliases->[1]->{cc}.$new_aliases->[1]->{ac}.$new_aliases->[1]->{sn},
|
|
},
|
|
{ %pilot_event,
|
|
|
|
type => "end_profile",
|
|
old_status => $subscriberprofile3->{id},
|
|
new_status => '',
|
|
|
|
non_primary_alias_username => $new_pilot_aliases->[1]->{cc}.$new_pilot_aliases->[1]->{ac}.$new_pilot_aliases->[1]->{sn},
|
|
},
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
sub _create_cfmapping {
|
|
my ($subscriber,$mappings) = @_;
|
|
|
|
my $cfmapping_uri = $uri.'/api/cfmappings/'.$subscriber->{id};
|
|
$req = HTTP::Request->new('PUT', $cfmapping_uri); #$customer->{id});
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json($mappings));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "create test cfmappings");
|
|
$req = HTTP::Request->new('GET', $cfmapping_uri); # . '?page=1&rows=' . (scalar keys %$put_data));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch test cfmappings");
|
|
return JSON::from_json($res->decoded_content);
|
|
}
|
|
|
|
sub _update_cfmapping {
|
|
my ($subscriber,$cf_type,$mapping) = @_;
|
|
my $cfmapping_uri = $uri.'/api/cfmappings/'.$subscriber->{id};
|
|
$req = HTTP::Request->new('PATCH', $cfmapping_uri);
|
|
$req->header('Content-Type' => 'application/json-patch+json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json(
|
|
[ { op => 'replace', path => '/'.$cf_type, value => $mapping } ]
|
|
));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "update test cfmappings");
|
|
$req = HTTP::Request->new('GET', $cfmapping_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch updated test cfmappings");
|
|
return JSON::from_json($res->decoded_content);
|
|
}
|
|
|
|
sub _create_cftimeset {
|
|
my ($subscriber,$times) = @_;
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/cftimesets/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => "cf_time_set_".$t,
|
|
subscriber_id => $subscriber->{id},
|
|
times => $times,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test cftimeset");
|
|
my $cftimeset_uri = $uri.'/'.$res->header('Location');
|
|
$req = HTTP::Request->new('GET', $cftimeset_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch created test cftimeset");
|
|
return JSON::from_json($res->decoded_content);
|
|
|
|
}
|
|
|
|
sub _create_cfdestinationset {
|
|
my ($subscriber,$name,$destinations) = @_;
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/cfdestinationsets/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
name => $name,
|
|
subscriber_id => $subscriber->{id},
|
|
destinations => $destinations,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test cfdestinationset");
|
|
my $cfdestinationset_uri = $uri.'/'.$res->header('Location');
|
|
$req = HTTP::Request->new('GET', $cfdestinationset_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch created test cfdestinationset");
|
|
return JSON::from_json($res->decoded_content);
|
|
|
|
}
|
|
|
|
sub _update_cfdestinationset {
|
|
my ($destinationset,$destinations) = @_;
|
|
my $cfdestinationset_uri = $uri.'/api/cfdestinationsets/'.$destinationset->{id};
|
|
$req = HTTP::Request->new('PATCH', $cfdestinationset_uri);
|
|
$req->header('Content-Type' => 'application/json-patch+json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json(
|
|
[ { op => 'replace', path => '/destinations', value => $destinations } ]
|
|
));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "update test cfdestinationset");
|
|
$req = HTTP::Request->new('GET', $cfdestinationset_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch updated test cfdestinationset");
|
|
return JSON::from_json($res->decoded_content);
|
|
|
|
}
|
|
|
|
sub set_callforwards {
|
|
my ($subscriber,$call_forwards) = @_;
|
|
|
|
my $callforward_uri = $uri.'/api/callforwards/'.$subscriber->{id};
|
|
$req = HTTP::Request->new('PUT', $callforward_uri); #$customer->{id});
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json($call_forwards));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "set test callforwards");
|
|
$req = HTTP::Request->new('GET', $callforward_uri); # . '?page=1&rows=' . (scalar keys %$put_data));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch test callforwards");
|
|
return JSON::from_json($res->decoded_content);
|
|
|
|
}
|
|
|
|
sub _get_subscriber {
|
|
|
|
my ($subscriber) = @_;
|
|
$req = HTTP::Request->new('GET', $uri.'/api/subscribers/'.$subscriber->{id});
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch test subscriber");
|
|
$subscriber = JSON::from_json($res->decoded_content);
|
|
$subscriber_map{$subscriber->{id}} = $subscriber;
|
|
return $subscriber;
|
|
|
|
}
|
|
|
|
sub _create_subscriber {
|
|
|
|
my ($customer,@further_opts) = @_;
|
|
$req = HTTP::Request->new('POST', $uri.'/api/subscribers/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
domain_id => $domain->{id},
|
|
username => 'subscriber_' . (scalar keys %subscriber_map) . '_'.$t,
|
|
password => 'subscriber_password',
|
|
customer_id => $customer->{id},
|
|
#status => "active",
|
|
@further_opts,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test subscriber");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch test subscriber");
|
|
my $subscriber = JSON::from_json($res->decoded_content);
|
|
$subscriber_map{$subscriber->{id}} = $subscriber;
|
|
return $subscriber;
|
|
|
|
}
|
|
|
|
sub _update_subscriber {
|
|
|
|
my ($subscriber,@further_opts) = @_;
|
|
$req = HTTP::Request->new('PUT', $uri.'/api/subscribers/'.$subscriber->{id});
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json({
|
|
%$subscriber, ## no critic (ProhibitCommaSeparatedStatements)
|
|
@further_opts,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "update test subscriber");
|
|
$subscriber = JSON::from_json($res->decoded_content);
|
|
$subscriber_map{$subscriber->{id}} = $subscriber;
|
|
return $subscriber;
|
|
|
|
}
|
|
|
|
sub _create_customer {
|
|
|
|
my (@further_opts) = @_;
|
|
$req = HTTP::Request->new('POST', $uri.'/api/customers/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
status => "active",
|
|
contact_id => $custcontact->{id},
|
|
type => "sipaccount",
|
|
billing_profile_id => $billing_profile_id,
|
|
max_subscribers => undef,
|
|
external_id => undef,
|
|
#status => "active",
|
|
@further_opts,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test customer");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch test customer");
|
|
my $customer = JSON::from_json($res->decoded_content);
|
|
$customer_map{$customer->{id}} = $customer;
|
|
return $customer;
|
|
|
|
}
|
|
|
|
|
|
sub _check_event_history {
|
|
|
|
my ($label,$subscriber_id,$type,$expected_events) = @_;
|
|
if (defined $subscriber_id) {
|
|
$subscriber_id = '&subscriber_id=' . $subscriber_id;
|
|
} else {
|
|
$subscriber_id = '';
|
|
}
|
|
if (defined $type) {
|
|
$type = '&type=' . $type;
|
|
} else {
|
|
$type = '';
|
|
}
|
|
|
|
my $total_count = (scalar @$expected_events);
|
|
my $i = 0;
|
|
my $ok = 1;
|
|
my @events = ();
|
|
my @requests = ();
|
|
my $last_request;
|
|
$last_request = _req_to_debug($req) if $req;
|
|
my $nexturi = $uri.'/api/events/?page=1&rows=10&order_by_direction=asc&order_by=id'.$subscriber_id.$type;
|
|
do {
|
|
$req = HTTP::Request->new('GET',$nexturi);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, $label . "fetch events collection page");
|
|
push(@requests,_req_to_debug($req));
|
|
my $collection = JSON::from_json($res->decoded_content);
|
|
my $selfuri = $uri . $collection->{_links}->{self}->{href};
|
|
my $colluri = URI->new($selfuri);
|
|
|
|
$ok = ok($collection->{total_count} == $total_count, $label . "check 'total_count' of collection") && $ok;
|
|
|
|
if($collection->{_links}->{next}->{href}) {
|
|
$nexturi = $uri . $collection->{_links}->{next}->{href};
|
|
} else {
|
|
$nexturi = undef;
|
|
}
|
|
|
|
$collection->{_embedded}->{'ngcp:events'} = [
|
|
$collection->{_embedded}->{'ngcp:events'}
|
|
] if "HASH" eq ref $collection->{_embedded}->{'ngcp:events'};
|
|
|
|
my $page_items = {};
|
|
|
|
foreach my $event (@{ $collection->{_embedded}->{'ngcp:events'} }) {
|
|
$ok = _compare_event($event,$expected_events->[$i],$label) && $ok;
|
|
delete $event->{'_links'};
|
|
push(@events,$event);
|
|
$i++
|
|
}
|
|
|
|
} while($nexturi);
|
|
|
|
ok($i == $total_count,$label . "check if all expected items are listed");
|
|
diag(Dumper({last_request => $last_request, collection_requests => \@requests, result => \@events})) if !$ok;
|
|
|
|
}
|
|
|
|
sub _compare_event {
|
|
|
|
my ($got,$expected,$label) = @_;
|
|
|
|
my $ok = 1;
|
|
|
|
foreach my $field (keys %$expected) {
|
|
$ok = is($got->{$field},$expected->{$field},$label . "check event " . ($got->{$field} // '') . " $field") && $ok;
|
|
}
|
|
|
|
return $ok;
|
|
|
|
}
|
|
|
|
sub _req_to_debug {
|
|
my $request = shift;
|
|
return { request => $request->method . " " . $request->uri,
|
|
headers => $request->headers };
|
|
}
|
|
|
|
sub _get_query_string {
|
|
my ($filters) = @_;
|
|
my $query = '';
|
|
foreach my $param (keys %$filters) {
|
|
if (length($query) == 0) {
|
|
$query .= '?';
|
|
} else {
|
|
$query .= '&';
|
|
}
|
|
$query .= $param . '=' . $filters->{$param};
|
|
}
|
|
return $query;
|
|
};
|
|
|
|
done_testing;
|