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.
106 lines
4.3 KiB
106 lines
4.3 KiB
use strict;
|
|
use warnings;
|
|
|
|
use Test::Collection;
|
|
use Test::FakeData;
|
|
use Test::More;
|
|
use Data::Dumper;
|
|
use Clone qw/clone/;
|
|
use feature 'state';
|
|
#use NGCP::Panel::Utils::Subscriber;
|
|
#use Data::Compare qw//;
|
|
|
|
my $test_machine = Test::Collection->new(
|
|
name => 'subscribers',
|
|
QUIET_DELETION => 1,
|
|
);
|
|
|
|
$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(
|
|
keep_db_data => 1,
|
|
test_machine => $test_machine,
|
|
);
|
|
$fake_data->load_collection_data('subscribers');
|
|
my $fake_data_processed = $fake_data->process('subscribers');
|
|
|
|
my $pilot = $test_machine->get_item_hal('subscribers','/api/subscribers/?customer_id='.$fake_data_processed->{customer_id}.'&'.'is_pbx_pilot=1');
|
|
if((exists $pilot->{total_count} && $pilot->{total_count}) || (exists $pilot->{content}->{total_count} && $pilot->{content}->{total_count} > 0) ){
|
|
$fake_data_processed->{is_pbx_pilot} = 0;
|
|
#remove pilot aliases to don't intersect with them. On subscriber termination admin adopt numbers, see ticket#4967
|
|
$test_machine->request_patch( [ { op => 'replace', path => '/alias_numbers', value => [] } ], $pilot->{location} );
|
|
}else{
|
|
undef $pilot;
|
|
}
|
|
$test_machine->DATA_ITEM_STORE($fake_data_processed);
|
|
$test_machine->form_data_item();
|
|
|
|
my $remote_config = $test_machine->init_catalyst_config;
|
|
#modify time changes on every data change, and primary_number_id on every primary number change
|
|
my $put2get_check_params = { ignore_fields => $fake_data->data->{subscribers}->{update_change_fields} };
|
|
|
|
|
|
{
|
|
my $member_to_terminate;
|
|
my $member_to_get_number;
|
|
my $pilot_local;
|
|
my $alias_numbers = [
|
|
{ ac => '115', cc=> 15, sn => '50975' },
|
|
{ ac => '116', cc=> 16, sn => '50975' },
|
|
{ ac => '117', cc=> 17, sn => '50975' },
|
|
{ ac => '118', cc=> 18, sn => '50975' },
|
|
];
|
|
if(!$pilot) {
|
|
diag("50975: create pilot");
|
|
$pilot = $test_machine->check_create_correct( 1, sub{
|
|
my $num = $_[1]->{i}.Test::FakeData::seq;
|
|
$_[0]->{username} .= time().'_50975_'.$num ;
|
|
$_[0]->{webusername} .= time().'_'.$num;
|
|
$_[0]->{pbx_extension} .= '50975'.$num;
|
|
$_[0]->{primary_number}->{ac} .= $num;
|
|
$_[0]->{is_pbx_group} = 0;
|
|
$_[0]->{is_pbx_pilot} = 1;
|
|
$_[0]->{alias_numbers} = $alias_numbers;
|
|
} )->[0];
|
|
$pilot_local = $pilot;
|
|
} else {
|
|
$pilot_local = $pilot;
|
|
|
|
$test_machine->request_patch( [ { op => 'replace', path => '/alias_numbers', value => $alias_numbers } ], $pilot_local->{location} );
|
|
}
|
|
diag("50975: attempt to remove alias_number by partial value");
|
|
$test_machine->request_patch( [ {
|
|
op => 'remove',
|
|
path => '/alias_numbers',
|
|
value => { ac => '115', cc=> '15', sn => '50975' },} ], $pilot_local->{location} );
|
|
my ($aliases) = $test_machine->get_collection_hal('numbers', '/api/numbers/?type=alias&subscriber_id='.$pilot_local->{content}->{id}, 1)->{collection};
|
|
ok(((scalar @$aliases) == 3),"50975: aliases of ".$pilot_local->{content}->{id}." no one is removed without mode hashpartialfit:".(scalar @$aliases ));
|
|
#print Dumper $aliases;
|
|
diag("50975: attempt to remove wrong value");
|
|
$test_machine->request_patch( [ {
|
|
op => 'remove',
|
|
path => '/alias_numbers',
|
|
value => { ac => '1151', cc=> '15', sn => '50975' },} ], $pilot_local->{location} );
|
|
$aliases = $test_machine->get_collection_hal('numbers', '/api/numbers/?type=alias&subscriber_id='.$pilot_local->{content}->{id}, 1)->{collection};
|
|
ok(((scalar @$aliases) == 3),"50975: aliases of ".$pilot_local->{content}->{id}." no one is removed:".(scalar @$aliases ));
|
|
}
|
|
|
|
$test_machine->init_ssl_cert();
|
|
$fake_data->clear_test_data_all();
|
|
$test_machine->clear_test_data_all();#fake data aren't registered in this test machine, so they will stay.
|
|
$fake_data->clear_test_data_all();
|
|
undef $test_machine;
|
|
undef $fake_data;
|
|
done_testing;
|
|
|
|
|
|
|
|
sub number_as_string{
|
|
my ($number_row, %params) = @_;
|
|
return 'HASH' eq ref $number_row
|
|
? $number_row->{cc} . ($number_row->{ac} // '') . $number_row->{sn}
|
|
: $number_row->cc . ($number_row->ac // '') . $number_row->sn;
|
|
}
|
|
|
|
# vim: set tabstop=4 expandtab:
|