You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/t/api-rest/api-phonebookentries.t

325 lines
14 KiB

use strict;
use warnings;
use Test::Collection;
use Test::FakeData;
use Test::More;
use Data::Dumper;
use Clone qw/clone/;
use feature 'state';
#use NGCP::Panel::Utils::Subscriber;
my $test_machine = Test::Collection->new(
name => 'phonebookentries',
QUIET_DELETION => 1,
);
my $subscriber_test_machine = Test::Collection->new(
name => 'subscribers',
QUIET_DELETION => 1,
);
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({
'phonebookentries' => {
'data' => {
customer_id => sub { return shift->get_id('customers',@_); },
reseller_id => sub { return shift->get_id('resellers',@_); },
subscriber_id => sub { return shift->get_id('subscribers',@_); },
name => 'api_test phonebook username',
number => '111222333',
shared => '1',
},
},
});
$subscriber_test_machine->DATA_ITEM_STORE($fake_data->process('subscribers'));
$subscriber_test_machine->form_data_item();
$test_machine->DATA_ITEM_STORE($fake_data->process('phonebookentries'));
$test_machine->form_data_item();
my $remote_config = $test_machine->init_catalyst_config;
$test_machine->QUERY_PARAMS('reseller_id='.$fake_data->{data}->{phonebookentries}->{data}->{reseller_id});
my $admin_phonebookentries_created = $test_machine->check_create_correct(2, sub {
delete $_[0]->{customer_id};
delete $_[0]->{subscriber_id};
delete $_[0]->{shared};
$_[0]->{number} = time() + seq();
} );
$test_machine->check_bundle();
$test_machine->QUERY_PARAMS('');
{
$fake_data->{data}->{subscribers}->{data}->{administrative} = 1;
my $subscriberadmin = $fake_data->create('subscribers')->[0];
$fake_data->{data}->{subscribers}->{data}->{administrative} = 0;
my $subscriber = $fake_data->create('subscribers')->[0];
diag("create subscriber of other customer of other reseller");
my $fake_data_other = Test::FakeData->new(keep_db_data => 1);
$fake_data_other->{data}->{customers}->{data}->{external_id} = 'not_default_one';
$fake_data_other->{data}->{customercontacts}->{data}->{email} = 'not_default_one@email.com';
$fake_data_other->{data}->{contracts}->{data}->{external_id} = 'not_default_one';
$fake_data_other->{data}->{resellers}->{data}->{name} = 'not_default_one';
my $subscriber_other_customer = $fake_data_other->create('subscribers')->[0];
diag("create subscriber_other_phonebookentries");
my $subscriber_other_phonebookentries = $test_machine->check_create_correct(2, sub {
delete $_[0]->{customer_id};
delete $_[0]->{reseller_id};
$_[0]->{subscriber_id} = $subscriber_other_customer->{content}->{customer_id};
$_[0]->{number} = time() + seq();
} );
diag("create customer_other_phonebookentries");
my $customer_other_phonebookentries = $test_machine->check_create_correct(2, sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{reseller_id};
$_[0]->{customer_id} = $subscriber_other_customer->{content}->{customer_id};
$_[0]->{number} = time() + seq();
} );
diag("create reseller_other_phonebookentries");
my $reseller_other_phonebookentries = $test_machine->check_create_correct(2, sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{customer_id};
$_[0]->{reseller_id} = $fake_data_other->get_id('resellers',@_);
$_[0]->{number} = time() + seq();
} );
#------------------------- ADMIN
my ($res,$content);
$test_machine->runas('admin');
diag("\n\n\nADMIN :");
diag("create items one-by-one:");
my $admin_phonebookentries_created = $test_machine->check_create_correct(2, sub {
delete $_[0]->{customer_id};
delete $_[0]->{subscriber_id};
delete $_[0]->{shared};
$_[0]->{number} = time() + seq();
} );
test_phonebook_collection($admin_phonebookentries_created,'/api/phonebookentries/?reseller_id='.$fake_data->{data}->{phonebookentries}->{data}->{reseller_id});
#------------------------- RESELLER
{
my $reseller_admin = $test_machine->get_item_hal('admins','/api/admins/?login=api_test');
if (!(exists $reseller_admin->{total_count} && $reseller_admin->{total_count})) {
$fake_data->test_machine($test_machine);#because we removed shared certs when runas admin
my $data = $fake_data->process('admins');
$data->{login} = 'api_test';
$data->{password} = 'api_test';
($res,$content) = $test_machine->request_post($data, '/api/admins/');
$test_machine->http_code_msg(201, "create reseller",$res,$content);
$test_machine->set_reseller_credentials($data);
}
}
$test_machine->runas('reseller');
diag("\n\n\nRESELLER :");
diag("reseller: attempt to create using other reseller_id");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{customer_id};
$_[0]->{reseller_id} = $fake_data_other->get_id('resellers');
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "reseller: attempt to create using other reseller customer_id:",$res,$content,
"Unknown reseller_id value '".$fake_data_other->get_id('resellers')."'");
diag("reseller: attempt to create using other reseller customer_id");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{reseller_id};
$_[0]->{customer_id} = $subscriber_other_customer->{content}->{customer_id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "reseller: attempt to create using other reseller customer_id:",$res,$content,
"Unknown customer_id value '".$subscriber_other_customer->{content}->{customer_id}."'");
diag("reseller: attempt to create using other reseller subscriber_id");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{customer_id};
delete $_[0]->{reseller_id};
$_[0]->{subscriber_id} = $subscriber_other_customer->{content}->{id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "reseller: attempt to create using other reseller customer_id:",$res,$content,
"Unknown subscriber_id value '".$subscriber_other_customer->{content}->{id}."'");
diag("create items one-by-one:");
my $reseller_phonebookentries_created = $test_machine->check_create_correct(1, sub {
delete $_[0]->{reseller_id};
delete $_[0]->{subscriber_id};
delete $_[0]->{shared};
$_[0]->{number} = time() + seq();
} );
push @$reseller_phonebookentries_created, @{
$test_machine->check_create_correct(1, sub {
delete $_[0]->{customer_id};
delete $_[0]->{subscriber_id};
delete $_[0]->{shared};
$_[0]->{number} = time() + seq();
} )
},@{
$test_machine->check_create_correct(1, sub {
delete $_[0]->{customer_id};
delete $_[0]->{reseller_id};
$_[0]->{number} = time() + seq();
} )
};
test_phonebook_collection($reseller_phonebookentries_created,'/api/phonebookentries/?customer_id='.$fake_data->{data}->{phonebookentries}->{data}->{customer_id});
#------------------------- SUBSCRIBERADMIN
$test_machine->set_subscriber_credentials($subscriberadmin->{content});
$test_machine->runas('subscriber');
diag("\n\n\nSUBSCRIBERADMIN ".$subscriberadmin->{content}->{id}.":");
diag("subscriberadmin: attempt to create using other customer subscriber:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{customer_id};
delete $_[0]->{reseller_id};
$_[0]->{subscriber_id} = $subscriber_other_customer->{content}->{id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "Check that we can't create a phonebook entry in a name of other customers subscriber",$res,$content,
"Unknown subscriber_id value '".$subscriber_other_customer->{content}->{id}."'");
diag("subscriberadmin: attempt to create using other customer_id:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{reseller_id};
$_[0]->{customer_id} = $subscriber_other_customer->{content}->{customer_id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "subscriberadmin: attempt to create using customer_id:",$res,$content,
"Unknown customer_id value '".$subscriber_other_customer->{content}->{customer_id}."'");
diag("subscriberadmin: attempt to create using reseller_id:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{customer_id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "subscriberadmin: attempt to create using reseller_id",$res,$content,
"'customer_id' or 'subscriber_id' should be specified.");
diag("subscriberadmin: attempt to create using reseller_id and customer_id together:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "subscriberadmin: attempt to create using reseller_id and customer_id together:",$res,$content,
"Only one of either 'customer_id' or 'subscriber_id' should be specified");
diag("create items one-by-one:");
my $subscriberadmin_phonebookentries_created = $test_machine->check_create_correct(2, sub {
delete $_[0]->{customer_id};
delete $_[0]->{reseller_id};
$_[0]->{subscriber_id} = $subscriberadmin->{content}->{id};
$_[0]->{number} = time() + seq();
} );
test_phonebook_collection($subscriberadmin_phonebookentries_created, '/api/phonebookentries/?subscriber_id='.$subscriberadmin->{content}->{id});
#------------------------- SUBSCRIBER
$test_machine->set_subscriber_credentials($subscriber->{content});
$test_machine->runas('subscriber');
diag("\n\n\nSUBSCRIBER ".$subscriber->{content}->{id}.":");
diag("subscriber: attempt to create using other customer subscriber:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{customer_id};
delete $_[0]->{reseller_id};
$_[0]->{subscriber_id} = $subscriber_other_customer->{content}->{id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "Check that we can't create a phonebook entry in a name of other customers subscriber",$res,$content,
"Unknown subscriber_id value '".$subscriber_other_customer->{content}->{id}."'");
diag("subscriber: attempt to create using other customer_id:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{reseller_id};
$_[0]->{customer_id} = $subscriber_other_customer->{content}->{customer_id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "subscriber: attempt to create using customer_id:",$res,$content,
"'subscriber_id' should be specified.");
diag("subscriber: attempt to create using reseller_id:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
delete $_[0]->{customer_id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "subscriber: attempt to create using reseller_id",$res,$content,
"'subscriber_id' should be specified.");
diag("subscriber: attempt to create using reseller_id and customer_id together:");
($res,$content) = $test_machine->check_item_post(sub {
delete $_[0]->{subscriber_id};
$_[0]->{number} = time() + seq();
});
$test_machine->http_code_msg(422, "subscriber: attempt to create using reseller_id and customer_id together:",$res,$content,
"'subscriber_id' should be specified.");
diag("create items one-by-one:");
my $subscriber_phonebookentries_created = $test_machine->check_create_correct(2, sub {
delete $_[0]->{customer_id};
delete $_[0]->{reseller_id};
$_[0]->{subscriber_id} = $subscriber->{content}->{id};
$_[0]->{number} = time() + seq();
} );
test_phonebook_collection($subscriber_phonebookentries_created, '/api/phonebookentries/?subscriber_id='.$subscriber->{content}->{id});
}
$test_machine->runas('admin');
$fake_data->clear_test_data_all();
$test_machine->clear_test_data_all();#fake data aren't registered in this test machine, so they will stay.
$fake_data->clear_test_data_all();
undef $test_machine;
undef $fake_data;
done_testing;
sub test_phonebook_collection{
my ($list,$collection_uri) = @_;
$collection_uri //= 'api/phonebookentries';
diag("collection_uri: $collection_uri;");
my $content_type = 'text/csv';
my $content_type_old = clone $test_machine->content_type;
$test_machine->content_type->{POST} = $content_type;
diag("get collection:");
$test_machine->get_collection_hal('phonebookentries',$collection_uri);
my ($req,$res,$content);
$req = $test_machine->get_request_get( $collection_uri );
$req->header('Accept' => $content_type);
diag("download csv:");
$res = $test_machine->request($req);
my $csv_data = $res->content;
my $filename = "phonebook_list.csv";
$test_machine->http_code_msg(200, "check response code", $res, $csv_data);
ok(length($csv_data) > 0, "Check that downloaded csv is not empty.");
diag("upload csv with purge_existing = 0:");
($res,$content) = $test_machine->request_post($csv_data, $collection_uri);#
$test_machine->http_code_msg(201, "check file upload", $res, $content);
$test_machine->content_type(clone $content_type_old);
diag("go through list:");
foreach my $entry (@$list) {
$test_machine->check_get2put($entry);
$test_machine->request_delete($entry->{location});
}
$test_machine->content_type->{POST} = $content_type;
diag("upload csv with purge_existing = 1:");
($res,$content) = $test_machine->request_post($csv_data, $collection_uri.($collection_uri !~/\?/?'?':'&').'purge_existing=true');#
$test_machine->http_code_msg(201, "check file upload", $res, $content);
$test_machine->content_type(clone $content_type_old);
}
# vim: set tabstop=4 expandtab: