diff --git a/lib/NGCP/Panel/Controller/API/ContractsItem.pm b/lib/NGCP/Panel/Controller/API/ContractsItem.pm index 4317560b92..547022d6e2 100644 --- a/lib/NGCP/Panel/Controller/API/ContractsItem.pm +++ b/lib/NGCP/Panel/Controller/API/ContractsItem.pm @@ -31,7 +31,7 @@ __PACKAGE__->config( Does => [qw(ACL RequireSSL)], Method => $_, Path => __PACKAGE__->dispatch_path, - } } @{ __PACKAGE__->allowed_methods } + } } @{ __PACKAGE__->allowed_methods }, }, action_roles => [qw(HTTPMethods)], ); @@ -41,6 +41,7 @@ sub auto :Private { $self->set_body($c); $self->log_request($c); + return 1; } sub GET :Allow { @@ -54,9 +55,8 @@ sub GET :Allow { my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( (map { # XXX Data::HAL must be able to generate links with multiple relations - s|rel="(http://purl.org/sipwise/ngcp-api/#rel-resellers)"|rel="item $1"|; - s/rel=self/rel="item self"/; - $_ + s|rel="(http://purl.org/sipwise/ngcp-api/#rel-resellers)"|rel="item $1"|r =~ + s/rel=self/rel="item self"/r; } $hal->http_headers), ), $hal->as_json); $c->response->headers($response->headers); @@ -104,6 +104,7 @@ sub PATCH :Allow { my $old_resource = { $contract->get_inflated_columns }; my $billing_mapping = $contract->billing_mappings->find($contract->get_column('bmid')); $old_resource->{billing_profile_id} = $billing_mapping->billing_profile_id; + $old_resource->{type} = $billing_mapping->product->class; my $resource = $self->apply_patch($c, $old_resource, $json); last unless $resource; @@ -146,6 +147,8 @@ sub PUT :Allow { ); last unless $resource; my $old_resource = { $contract->get_inflated_columns }; + my $billing_mapping = $contract->billing_mappings->find($contract->get_column('bmid')); + $old_resource->{type} = $billing_mapping->product->class; my $form = $self->get_form($c); $contract = $self->update_contract($c, $contract, $old_resource, $resource, $form); @@ -171,6 +174,7 @@ sub PUT :Allow { } =pod + # we don't allow to delete contracts sub DELETE :Allow { my ($self, $c, $id) = @_; @@ -196,12 +200,14 @@ sub DELETE :Allow { } return; } + =cut sub end : Private { my ($self, $c) = @_; $self->log_response($c); + return; } # vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Role/API/Contracts.pm b/lib/NGCP/Panel/Role/API/Contracts.pm index e40cf3014c..7cc2e7c6d1 100644 --- a/lib/NGCP/Panel/Role/API/Contracts.pm +++ b/lib/NGCP/Panel/Role/API/Contracts.pm @@ -119,7 +119,7 @@ sub update_contract { $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'billing_profile_id', not defined"); return; } - + $form //= $self->get_form($c); # TODO: for some reason, formhandler lets missing contact_id slip thru $resource->{contact_id} //= undef; @@ -128,6 +128,7 @@ sub update_contract { form => $form, resource => $resource, ); + delete $resource->{type}; my $now = NGCP::Panel::Utils::DateTime::current_local; $resource->{modify_timestamp} = $now; diff --git a/t/api-contracts.t b/t/api-contracts.t index 0e0e602b5c..375fba0656 100644 --- a/t/api-contracts.t +++ b/t/api-contracts.t @@ -108,7 +108,7 @@ my @allcontracts = (); is($res->code, 422, "create contract with invalid type"); my $err = JSON::from_json($res->decoded_content); is($err->{code}, "422", "check error code in body"); - ok($err->{message} =~ /Invalid 'type'/, "check error message in body"); + like($err->{message}, qr/Validation failed.*type/, "check error message in body"); # try to create invalid contract with wrong billing profile $req->content(JSON::to_json({