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.
350 lines
11 KiB
350 lines
11 KiB
#!/usr/bin/perl
|
|
use strict;
|
|
use warnings;
|
|
|
|
use NGCP::Test;
|
|
use Test::More;
|
|
use Clone 'clone';
|
|
use JSON qw/from_json to_json/;
|
|
use Data::Dumper;
|
|
|
|
my $test = NGCP::Test->new(log_debug => 0);
|
|
my $t = $test->generate_sid();
|
|
my $c_admin = $test->client();
|
|
|
|
my $ref = $test->reference_data(
|
|
client => $c_admin,
|
|
use_persistent => 1,
|
|
delete_persistent => 0,
|
|
depends => [
|
|
{
|
|
resource => 'admins',
|
|
hints => [{ name => 'reseller admin' }],
|
|
name => 'my_reseller_admin'
|
|
},
|
|
{
|
|
resource => 'subscriberprofiles',
|
|
hints => [{ name => 'subscriber profile' }],
|
|
name => 'my_sub_profile'
|
|
},
|
|
{
|
|
resource => 'subscribers',
|
|
hints => [{ name => 'pbx pilot subscriber' }],
|
|
name => 'my_pbx_subscriber'
|
|
},
|
|
],
|
|
);
|
|
|
|
my $sid = $ref->sid();
|
|
|
|
# test capabilities as admin
|
|
diag("test capabilities as admin");
|
|
{
|
|
my $expected = {
|
|
cloudpbx => $ENV{HAS_CLOUDPBX} // 0,
|
|
sms => $ENV{HAS_SMS} // 0,
|
|
faxserver => $ENV{HAS_FAXSERVER} // 1,
|
|
fileshare => $ENV{HAS_FILESHARE} // 0,
|
|
mobilepush => $ENV{HAS_MOBILEPUSH} // 0,
|
|
};
|
|
|
|
my $cap_res = $test->resource(
|
|
client => $c_admin,
|
|
resource => 'capabilities',
|
|
);
|
|
|
|
my $caps = $cap_res->test_get(
|
|
name => 'fetch capabilities as admin',
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
|
|
my $tmpexpected = clone($expected);
|
|
my @caps = ();
|
|
foreach my $cap (@{ $caps->[0]->{_embedded}->{'ngcp:capabilities'} }) {
|
|
my $name = $cap->{name};
|
|
my $val = $cap->{enabled} ? 1 : 0;
|
|
is(exists $expected->{$name}, 1, "returned admin capability $name is expected");
|
|
$test->inc_test_count();
|
|
is($val, $expected->{$name}, "returned admin capability $name has value $$expected{$name}");
|
|
$test->inc_test_count();
|
|
delete $tmpexpected->{$cap->{name}};
|
|
push @caps, $cap;
|
|
}
|
|
is(keys %{ $tmpexpected }, 0, "all expected admin capabilities seen");
|
|
$test->inc_test_count();
|
|
|
|
foreach my $cap(@caps) {
|
|
diag("test individual capability $cap->{name} with id $cap->{id} as admin");
|
|
my $items = $cap_res->test_get(
|
|
name => "fetch individual capability $cap->{name} as admin",
|
|
item => $cap,
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
}
|
|
}
|
|
|
|
# test capabilities as reseller
|
|
diag("test capabilities as reseller");
|
|
{
|
|
my $c_reseller = $test->client(
|
|
role => 'reseller',
|
|
username => $ref->data('my_reseller_admin')->{login},
|
|
password => "reseller_$sid",
|
|
);
|
|
|
|
my $expected = {
|
|
cloudpbx => $ENV{HAS_CLOUDPBX} // 0,
|
|
sms => $ENV{HAS_SMS} // 0,
|
|
faxserver => $ENV{HAS_FAXSERVER} // 1,
|
|
fileshare => $ENV{HAS_FILESHARE} // 0,
|
|
mobilepush => $ENV{HAS_MOBILEPUSH} // 0,
|
|
};
|
|
|
|
my $cap_res = $test->resource(
|
|
client => $c_reseller,
|
|
resource => 'capabilities',
|
|
);
|
|
|
|
my $caps = $cap_res->test_get(
|
|
name => 'fetch capabilities as reseller',
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
|
|
my $tmpexpected = clone($expected);
|
|
my @caps = ();
|
|
foreach my $cap (@{ $caps->[0]->{_embedded}->{'ngcp:capabilities'} }) {
|
|
my $name = $cap->{name};
|
|
my $val = $cap->{enabled} ? 1 : 0;
|
|
is(exists $expected->{$name}, 1, "returned reseller capability $name is expected");
|
|
$test->inc_test_count();
|
|
is($val, $expected->{$name}, "returned reseller capability $name has value $$expected{$name}");
|
|
$test->inc_test_count();
|
|
delete $tmpexpected->{$cap->{name}};
|
|
push @caps, $cap;
|
|
}
|
|
is(keys %{ $tmpexpected }, 0, "all expected reseller capabilities seen");
|
|
$test->inc_test_count();
|
|
|
|
foreach my $cap(@caps) {
|
|
diag("test individual capability $cap->{name} with id $cap->{id} as reseller");
|
|
my $items = $cap_res->test_get(
|
|
name => "fetch individual capability $cap->{name} as reseller",
|
|
item => $cap,
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
}
|
|
}
|
|
|
|
diag("test capabilities as pbx subscriber");
|
|
{
|
|
my $c_subscriber = $test->client(
|
|
role => 'subscriber',
|
|
username => $ref->data('my_pbx_subscriber')->{webusername} . '@' .
|
|
$ref->data('my_pbx_subscriber')->{domain},
|
|
password => $ref->data('my_pbx_subscriber')->{webpassword},
|
|
);
|
|
|
|
my $expected = {
|
|
cloudpbx => 1,
|
|
sms => $ENV{HAS_SMS} // 0,
|
|
faxserver => $ENV{HAS_FAXSERVER} // 1,
|
|
fileshare => $ENV{HAS_FILESHARE} // 0,
|
|
mobilepush => $ENV{HAS_MOBILEPUSH} // 0,
|
|
};
|
|
|
|
my $cap_res = $test->resource(
|
|
client => $c_subscriber,
|
|
resource => 'capabilities',
|
|
);
|
|
|
|
my $caps = $cap_res->test_get(
|
|
name => 'fetch capabilities as pbx subscriber',
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
|
|
my $tmpexpected = clone($expected);
|
|
my @caps = ();
|
|
foreach my $cap (@{ $caps->[0]->{_embedded}->{'ngcp:capabilities'} }) {
|
|
my $name = $cap->{name};
|
|
my $val = $cap->{enabled} ? 1 : 0;
|
|
is(exists $expected->{$name}, 1, "returned pbx capability $name is expected");
|
|
$test->inc_test_count();
|
|
is($val, $expected->{$name}, "returned pbx capability $name has value $$expected{$name}");
|
|
$test->inc_test_count();
|
|
delete $tmpexpected->{$cap->{name}};
|
|
push @caps, $cap;
|
|
}
|
|
is(keys %{ $tmpexpected }, 0, "all expected pbx capabilities seen");
|
|
$test->inc_test_count();
|
|
|
|
foreach my $cap(@caps) {
|
|
diag("test individual capability $cap->{name} with id $cap->{id} as pbx subscriber");
|
|
my $items = $cap_res->test_get(
|
|
name => "fetch individual capability $cap->{name} as pbx reseller",
|
|
item => $cap,
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
}
|
|
|
|
# get a subscriber profile assigned
|
|
my $sub_res = $test->resource(
|
|
client => $c_admin,
|
|
resource => 'subscribers'
|
|
);
|
|
$sub_res->test_put(
|
|
name => 'assign subscriber profile',
|
|
item => $ref->data('my_pbx_subscriber'),
|
|
skip_test_fields => [qw/modify_timestamp/],
|
|
data_replace => [[
|
|
{
|
|
field => 'profile_set_id',
|
|
value => $ref->data('my_sub_profile')->{profile_set_id},
|
|
},
|
|
{
|
|
field => 'profile_id',
|
|
value => $ref->data('my_sub_profile')->{id},
|
|
},
|
|
]],
|
|
expected_result => { code => '200' },
|
|
);
|
|
|
|
$caps = $cap_res->test_get(
|
|
name => 'fetch capabilities as pbx subscriber after profile',
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
|
|
$expected->{faxserver} = $ENV{FAXSERVER}//1;
|
|
$tmpexpected = clone($expected);
|
|
@caps = ();
|
|
foreach my $cap (@{ $caps->[0]->{_embedded}->{'ngcp:capabilities'} }) {
|
|
my $name = $cap->{name};
|
|
my $val = $cap->{enabled} ? 1 : 0;
|
|
is(exists $expected->{$name}, 1, "returned pbx profile capability $name is expected");
|
|
$test->inc_test_count();
|
|
is($val, $expected->{$name}, "returned pbx profile capability $name has value $$expected{$name}");
|
|
$test->inc_test_count();
|
|
delete $tmpexpected->{$cap->{name}};
|
|
push @caps, $cap;
|
|
}
|
|
is(keys %{ $tmpexpected }, 0, "all expected pbx profile capabilities seen");
|
|
$test->inc_test_count();
|
|
|
|
foreach my $cap(@caps) {
|
|
diag("test individual pbx profile capability $cap->{name} with id $cap->{id} as pbx subscriber");
|
|
my $items = $cap_res->test_get(
|
|
name => "fetch individual pbx profile capability $cap->{name}",
|
|
item => $cap,
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
}
|
|
|
|
# modify profile to remove fax_server attribute
|
|
my $prof_res = $test->resource(
|
|
client => $c_admin,
|
|
resource => 'subscriberprofiles'
|
|
);
|
|
my $orig_attrs = clone($ref->data('my_sub_profile')->{attributes});
|
|
$prof_res->test_put(
|
|
name => 'remove all attributes',
|
|
item => $ref->data('my_sub_profile'),
|
|
data_replace => {
|
|
field => 'attributes', value => [qw/ncos clir/],
|
|
},
|
|
expected_result => { code => '200' },
|
|
);
|
|
|
|
|
|
# test again
|
|
$caps = $cap_res->test_get(
|
|
name => 'fetch capabilities as pbx subscriber after profile change',
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
|
|
$expected->{faxserver} = 0;
|
|
$tmpexpected = clone($expected);
|
|
@caps = ();
|
|
foreach my $cap (@{ $caps->[0]->{_embedded}->{'ngcp:capabilities'} }) {
|
|
my $name = $cap->{name};
|
|
my $val = $cap->{enabled} ? 1 : 0;
|
|
is(exists $expected->{$name}, 1, "returned pbx profile change capability $name is expected");
|
|
$test->inc_test_count();
|
|
is($val, $expected->{$name}, "returned pbx profile change capability $name has value $$expected{$name}");
|
|
$test->inc_test_count();
|
|
delete $tmpexpected->{$cap->{name}};
|
|
push @caps, $cap;
|
|
}
|
|
is(keys %{ $tmpexpected }, 0, "all expected pbx profile change capabilities seen");
|
|
$test->inc_test_count();
|
|
|
|
foreach my $cap(@caps) {
|
|
diag("test individual pbx profile change capability $cap->{name} with id $cap->{id} as pbx subscriber");
|
|
my $items = $cap_res->test_get(
|
|
name => "fetch individual pbx profile change capability $cap->{name}",
|
|
item => $cap,
|
|
expected_links => [],
|
|
expected_fields => [qw/
|
|
id name enabled
|
|
/],
|
|
expected_result => { code => 200 }
|
|
);
|
|
}
|
|
|
|
# reset profile
|
|
$sub_res->test_put(
|
|
name => 'unassign subscriber profile',
|
|
item => $ref->data('my_pbx_subscriber'),
|
|
skip_test_fields => [qw/modify_timestamp/],
|
|
data_replace => [[
|
|
{ field => 'profile_set_id', value => undef },
|
|
{ field => 'profile_id', value => undef },
|
|
]],
|
|
expected_result => { code => '200' },
|
|
);
|
|
$prof_res->test_put(
|
|
name => 'restore profile attributes',
|
|
item => $ref->data('my_sub_profile'),
|
|
data_replace => {
|
|
field => 'attributes', value => $orig_attrs,
|
|
},
|
|
expected_result => { code => '200' },
|
|
);
|
|
}
|
|
|
|
$test->done();
|