diff --git a/lib/NGCP/Panel/Controller/API/Reminders.pm b/lib/NGCP/Panel/Controller/API/Reminders.pm index 159afa5200..428146a45f 100644 --- a/lib/NGCP/Panel/Controller/API/Reminders.pm +++ b/lib/NGCP/Panel/Controller/API/Reminders.pm @@ -117,7 +117,7 @@ sub GET :Allow { $hal->resource({ total_count => $total_count, }); - my $response = HTTP::Response->new(HTTP_OK, undef, + my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new($hal->http_headers(skip_links => 1)), $hal->as_json); $c->response->headers($response->headers); $c->response->body($response->content); @@ -151,7 +151,7 @@ sub POST :Allow { my $guard = $c->model('DB')->txn_scope_guard; { my $resource = $self->get_valid_post_data( - c => $c, + c => $c, media_type => 'application/json', ); last unless $resource; @@ -163,29 +163,11 @@ sub POST :Allow { form => $form, exceptions => [ "subscriber_id" ], ); - if($c->user->roles eq "admin") { - } elsif($c->user->roles eq "reseller") { - - } - - my $sub_rs = $c->model('DB')->resultset('voip_subscribers')->search({ - id => $resource->{subscriber_id}, - }); - if($c->user->roles eq "reseller") { - $sub_rs = $sub_rs->search({ - 'contact.reseller_id' => $c->user->reseller_id, - },{ - join => { contract => 'contact' }, - }); - } - my $sub = $sub_rs->first; - unless($sub && $sub->provisioning_voip_subscriber) { - $c->log->error("invalid subscriber_id '$$resource{subscriber_id}'"); # TODO: user, message, trace, ... - $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Subscriber does not exist"); - last; - } + my $sub = $self->get_subscriber_by_id($c, $resource->{subscriber_id} ); + return unless $sub; $resource->{subscriber_id} = $sub->provisioning_voip_subscriber->id; + my $item; $item = $c->model('DB')->resultset('voip_reminder')->find({ subscriber_id => $resource->{subscriber_id}, @@ -203,7 +185,7 @@ sub POST :Allow { $self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to create reminder."); last; } - + last unless $self->add_create_journal_item_hal($c,sub { my $self = shift; my ($c) = @_; diff --git a/lib/NGCP/Panel/Role/API/Reminders.pm b/lib/NGCP/Panel/Role/API/Reminders.pm index 3c011dc748..ea42edda23 100644 --- a/lib/NGCP/Panel/Role/API/Reminders.pm +++ b/lib/NGCP/Panel/Role/API/Reminders.pm @@ -94,23 +94,9 @@ sub update_item { resource => $resource, exceptions => [ "subscriber_id" ], ); + my $sub = $self->get_subscriber_by_id($c, $resource->{subscriber_id} ); + return unless $sub; - my $sub_rs = $c->model('DB')->resultset('voip_subscribers')->search({ - 'me.id' => $resource->{subscriber_id}, - }); - if($c->user->roles eq "reseller") { - $sub_rs = $sub_rs->search({ - 'contact.reseller_id' => $c->user->reseller_id, - },{ - join => { contract => 'contact' }, - }); - } - my $sub = $sub_rs->first; - unless($sub && $sub->provisioning_voip_subscriber) { - $c->log->error("invalid subscriber_id '$$resource{subscriber_id}'"); # TODO: user, message, trace, ... - $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Subscriber does not exist"); - return; - } $resource->{subscriber_id} = $sub->provisioning_voip_subscriber->id; my $dup = $c->model('DB')->resultset('voip_reminder')->search({ @@ -128,5 +114,26 @@ sub update_item { return $item; } +sub get_subscriber_by_id{ + my ($self, $c, $subscriber_id) = @_; + + my $sub_rs = $c->model('DB')->resultset('voip_subscribers')->search({ + 'me.id' => $subscriber_id, + }); + if($c->user->roles eq "reseller") { + $sub_rs = $sub_rs->search({ + 'contact.reseller_id' => $c->user->reseller_id, + },{ + join => { contract => 'contact' }, + }); + } + my $sub = $sub_rs->first; + unless($sub && $sub->provisioning_voip_subscriber) { + $c->log->error("invalid subscriber_id '$subscriber_id'"); # TODO: user, message, trace, ... + $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Subscriber does not exist"); + return; + } + return $sub; +} 1; # vim: set tabstop=4 expandtab: diff --git a/t/api-rest/api-reminders.t b/t/api-rest/api-reminders.t new file mode 100644 index 0000000000..a13f448c8a --- /dev/null +++ b/t/api-rest/api-reminders.t @@ -0,0 +1,38 @@ +use strict; + +use Test::Collection; +use Test::FakeData; +use Test::More; +use Data::Dumper; + +#use NGCP::Panel::Utils::Subscriber; + +my $test_machine = Test::Collection->new( + name => 'reminders', +); +my $fake_data = Test::FakeData->new; + +$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)}; + +$fake_data->set_data_from_script({ + 'reminders' => { + 'data' => { + subscriber_id => sub { return shift->get_id('subscribers',@_); }, + recur => 'weekdays',#never' (only once)|'weekdays' (on weekdays)|'always' (everyday) + 'time' => '14:00', + }, + 'query' => ['subscriber_id'], + }, +}); + +$test_machine->DATA_ITEM_STORE($fake_data->process('reminders')); +$test_machine->form_data_item(); +$test_machine->check_create_correct( 1, ); +$test_machine->check_get2put(); +$test_machine->check_bundle(); +$test_machine->clear_test_data_all();#fake data aren't registered in this test machine, so they will stay. +done_testing; + + +# vim: set tabstop=4 expandtab: