diff --git a/lib/NGCP/Panel/Controller/API/CFMappings.pm b/lib/NGCP/Panel/Controller/API/CFMappings.pm index 40298c7bb1..62dd8d0d23 100644 --- a/lib/NGCP/Panel/Controller/API/CFMappings.pm +++ b/lib/NGCP/Panel/Controller/API/CFMappings.pm @@ -15,7 +15,7 @@ sub allowed_methods{ } sub api_description { - return 'Specifies callforward mappings of a subscriber, where multiple mappings can be specified per type (cfu, cfb, cft, cfna, cfs) ' . + return 'Specifies callforward mappings of a subscriber, where multiple mappings can be specified per type (cfu, cfb, cft, cfna, cfs, cfr) ' . 'Each mapping consists of a destinationset name (see CFDestinationSets), a timeset name ' . '(see CFTimeSets), a sourceset name (see CFSourceSets), ' . 'and a bnumberset name (see CFBnumberSets).'; @@ -38,6 +38,7 @@ sub documentation_sample { cft_ringtimeout => "200", cfu => [], cfs => [], + cfr => [], } ; } diff --git a/lib/NGCP/Panel/Controller/API/CallForwards.pm b/lib/NGCP/Panel/Controller/API/CallForwards.pm index 11e9c681fe..7e711859dc 100644 --- a/lib/NGCP/Panel/Controller/API/CallForwards.pm +++ b/lib/NGCP/Panel/Controller/API/CallForwards.pm @@ -16,7 +16,7 @@ sub allowed_methods{ sub api_description { return 'Specifies basic callforwards of a subscriber, where a number of destinations, times and sources ' . - ' can be specified for each type (cfu, cfb, cft, cfna, cfs). For more complex configurations with ' . + ' can be specified for each type (cfu, cfb, cft, cfna, cfs, cfr). For more complex configurations with ' . ' multiple combinations of Timesets, Destinationsets and SourceSets see CFMappings.'; }; @@ -39,6 +39,7 @@ sub documentation_sample { cft => { "ringtimeout" => "199" }, cfu => {}, cfs => {}, + cfr => {}, }; } diff --git a/lib/NGCP/Panel/Controller/API/CallLists.pm b/lib/NGCP/Panel/Controller/API/CallLists.pm index 5cd0ced918..f8aa27541b 100644 --- a/lib/NGCP/Panel/Controller/API/CallLists.pm +++ b/lib/NGCP/Panel/Controller/API/CallLists.pm @@ -126,7 +126,7 @@ sub query_params { }, { param => 'type', - description => 'Filter for calls with a specific type. One of "call", "cfu", "cfb", "cft", "cfna", "cfs".', + description => 'Filter for calls with a specific type. One of "call", "cfu", "cfb", "cft", "cfna", "cfs", "cfr".', query => { first => sub { my $q = shift; @@ -139,7 +139,7 @@ sub query_params { }, { param => 'type_ne', - description => 'Filter for calls not having a specific type. One of "call", "cfu", "cfb", "cft", "cfna", "cfs".', + description => 'Filter for calls not having a specific type. One of "call", "cfu", "cfb", "cft", "cfna", "cfs", "cfr".', query => { first => sub { my $q = shift; diff --git a/lib/NGCP/Panel/Controller/API/SubscriberProfiles.pm b/lib/NGCP/Panel/Controller/API/SubscriberProfiles.pm index 291f732c32..98d6b752d5 100644 --- a/lib/NGCP/Panel/Controller/API/SubscriberProfiles.pm +++ b/lib/NGCP/Panel/Controller/API/SubscriberProfiles.pm @@ -176,7 +176,7 @@ sub POST :Allow { expose_to_customer => 1, }, { - attribute => { -in => [qw/cfu cft cfna cfb cfs/] }, + attribute => { -in => [qw/cfu cft cfna cfb cfs cfr/] }, }, ], }); diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 150b784189..96690952a0 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -608,7 +608,7 @@ sub preferences :Chained('base') :PathPart('preferences') :Args(0) { my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber; my $cfs = {}; - foreach my $type(qw/cfu cfna cft cfb cfs/) { + foreach my $type(qw/cfu cfna cft cfb cfs cfr/) { my $maps = $prov_subscriber->voip_cf_mappings ->search({ type => $type }); $cfs->{$type} = []; @@ -713,7 +713,7 @@ sub preferences :Chained('base') :PathPart('preferences') :Args(0) { $c->stash->{pref_groups} = \@newprefgroups; my $special_prefs = { check => 1 }; - foreach my $pref(qw/cfu cft cfna cfb cfs + foreach my $pref(qw/cfu cft cfna cfb cfs cfr speed_dial reminder auto_attendant voice_mail fax_server/) { my $preference = $c->model('DB')->resultset('voip_preferences')->find({ @@ -858,6 +858,10 @@ sub preferences_callforward :Chained('base') :PathPart('preferences/callforward' $cf_desc = $c->loc('Call Forward SMS'); last SWITCH; }; + /^cfr$/ && do { + $cf_desc = $c->loc('Call Forward Rerouting'); + last SWITCH; + }; # default NGCP::Panel::Utils::Message::error( c => $c, @@ -999,7 +1003,6 @@ sub preferences_callforward :Chained('base') :PathPart('preferences/callforward' new_aa => ($d eq 'autoattendant'), ); - NGCP::Panel::Utils::Subscriber::create_cf_destination( c => $c, subscriber => $c->stash->{subscriber}, @@ -1090,6 +1093,10 @@ sub preferences_callforward_advanced :Chained('base') :PathPart('preferences/cal $cf_desc = $c->loc('Call Forward SMS'); last SWITCH; }; + /^cfr$/ && do { + $cf_desc = $c->loc('Call Forward Rerouting'); + last SWITCH; + }; # default NGCP::Panel::Utils::Message::error( c => $c, @@ -2886,7 +2893,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet if(keys %old_profile_attributes) { my $cfs = $c->model('DB')->resultset('voip_preferences')->search({ id => { -in => [ keys %old_profile_attributes ] }, - attribute => { -in => [qw/cfu cfb cft cfna cfs/] }, + attribute => { -in => [qw/cfu cfb cft cfna cfs cfr/] }, }); $prov_subscriber->voip_usr_preferences->search({ attribute_id => { -in => [ keys %old_profile_attributes ] }, diff --git a/lib/NGCP/Panel/Controller/SubscriberProfile.pm b/lib/NGCP/Panel/Controller/SubscriberProfile.pm index ec3d5a2625..f7ccc383c1 100644 --- a/lib/NGCP/Panel/Controller/SubscriberProfile.pm +++ b/lib/NGCP/Panel/Controller/SubscriberProfile.pm @@ -513,7 +513,7 @@ sub profile_edit :Chained('profile_base') :PathPart('edit') :Does(ACL) :ACLDetac if(keys %old_attributes) { my $cfs = $c->model('DB')->resultset('voip_preferences')->search({ id => { -in => [ keys %old_attributes ] }, - attribute => { -in => [qw/cfu cfb cft cfna cfs/] }, + attribute => { -in => [qw/cfu cfb cft cfna cfs cfr/] }, }); my @subs = $c->model('DB')->resultset('provisioning_voip_subscribers') ->search({ diff --git a/lib/NGCP/Panel/Form/CFSimpleAPI.pm b/lib/NGCP/Panel/Form/CFSimpleAPI.pm index 7768320a23..d5cdf453b2 100644 --- a/lib/NGCP/Panel/Form/CFSimpleAPI.pm +++ b/lib/NGCP/Panel/Form/CFSimpleAPI.pm @@ -83,6 +83,20 @@ has_field 'cfs' => ( }, ); +has_field 'cfr' => ( + type => '+NGCP::Panel::Field::CFSimpleAPICompound', + do_wrapper => 1, + do_label => 0, + required => 0, + element_attr => { + rel => ['tooltip'], + title => ['Call Forward Rerouting, Contains the keys "destinations", "times" and "sources". "destinations" is an Array of Objects ' . + 'having a "destination", "priority" and "timeout" field. "times" is an Array of Objects having the fields ' . + '"minute", "hour", "wday", "mday", "month", "year". "times" can be empty, then the CF is applied always. ' . + '"sources" is an Array of Objects having one field "source". "sources" can be empty.'], + }, +); + has_field 'cft.ringtimeout' => ( type => 'PosInteger', do_wrapper => 1, @@ -92,7 +106,7 @@ has_field 'cft.ringtimeout' => ( has_block 'fields' => ( tag => 'div', class => [qw(modal-body)], - render_list => [qw(cfu cfb cft cfna cfs)], + render_list => [qw(cfu cfb cft cfna cfs cfr)], ); 1; diff --git a/lib/NGCP/Panel/Form/Call/Reseller.pm b/lib/NGCP/Panel/Form/Call/Reseller.pm index a67f182097..c831fdd01d 100644 --- a/lib/NGCP/Panel/Form/Call/Reseller.pm +++ b/lib/NGCP/Panel/Form/Call/Reseller.pm @@ -437,10 +437,11 @@ has_field 'call_type' => ( { label => 'cft', value => 'cft' }, { label => 'cfna', value => 'cfna' }, { label => 'cfs', value => 'cfs' }, + { label => 'cfr', value => 'cfr' }, ], element_attr => { rel => ['tooltip'], - title => ['The type of call, one of call, cfu, cfb, cft, cfna, cfs.'] + title => ['The type of call, one of call, cfu, cfb, cft, cfna, cfs, cfr.'] }, ); diff --git a/lib/NGCP/Panel/Form/CallForward/CFMappingsAPI.pm b/lib/NGCP/Panel/Form/CallForward/CFMappingsAPI.pm index 156a2426fb..a3d021dad3 100644 --- a/lib/NGCP/Panel/Form/CallForward/CFMappingsAPI.pm +++ b/lib/NGCP/Panel/Form/CallForward/CFMappingsAPI.pm @@ -73,6 +73,19 @@ has_field 'cfs' => ( }, ); +has_field 'cfr' => ( + type => 'Repeatable', + do_wrapper => 1, + do_label => 0, + required => 0, + element_attr => { + rel => ['tooltip'], + title => ['Call Forward Rerouting, Number of Objects, each containing the keys ' . + '"destinationset", "timeset" and "sourceset". The values must be the name of ' . + 'a corresponding set which belongs to the same subscriber.'], + }, +); + has_field 'cfu.destinationset' => ( type => 'Text', do_wrapper => 1, @@ -299,6 +312,50 @@ has_field 'cft_ringtimeout' => ( do_label => 0, ); +has_field 'cfr.destinationset' => ( + type => 'Text', + do_wrapper => 1, + do_label => 0, +); + +has_field 'cfr.destinationset_id' => ( + type => 'PosInteger', + do_label => 0, +); + +has_field 'cfr.timeset' => ( + type => 'Text', + do_wrapper => 1, + do_label => 0, +); + +has_field 'cfr.timeset_id' => ( + type => 'PosInteger', + do_label => 0, +); + +has_field 'cfr.sourceset' => ( + type => 'Text', + do_wrapper => 1, + do_label => 0, +); + +has_field 'cfr.sourceset_id' => ( + type => 'PosInteger', + do_label => 0, +); + +has_field 'cfr.bnumberset' => ( + type => 'Text', + do_wrapper => 1, + do_label => 0, +); + +has_field 'cfr.bnumberset_id' => ( + type => 'PosInteger', + do_label => 0, +); + 1; # vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Form/CallList/Subscriber.pm b/lib/NGCP/Panel/Form/CallList/Subscriber.pm index aa9c477e17..8fc134b987 100644 --- a/lib/NGCP/Panel/Form/CallList/Subscriber.pm +++ b/lib/NGCP/Panel/Form/CallList/Subscriber.pm @@ -90,10 +90,11 @@ has_field 'type' => ( { label => 'cft', value => 'cft' }, { label => 'cfna', value => 'cfna' }, { label => 'cfs', value => 'cfs' }, + { label => 'cfr', value => 'cfr' }, ], element_attr => { rel => ['tooltip'], - title => ['The type of call, one of call, cfu, cfb, cft, cfna, cfs.'] + title => ['The type of call, one of call, cfu, cfb, cft, cfna, cfs, cfr.'] }, ); diff --git a/lib/NGCP/Panel/Form/Conversation/API.pm b/lib/NGCP/Panel/Form/Conversation/API.pm index f97f5c040c..88a53e6440 100644 --- a/lib/NGCP/Panel/Form/Conversation/API.pm +++ b/lib/NGCP/Panel/Form/Conversation/API.pm @@ -17,7 +17,7 @@ has_field 'call_id' => ( has_field 'call_type' => ( type => 'Text', - label => 'One of the "call","cfu","cft","cfb","cfna".', + label => 'One of the "call","cfu","cft","cfb","cfna","cfs","cfr".', required => 1, ); diff --git a/lib/NGCP/Panel/Form/SubscriberProfile/Profile.pm b/lib/NGCP/Panel/Form/SubscriberProfile/Profile.pm index 17542c052c..c81d72d77a 100644 --- a/lib/NGCP/Panel/Form/SubscriberProfile/Profile.pm +++ b/lib/NGCP/Panel/Form/SubscriberProfile/Profile.pm @@ -80,7 +80,7 @@ sub field_list { expose_to_customer => 1, }, { - attribute => { -in => [qw/cfu cft cfna cfb cfs/] }, + attribute => { -in => [qw/cfu cft cfna cfb cfs cfr/] }, } ], }); diff --git a/lib/NGCP/Panel/Role/API/CFMappings.pm b/lib/NGCP/Panel/Role/API/CFMappings.pm index 4655f076ac..cf0ced8440 100644 --- a/lib/NGCP/Panel/Role/API/CFMappings.pm +++ b/lib/NGCP/Panel/Role/API/CFMappings.pm @@ -24,7 +24,7 @@ sub hal_from_item { my ($self, $c, $item, $type) = @_; my $form; - my $resource = { subscriber_id => $item->id, cfu => [], cfb => [], cfna => [], cft => [], cfs => []}; + my $resource = { subscriber_id => $item->id, cfu => [], cfb => [], cfna => [], cft => [], cfs => [], cfr => []}; my $b_subs_id = $item->id; my $p_subs_id = $item->provisioning_voip_subscriber->id; @@ -154,7 +154,7 @@ sub update_item { my $ssets_rs = $c->model('DB')->resultset('voip_cf_source_sets'); my $bsets_rs = $c->model('DB')->resultset('voip_cf_bnumber_sets'); - for my $type ( qw/cfu cfb cft cfna cfs/) { + for my $type ( qw/cfu cfb cft cfna cfs cfr/) { if (ref $resource->{$type} ne "ARRAY") { $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid field '$type'. Must be an array."); return; @@ -256,7 +256,7 @@ sub update_item { $autoattendant_count += NGCP::Panel::Utils::Subscriber::check_dset_autoattendant_status($map->destination_set); } $mappings_rs->delete; - for my $type ( qw/cfu cfb cft cfna cfs/) { + for my $type ( qw/cfu cfb cft cfna cfs cfr/) { $cf_preferences{$type}->delete; } for my $mapping ( @new_mappings ) { diff --git a/lib/NGCP/Panel/Role/API/CallForwards.pm b/lib/NGCP/Panel/Role/API/CallForwards.pm index 128efed0a9..b4337e62cb 100644 --- a/lib/NGCP/Panel/Role/API/CallForwards.pm +++ b/lib/NGCP/Panel/Role/API/CallForwards.pm @@ -50,9 +50,9 @@ sub hal_from_item { my $allowed_prefs = NGCP::Panel::Utils::Preferences::get_subscriber_allowed_prefs( c => $c, prov_subscriber => $prov_subs, - pref_list => [qw/cfu cfb cft cfna cfs/], + pref_list => [qw/cfu cfb cft cfna cfs cfr/], ); - @resource{qw/cfu cfb cft cfna cfs/} = ({}) x 5; + @resource{qw/cfu cfb cft cfna cfs cfr/} = ({}) x 5; for my $item_cf ($item->provisioning_voip_subscriber->voip_cf_mappings->all) { next unless ($allowed_prefs->{$item_cf->type}); $resource{$item_cf->type} = $self->_contents_from_cfm($c, $item_cf, $item); @@ -73,7 +73,7 @@ sub hal_from_item { run => 0, ); - for my $cf_type (qw/cfu cft cfb cfna cfs/) { + for my $cf_type (qw/cfu cft cfb cfna cfs cfr/) { unless ($allowed_prefs->{$cf_type}) { delete $resource{$cf_type}; } @@ -129,7 +129,7 @@ sub update_item { my $allowed_prefs = NGCP::Panel::Utils::Preferences::get_subscriber_allowed_prefs( c => $c, prov_subscriber => $prov_subs, - pref_list => [qw/cfu cfb cft cfna cfs/], + pref_list => [qw/cfu cfb cft cfna cfs cfr/], ); return unless $self->validate_form( @@ -139,7 +139,7 @@ sub update_item { run => 1, ); - for my $type (qw/cfu cfb cft cfna cfs/) { + for my $type (qw/cfu cfb cft cfna cfs cfr/) { next unless "ARRAY" eq ref $resource->{$type}{destinations}; next unless ($allowed_prefs->{$type}); for my $d (@{ $resource->{$type}{destinations} }) { @@ -172,7 +172,7 @@ sub update_item { } } - for my $type (qw/cfu cfb cft cfna cfs/) { + for my $type (qw/cfu cfb cft cfna cfs cfr/) { next unless ($allowed_prefs->{$type}); my $mapping = $c->model('DB')->resultset('voip_cf_mappings')->search_rs({ subscriber_id => $prov_subscriber_id, diff --git a/lib/NGCP/Panel/Role/API/SubscriberProfiles.pm b/lib/NGCP/Panel/Role/API/SubscriberProfiles.pm index 8560eaac09..a2e1e0e546 100644 --- a/lib/NGCP/Panel/Role/API/SubscriberProfiles.pm +++ b/lib/NGCP/Panel/Role/API/SubscriberProfiles.pm @@ -156,7 +156,7 @@ sub update_item { expose_to_customer => 1, }, { - attribute => { -in => [qw/cfu cft cfna cfb cfs/] }, + attribute => { -in => [qw/cfu cft cfna cfb cfs cfr/] }, }, ], }); @@ -174,7 +174,7 @@ sub update_item { if(keys %old_attributes) { my $cfs = $c->model('DB')->resultset('voip_preferences')->search({ id => { -in => [ keys %old_attributes ] }, - attribute => { -in => [qw/cfu cfb cft cfna cfs/] }, + attribute => { -in => [qw/cfu cfb cft cfna cfs cfr/] }, }); my @subs = $c->model('DB')->resultset('provisioning_voip_subscribers') ->search({ diff --git a/lib/NGCP/Panel/Role/API/Subscribers.pm b/lib/NGCP/Panel/Role/API/Subscribers.pm index 17b773382e..641015a83e 100644 --- a/lib/NGCP/Panel/Role/API/Subscribers.pm +++ b/lib/NGCP/Panel/Role/API/Subscribers.pm @@ -701,7 +701,7 @@ sub update_item { if(keys %old_profile_attributes) { my $cfs = $schema->resultset('voip_preferences')->search({ id => { -in => [ keys %old_profile_attributes ] }, - attribute => { -in => [qw/cfu cfb cft cfna cfs/] }, + attribute => { -in => [qw/cfu cfb cft cfna cfs cfr/] }, }); $prov_subscriber->voip_usr_preferences->search({ attribute_id => { -in => [ keys %old_profile_attributes ] }, diff --git a/lib/NGCP/Panel/Utils/InvoiceTemplate.pm b/lib/NGCP/Panel/Utils/InvoiceTemplate.pm index 767d894e7d..f61213784f 100644 --- a/lib/NGCP/Panel/Utils/InvoiceTemplate.pm +++ b/lib/NGCP/Panel/Utils/InvoiceTemplate.pm @@ -292,7 +292,7 @@ sub get_dummy_data { start_time => time, source_customer_cost => int(rand(100000)), duration => int(rand(7200)) + 10, - call_type => (qw/cfu cfb cft cfna cfs/)[int(rand 4)], + call_type => (qw/cfu cfb cft cfna cfs cfr/)[int(rand 4)], zone => "Zone $_", zone_detail => "Detail $_", }}(1 .. 50) diff --git a/lib/NGCP/Panel/Widget/Dashboard/SubscriberCFOverview.pm b/lib/NGCP/Panel/Widget/Dashboard/SubscriberCFOverview.pm index 0668390110..dfdcf8cea0 100644 --- a/lib/NGCP/Panel/Widget/Dashboard/SubscriberCFOverview.pm +++ b/lib/NGCP/Panel/Widget/Dashboard/SubscriberCFOverview.pm @@ -22,7 +22,8 @@ sub _get_cf_type_descriptions { cfb => $c->loc("Call Forward Busy"), cft => $c->loc("Call Forward Timeout"), cfna => $c->loc("Call Forward Unavailable"), - cfs => $c->loc("Call Forward SMS"), }; + cfs => $c->loc("Call Forward SMS"), + cfr => $c->loc("Call Forward Rerouting"), }; } sub cfs { @@ -32,7 +33,7 @@ sub cfs { my $cfs = {}; my $descriptions = $self->_get_cf_type_descriptions($c); - foreach my $type (qw/cfu cfna cft cfb cfs/) { + foreach my $type (qw/cfu cfna cft cfb cfs cfr/) { my $maps = $prov_subscriber->voip_cf_mappings ->search({ type => $type }); my @mappings = (); diff --git a/share/templates/subscriber/preferences.tt b/share/templates/subscriber/preferences.tt index 8c42aebdac..8acb221ba5 100644 --- a/share/templates/subscriber/preferences.tt +++ b/share/templates/subscriber/preferences.tt @@ -118,7 +118,8 @@ $( document ).ready(function() { { type = "cfb", desc = c.loc("Call Forward Busy") }, { type = "cft", desc = c.loc("Call Forward Timeout") }, { type = "cfna", desc = c.loc("Call Forward Unavailable") }, - { type = "cfs", desc = c.loc("Call Forward SMS") } ] -%] + { type = "cfs", desc = c.loc("Call Forward SMS") }, + { type = "cfr", desc = c.loc("Call Forward Rerouting") } ] -%] [% IF c.user.roles == "subscriber" || c.user.roles == "subscriberadmin" -%] [% NEXT IF special_prefs.check && !special_prefs.callforward.${cf.type} -%] [% END -%] diff --git a/t/api-rest/api-callforwards.t b/t/api-rest/api-callforwards.t index 41fc13e7e8..577dfe08ec 100644 --- a/t/api-rest/api-callforwards.t +++ b/t/api-rest/api-callforwards.t @@ -96,7 +96,7 @@ SKIP:{ #check cf structure delete $cf1single->{_links}; is(ref $cf1single, "HASH", "cf should be hash"); - my @valid_types = (qw/cfu cfb cft cfna cfs/); + my @valid_types = (qw/cfu cfb cft cfna cfs cfr/); my %valid_types; @valid_types{@valid_types} = ( 1 ) x @valid_types; foreach my $type(@valid_types){ diff --git a/t/api-rest/api-events.t b/t/api-rest/api-events.t index 4b8bcca945..1537d00836 100644 --- a/t/api-rest/api-events.t +++ b/t/api-rest/api-events.t @@ -295,6 +295,7 @@ my %customer_map = (); cfu => [{ destinationset => $destinationset_2->{name}, timeset => $timeset->{name}}], cfs => [], + cfr => [], }); #1. update destination set: diff --git a/t/api-rest/api-journals.t b/t/api-rest/api-journals.t index 6410413822..098dd597cb 100644 --- a/t/api-rest/api-journals.t +++ b/t/api-rest/api-journals.t @@ -886,6 +886,8 @@ sub test_callforwards { times => $cftimeset->{times}}, cfs => { destinations => $cfdestinationset->{destinations}, times => $cftimeset->{times}}, + cfr => { destinations => $cfdestinationset->{destinations}, + times => $cftimeset->{times}}, })); $res = $ua->request($req); is($res->code, 200, _get_request_test_message("PUT test callforwards")); @@ -949,6 +951,8 @@ sub test_cfmapping { timeset => $cftimeset->{name}}], cfs => [{ destinationset => $cfdestinationset->{name}, timeset => $cftimeset->{name}}], + cfr => [{ destinationset => $cfdestinationset->{name}, + timeset => $cftimeset->{name}}], })); $res = $ua->request($req); is($res->code, 200, _get_request_test_message("PUT test cfmappings")); diff --git a/t/api-rest/api-subscriber-cf.t b/t/api-rest/api-subscriber-cf.t index f27f35ca7d..ca77da9117 100644 --- a/t/api-rest/api-subscriber-cf.t +++ b/t/api-rest/api-subscriber-cf.t @@ -141,6 +141,7 @@ my $cf_map = $test->resource( cft => [], cfna => [], cfs => [], + cfr => [], cft_ringtimeout => undef, } );