From 59e160680303853859f874479a8970059549d563 Mon Sep 17 00:00:00 2001 From: Irina Peshinskaya Date: Sat, 18 Mar 2017 08:59:39 +0200 Subject: [PATCH] TT#13267 Use provisioining_voip_subscribers ids to delete pbx groups Change-Id: If6d79efc768f4a950ef84b106f0c5ba22bcf9b53 --- lib/NGCP/Panel/Utils/Subscriber.pm | 14 +++++++++++--- t/api-rest/api-subscribers.t | 28 +++++++++++++++++++--------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm index dda7c4d64a..890ee1b762 100644 --- a/lib/NGCP/Panel/Utils/Subscriber.pm +++ b/lib/NGCP/Panel/Utils/Subscriber.pm @@ -444,7 +444,7 @@ sub get_pbx_subscribers_rs{ ); return $rs; } -#the method named "item" as it can return both groups or groups members + sub get_pbx_subscribers_ordered_by_ids{ my %params = @_; @@ -475,6 +475,7 @@ sub get_pbx_subscribers_ordered_by_ids{ return wantarray ? (\@items, (( 0 < @absent_items_ids) ? \@absent_items_ids : undef )) : \@items; } +#the method named "item" as it can return both groups or groups members sub get_subscriber_pbx_items{ my %params = @_; @@ -562,16 +563,23 @@ sub manage_pbx_groups{ if(scalar @deleted_ids){ #delete all old groups, to support correct order $c->log->debug('Delete groups:'.join(',',@deleted_ids)); + my @deleted_ids_provisioning = $schema->resultset('provisioning_voip_subscribers')->search_rs( + { + 'voip_subscriber.id' => { -in => [ @deleted_ids ] }, + },{ + join => 'voip_subscriber', + } + )->get_column('id')->all(); my $member_preferences_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( c => $c, attribute => 'cloud_pbx_hunt_group', )->search_rs({ - subscriber_id => { -in => [ @deleted_ids ] }, + subscriber_id => { -in => [ @deleted_ids_provisioning ] }, value => $subscriber_uri, }); $member_preferences_rs->delete; - $prov_subscriber->voip_pbx_groups->search_rs( { group_id => { -in => [@deleted_ids] } } )->delete; + $prov_subscriber->voip_pbx_groups->search_rs( { group_id => { -in => [ @deleted_ids_provisioning ] } } )->delete; } if(scalar @added_ids){ $c->log->debug('Added groups:'.join(',',@added_ids)); diff --git a/t/api-rest/api-subscribers.t b/t/api-rest/api-subscribers.t index 91b7c0c2b0..adb96b1366 100644 --- a/t/api-rest/api-subscribers.t +++ b/t/api-rest/api-subscribers.t @@ -205,15 +205,21 @@ if($remote_config->{config}->{features}->{cloudpbx}){ $_[0]->{is_pbx_group} = 0; delete $_[0]->{alias_numbers}; }); - $members->[0]->{content}->{pbx_group_ids} = []; + $members->[1]->{content}->{pbx_group_ids} = []; diag("1. Check that member will return empty groups after put groups empty"); - my($member_put,$member_get) = $test_machine->check_put2get($members->[0]); + my($member_put,$member_get) = $test_machine->check_put2get($members->[1]); + is_deeply( $members->[1]->{content}->{pbx_group_ids}, [], "Check that member will return empty groups after put groups empty"); - $members->[0]->{content}->{pbx_group_ids} = [map { $groups->[$_]->{content}->{id} } (2,1)]; + $members->[1]->{content}->{pbx_group_ids} = [map { $groups->[$_]->{content}->{id} } (2,1)]; diag("2. Check that member will return groups as they were specified"); - #($member_put,$member_get) = $test_machine->check_put2get($members->[0]); - my ($res,$content,$request) = $test_machine->request_put(@{$members->[0]}{qw/content location/}); - $test_machine->http_code_msg(200, "PUT of the members groups was successful", $res, $content); + #fix for the 5415 prevents changing members order in the group, this is why resulting groups order for the member may differ from the input + #($member_put,$member_get) = $test_machine->check_put2get($members->[1]); + + my($res,$content) = $test_machine->request_put(@{$members->[1]}{qw/content location/}); + $test_machine->http_code_msg(200, "PUT for members[1] was successful", $res, $content); + my(undef, $members_1_after_touch) = $test_machine->check_item_get($members->[1]->{location}); + #print Dumper [$members->[1]->{content}, $members_1_after_touch]; + is_deeply( [sort @{$members->[1]->{content}->{pbx_group_ids}}], [sort @{$members_1_after_touch->{pbx_group_ids}}], "Check member groups after touch - the same cortege"); $groups->[1]->{content}->{pbx_groupmember_ids} = [map { $members->[$_]->{content}->{id} } (2,1,0)]; diag("3. Check that group will return members as they were specified"); @@ -228,12 +234,16 @@ if($remote_config->{config}->{features}->{cloudpbx}){ diag("5415:Set members order for the group;\n"); $groups->[1]->{content}->{pbx_groupmember_ids} = [ map { $members->[$_]->{content}->{id} } ( 0, 2, 1 ) ]; - $test_machine->check_put2get($groups->[1]); + ($group_put,$group_get)= $test_machine->check_put2get($groups->[1]); diag("5415:Touch one of the members;\n"); - $members->[1]->{content}->{pbx_group_ids} = [ map { $groups->[$_]->{content}->{id} } (2,1)]; - my($res,$content) = $test_machine->request_put(@{$members->[1]}{qw/content location/}); + $members->[2]->{content}->{pbx_group_ids} = [ map { $groups->[$_]->{content}->{id} } (2,1)]; + #my($res,$content) = $test_machine->check_put2get($members->[2]); + #fix for the 5415 prevents changing members order in the group, this is why resulting groups order for the member may differ from the input + my($res,$content) = $test_machine->request_put(@{$members->[2]}{qw/content location/}); $test_machine->http_code_msg(200, "PUT for groups was successful", $res, $content); + my(undef, $members_2_after_touch) = $test_machine->check_item_get($members->[2]->{location}); + is_deeply( [sort @{$members->[2]->{content}->{pbx_group_ids}}], [sort @{$members_2_after_touch->{pbx_group_ids}}], "Check member groups after touch - the same cortege"); diag("5415:Check members order in the group;\n"); my(undef, $group_get_after) = $test_machine->check_item_get($groups->[1]->{location});