TT#35429 Allow both 0/1 an true/false as boolean input in /api/admins

Change-Id: I4c9805ebce17586674f52a9fe97f280fb9991612
changes/56/20656/5
Irina Peshinskaya 8 years ago
parent 174bfc9c02
commit 1d9907ad45

@ -36,7 +36,7 @@ sub create_item {
my ($self, $c, $resource, $form, $process_extras) = @_;
unless($c->user->is_master) {
$self->error($c, HTTP_FORBIDDEN, "Cannot create admin without master permissions");
last;
return;
}
my $item;
try {
@ -44,7 +44,7 @@ sub create_item {
} catch($e) {
$c->log->error("failed to create admin: $e");
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to create admin.");
last;
return;
}
return $item;
}

@ -79,6 +79,10 @@ sub process_form_resource{
$resource->{md5pass} = undef;
$resource->{saltedpass} = NGCP::Panel::Utils::Admin::generate_salted_hash($pass);
}
foreach my $f(qw/billing_data call_data is_active is_master is_superuser lawful_intercept read_only show_passwords/) {
$resource->{$f} = (ref $resource->{$f} eq 'JSON::true' ) ? 1 : 0;
#|| $resource->{$f} eq 'true'
}
return $resource;
}
@ -98,7 +102,7 @@ sub check_duplicate{
if ($existing_item && (!$item || $item->id != $existing_item->id)) {
$c->log->error("admin with login '$$resource{login}' already exists");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Admin with this login already exists");
last;
return;
}
return 1;
}

@ -0,0 +1,52 @@
use strict;
use warnings;
use Test::Collection;
use Test::FakeData;
use Test::More;
use Data::Dumper;
#init test_machine
my $test_machine = Test::Collection->new(
name => 'admins',
);
$test_machine->methods->{collection}->{allowed} = {map {$_ => 1} qw(GET HEAD OPTIONS POST)};
$test_machine->methods->{item}->{allowed} = {map {$_ => 1} qw(GET HEAD OPTIONS DELETE)};
my $fake_data = Test::FakeData->new;
$fake_data->set_data_from_script({
'admins' => {
'data' => {
"reseller_id" => sub { return shift->get_id('resellers',@_); },
"login" => 'api_test_admin',
"password" => 'api_test_admin',
"is_active" => 'true',
"is_master" => 'true',
"is_superuser" => 'true',
"billing_data" => 'true',
"call_data" => 'false',
"lawful_intercept" => 'false',
"read_only" => 'false',
"show_passwords" => 'true'
},
'query' => ['login'],
'data_callbacks' => {
'uniquizer_cb' => sub { Test::FakeData::string_uniquizer(\$_[0]->{login}); },
},
},
});
#for item creation test purposes /post request data/
$test_machine->DATA_ITEM_STORE($fake_data->process('admins'));
$test_machine->form_data_item( );
# create 3 new admins from DATA_ITEM
my $admins = $test_machine->check_create_correct( 3 , sub {
$_[0]->{login}.=seq()
});
$test_machine->check_bundle();
$test_machine->clear_test_data_all();
done_testing;
# vim: set tabstop=4 expandtab:

@ -320,10 +320,5 @@ sub test_phonebook_collection{
$test_machine->content_type(clone $content_type_old);
}
sub seq{
my ($number) = @_;
state $seq = 0;
$number //= 0;
return $number + $seq++;
}
# vim: set tabstop=4 expandtab:

@ -1,7 +1,9 @@
package Test::FakeData;
use strict;
use warnings;
use Moose::Exporter;
use Moose;
use Test::Collection;
use JSON;
@ -18,6 +20,11 @@ use feature 'state';
use Storable;
use File::Temp qw(tempfile);
Moose::Exporter->setup_import_methods(
as_is => [ 'seq' ],
);
sub BUILD {
my $self = shift;
if($self->test_machine->cache_data){
@ -189,17 +196,6 @@ sub build_data_default{
sub build_data{
my ($self) = @_;
my $data = {
'admins' => {
'data' => {
login => 'api_test_admin',
password => 'api_test_admin',
reseller_id => sub { return shift->get_id('resellers',@_); },
},
'query' => ['login'],
'data_callbacks' => {
'uniquizer_cb' => sub { Test::FakeData::string_uniquizer(\$_[0]->{login}); },
},
},
'applyrewrites' => {
'data' => {
direction => "caller_in",
@ -889,6 +885,13 @@ sub DEMOLISH{
}
}
sub seq{
my ($number) = @_;
state $seq = 0;
$number //= 0;
return $number + $seq++;
}
1;
__END__

Loading…
Cancel
Save