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.
325 lines
14 KiB
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:
|