MT#20369 Catch duplicated alias error on subscriber update

Change-Id: I27eb47a82cd81f7a9d9d797eb98251d8b2cf03ed
changes/84/6684/4
Irina Peshinskaya 10 years ago
parent 71ace932f5
commit 53c815d1db

@ -611,14 +611,21 @@ sub update_item {
}
delete $resource->{email};
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
c => $c,
schema => $schema,
primary_number => $resource->{e164},
alias_numbers => $alias_numbers,
reseller_id => $customer->contact->reseller_id,
subscriber_id => $subscriber->id,
);
try {
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
c => $c,
schema => $schema,
primary_number => $resource->{e164},
alias_numbers => $alias_numbers,
reseller_id => $customer->contact->reseller_id,
subscriber_id => $subscriber->id,
);
} catch(DBIx::Class::Exception $e where { /Duplicate entry '([^']+)' for key 'number_idx'/ }) {
$e =~ /Duplicate entry '([^']+)' for key 'number_idx'/;
$c->log->error("failed to update subscriber, number $1 already exists"); # TODO: user, message, trace, ...
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number '$1' already exists.");
last;
}
my $billing_res = {
external_id => $resource->{external_id},

@ -45,7 +45,7 @@ $fake_data->set_data_from_script({
});
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');
my $pilot = $test_machine->get_item_hal('subscribers','/api/subscribers/?customer_id='.$fake_data_processed->{customer_id}.'&'.'is_pbx_pilot=1');
if($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
@ -58,6 +58,28 @@ $test_machine->form_data_item();
my $remote_config = $test_machine->init_catalyst_config;
{
#20369
diag("20369: informative error for the PUT method on subscriber with duplicated number;\n\n");
my $members = $test_machine->check_create_correct( 2, sub{
my $num = $_[1]->{i};
$_[0]->{username} .= time().'_20369_'.$num ;
$_[0]->{webusername} .= time().'_'.$num;
$_[0]->{pbx_extension} .= '20369'.$num;
$_[0]->{primary_number}->{ac} .= $num;
$_[0]->{is_pbx_group} = 0;
$_[0]->{is_pbx_pilot} = ($pilot || $_[1]->{i} > 1)? 0 : 1;
$_[0]->{alias_numbers} = [{ ac => '111'.$num, cc=> 11, sn => 11 },{ ac => '112'.$num, cc=> 11, sn => 11 }];
} );
#$members->[1]->{content}->{primary_number} = $members->[0]->{content}->{primary_number};
#$members->[1]->{content}->{primary_number} = $members->[0]->{content}->{alias_numbers}->[0];
$members->[1]->{content}->{alias_numbers}->[0] = $members->[0]->{content}->{alias_numbers}->[0];
my ($res,$content,$request) = $test_machine->request_put(@{$members->[1]}{qw/content location/});
$test_machine->http_code_msg(422, "Check that PUT existing number will return nice error", $res, $content);
#Number '11-1111-11' already exists
ok($content->{message} =~ /Number ['\-\d]+ already exists/, "check error message in body");
$test_machine->clear_test_data_all();#fake data aren't registered in this test machine, so they will stay.
}
{
# create new subscribers from DATA_ITEM. Item is not created in the fake_data->process.
$test_machine->check_create_correct( 1, sub{

@ -320,7 +320,7 @@ sub get_item_hal{
$uri //= $self->get_uri_collection($name)."?page=1&rows=1";
my($res,$list_collection,$req) = $self->check_item_get($self->normalize_uri($uri));
($reshal,$location) = $self->get_hal_from_collection($list_collection,$name);
if($reshal->{content}->{total_count}){
if($reshal->{total_count} || ('HASH' eq $reshal->{content} && $reshal->{content}->{total_count})){
$resitem = { num => 1, content => $reshal, res => $res, req => $req, location => $location };
$self->DATA_LOADED->{$name} ||= [];
push @{$self->DATA_LOADED->{$name}}, $resitem;
@ -1008,7 +1008,9 @@ sub http_code_msg{
my($self,$code,$message,$res,$content) = @_;
my $message_res;
if ( ($res->code < 300) || ( $code >= 300 ) ) {
$message_res = $message;
my $res_message = $res->message // '';
my $content_message = 'HASH' eq ref $content ? $content->{message} // '' : '' ;
$message_res = $message.' (' . $res_message . ': ' . $content_message . ')';
} else {
$content //= $self->get_response_content($res);
if (defined $content && $content && defined $content->{message}) {

Loading…
Cancel
Save