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.
214 lines
8.0 KiB
214 lines
8.0 KiB
use warnings;
|
|
use strict;
|
|
|
|
#use Sipwise::Base;
|
|
use Net::Domain qw(hostfqdn);
|
|
use JSON qw();
|
|
use Test::More;
|
|
|
|
my $uri = $ENV{CATALYST_SERVER} || ('https://'.hostfqdn.':4443');
|
|
|
|
my ($ua, $req, $res);
|
|
use Test::Collection;
|
|
$ua = Test::Collection->new()->ua();
|
|
|
|
#$ua->add_handler("request_send", sub {
|
|
# my ($request, $ua, $h) = @_;
|
|
# print $request->method . ' ' . $request->uri . "\n" . ($request->content ? $request->content . "\n" : '') unless $request->header('authorization');
|
|
# return undef;
|
|
#});
|
|
#$ua->add_handler("response_done", sub {
|
|
# my ($response, $ua, $h) = @_;
|
|
# print $response->decoded_content . "\n" if $response->code != 401;
|
|
# return undef;
|
|
#});
|
|
|
|
my $t = time;
|
|
my $reseller_id = 1;
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/domains/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
domain => 'test' . $t . '.example.org',
|
|
reseller_id => $reseller_id,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "POST test domain");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch POSTed test domain");
|
|
my $domain = JSON::from_json($res->decoded_content);
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/billingprofiles/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json({
|
|
name => "test profile $t",
|
|
handle => "testprofile$t",
|
|
reseller_id => $reseller_id,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test billing profile");
|
|
my $billing_profile_id = $res->header('Location');
|
|
$billing_profile_id =~ s/^.+\/(\d+)$/$1/;
|
|
|
|
$req = HTTP::Request->new('POST', $uri.'/api/customercontacts/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
firstname => "cust_contact_first",
|
|
lastname => "cust_contact_last",
|
|
email => "cust_contact\@custcontact.invalid",
|
|
reseller_id => $reseller_id,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create customer contact");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch customer contact");
|
|
my $custcontact = JSON::from_json($res->decoded_content);
|
|
|
|
my %customer_map = ();
|
|
|
|
#goto SKIP;
|
|
{
|
|
my $customer = _create_customer();
|
|
|
|
my $customerfraudpreferences_uri = $uri.'/api/customerfraudpreferences/'.$customer->{id};
|
|
$req = HTTP::Request->new('PUT', $customerfraudpreferences_uri);
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json({
|
|
fraud_daily_limit => 1,
|
|
fraud_daily_lock => 1,
|
|
fraud_daily_notify => 'notify_daily_'.$t.'@example.com',
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "PUT test customerfraudpreferences");
|
|
$req = HTTP::Request->new('GET', $customerfraudpreferences_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch PUT test customerfraudpreferences");
|
|
my $customerfraudpreferences = JSON::from_json($res->decoded_content);
|
|
delete $customerfraudpreferences->{_links};
|
|
|
|
is_deeply($customerfraudpreferences,{
|
|
fraud_interval_limit => undef,
|
|
fraud_interval_lock => undef,
|
|
fraud_interval_notify => undef,
|
|
fraud_daily_limit => 1,
|
|
fraud_daily_lock => 1,
|
|
fraud_daily_notify => 'notify_daily_'.$t.'@example.com',
|
|
},"check PUT test customerfraudpreferences (created) deeply");
|
|
|
|
$req = HTTP::Request->new('PUT', $customerfraudpreferences_uri);
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json({
|
|
fraud_interval_limit => 2,
|
|
fraud_interval_lock => 2,
|
|
fraud_interval_notify => 'notify_interval_'.$t.'@example.com',
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "PUT test customerfraudpreferences");
|
|
$req = HTTP::Request->new('GET', $customerfraudpreferences_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch PUT test customerfraudpreferences");
|
|
$customerfraudpreferences = JSON::from_json($res->decoded_content);
|
|
delete $customerfraudpreferences->{_links};
|
|
|
|
is_deeply($customerfraudpreferences,{
|
|
fraud_interval_limit => 2,
|
|
fraud_interval_lock => 2,
|
|
fraud_interval_notify => 'notify_interval_'.$t.'@example.com',
|
|
fraud_daily_limit => 1,
|
|
fraud_daily_lock => 1,
|
|
fraud_daily_notify => 'notify_daily_'.$t.'@example.com',
|
|
},"check PUT test customerfraudpreferences (updated) deeply");
|
|
|
|
}
|
|
|
|
$t++;
|
|
|
|
#SKIP:
|
|
{
|
|
my $customer = _create_customer();
|
|
|
|
my $customerfraudpreferences_uri = $uri.'/api/customerfraudpreferences/'.$customer->{id};
|
|
$req = HTTP::Request->new('PATCH', $customerfraudpreferences_uri);
|
|
$req->header('Content-Type' => 'application/json-patch+json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json(
|
|
[ { op => 'replace', path => '/fraud_daily_limit', value => '1' },
|
|
{ op => 'replace', path => '/fraud_daily_lock', value => '1' },
|
|
{ op => 'replace', path => '/fraud_daily_notify', value => 'notify_daily_'.$t.'@example.com' } ]
|
|
));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "PATCH test customerfraudpreferences");
|
|
$req = HTTP::Request->new('GET', $customerfraudpreferences_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch PATCHED test customerfraudpreferences");
|
|
my $customerfraudpreferences = JSON::from_json($res->decoded_content);
|
|
delete $customerfraudpreferences->{_links};
|
|
|
|
is_deeply($customerfraudpreferences,{
|
|
fraud_interval_limit => undef,
|
|
fraud_interval_lock => undef,
|
|
fraud_interval_notify => undef,
|
|
fraud_daily_limit => 1,
|
|
fraud_daily_lock => 1,
|
|
fraud_daily_notify => 'notify_daily_'.$t.'@example.com',
|
|
},"check PATCHED test customerfraudpreferences (created) deeply");
|
|
|
|
$req = HTTP::Request->new('PATCH', $customerfraudpreferences_uri);
|
|
$req->header('Content-Type' => 'application/json-patch+json');
|
|
$req->header('Prefer' => 'return=representation');
|
|
$req->content(JSON::to_json(
|
|
[ { op => 'replace', path => '/fraud_interval_limit', value => '2' },
|
|
{ op => 'replace', path => '/fraud_interval_lock', value => '2' },
|
|
{ op => 'replace', path => '/fraud_interval_notify', value => 'notify_interval_'.$t.'@example.com' } ]
|
|
));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "PATCH test customerfraudpreferences");
|
|
$req = HTTP::Request->new('GET', $customerfraudpreferences_uri);
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch PATCHED test customerfraudpreferences");
|
|
$customerfraudpreferences = JSON::from_json($res->decoded_content);
|
|
delete $customerfraudpreferences->{_links};
|
|
|
|
is_deeply($customerfraudpreferences,{
|
|
fraud_interval_limit => 2,
|
|
fraud_interval_lock => 2,
|
|
fraud_interval_notify => 'notify_interval_'.$t.'@example.com',
|
|
fraud_daily_limit => 1,
|
|
fraud_daily_lock => 1,
|
|
fraud_daily_notify => 'notify_daily_'.$t.'@example.com',
|
|
},"check PATCHED test customerfraudpreferences (updated) deeply");
|
|
|
|
}
|
|
|
|
sub _create_customer {
|
|
|
|
my (@further_opts) = @_;
|
|
$req = HTTP::Request->new('POST', $uri.'/api/customers/');
|
|
$req->header('Content-Type' => 'application/json');
|
|
$req->content(JSON::to_json({
|
|
status => "active",
|
|
contact_id => $custcontact->{id},
|
|
type => "sipaccount",
|
|
billing_profile_id => $billing_profile_id,
|
|
max_subscribers => undef,
|
|
external_id => undef,
|
|
@further_opts,
|
|
}));
|
|
$res = $ua->request($req);
|
|
is($res->code, 201, "create test customer");
|
|
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
|
|
$res = $ua->request($req);
|
|
is($res->code, 200, "fetch test customer");
|
|
my $customer = JSON::from_json($res->decoded_content);
|
|
$customer_map{$customer->{id}} = $customer;
|
|
return $customer;
|
|
|
|
}
|
|
|
|
done_testing;
|