From a135c0019076eefb0f67fb99a40b1a4372600ec5 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Tue, 3 Dec 2013 15:53:02 +0100 Subject: [PATCH] MT#5255 API: prevent DELETE of used contact --- lib/NGCP/Panel/Controller/API/ContactsItem.pm | 10 +++++++++- t/api-contacts.t | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/NGCP/Panel/Controller/API/ContactsItem.pm b/lib/NGCP/Panel/Controller/API/ContactsItem.pm index 6f5466317d..9b679f0a8a 100644 --- a/lib/NGCP/Panel/Controller/API/ContactsItem.pm +++ b/lib/NGCP/Panel/Controller/API/ContactsItem.pm @@ -323,7 +323,15 @@ sub DELETE :Allow { { my $contact = $self->contact_by_id($c, $id); last unless $self->resource_exists($c, contact => $contact); - $contact->delete; + my $contract_count = $c->model('DB')->resultset('contracts')->search({ + contact_id => $id + }); + if($contract_count > 0) { + $self->error($c, HTTP_LOCKED, "Contact is still in use."); + last; + } else { + $contact->delete; + } $guard->commit; $c->cache->remove($c->request->uri->canonical->as_string); diff --git a/t/api-contacts.t b/t/api-contacts.t index 6a7623b7b1..7bd8d4b63f 100644 --- a/t/api-contacts.t +++ b/t/api-contacts.t @@ -244,6 +244,9 @@ my @allcontacts = (); $res = $ua->request($req); ok($res->code == 204, "check delete of contact"); } + $req = HTTP::Request->new('DELETE', $uri.'/api/contacts/1'); + $res = $ua->request($req); + ok($res->code == 423, "check delete of used contact"); } done_testing;