in scenario 3 it is unclear, whether the correct direction should be "in" or "out". The benefit of setting it to out would be, that it would make call type modifications easier (see ticket). Change-Id: I40557b2675c750362c4cd6ff63810e0157510463changes/19/11019/2
parent
c37b0edbce
commit
d96f670958
@ -0,0 +1,319 @@
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use Test::More;
|
||||
use Test::MockObject;
|
||||
use NGCP::Panel::Utils::CallList;
|
||||
use NGCP::Schema;
|
||||
|
||||
ok(1, "stub");
|
||||
|
||||
use DDP;
|
||||
|
||||
my $c = Test::MockObject->new();
|
||||
$c->mock('loc', sub{shift; return shift;});
|
||||
$c->mock('log', sub{return shift;});
|
||||
$c->mock('warn', sub{shift; print STDERR shift . "\n"});
|
||||
|
||||
# my $schema = NGCP::Schema->connect({dsn => "dbi:SQLite:dbname=:memory:",
|
||||
# on_connect_do => [
|
||||
# "ATTACH DATABASE ':memory:' AS provisioning",
|
||||
# "ATTACH DATABASE ':memory:' AS billing",
|
||||
# "ATTACH DATABASE ':memory:' AS ngcp",
|
||||
# "ATTACH DATABASE ':memory:' AS kamailio",
|
||||
# "ATTACH DATABASE ':memory:' AS accounting",
|
||||
# ]});
|
||||
# $schema->deploy;
|
||||
my $schema = NGCP::Schema->connect;
|
||||
|
||||
$c->mock('model', sub{return $schema;});
|
||||
|
||||
# Scenario 1 (1 cdr, search by customer, subscriber terminated, outgoing)
|
||||
{
|
||||
my $customer_a = $schema->resultset('contracts')->new_result({
|
||||
id => 21,
|
||||
});
|
||||
my $subscriber_a1 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 31,
|
||||
contract => $customer_a,
|
||||
status => "terminated",
|
||||
});
|
||||
my $cdr1 = $schema->resultset('cdr')->new_result({
|
||||
id => 11,
|
||||
source_user_id => "a1",
|
||||
source_account_id => 21,
|
||||
source_user => "a1_user",
|
||||
source_domain => "a_domain",
|
||||
source_cli => "11",
|
||||
source_clir => 1,
|
||||
destination_user_id => 0,
|
||||
destination_account_id => 0,
|
||||
destination_user => "x_user",
|
||||
destination_domain => "x_domain",
|
||||
destination_user_in => "x_user",
|
||||
call_type => "call",
|
||||
call_status => "cancel",
|
||||
call_id => "aaa",
|
||||
rating_status => "ok",
|
||||
source_subscriber => $subscriber_a1,
|
||||
duration => 1,
|
||||
});
|
||||
|
||||
my $result = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr1, {customer => $customer_a}, {});
|
||||
# p $result;
|
||||
|
||||
is($result->{direction}, "out", "scenario 1 - direction is outgoing");
|
||||
ok(!$result->{intra_customer}, "scenario 1 - not intra customer");
|
||||
is($result->{type}, "call", "scenario 1 - type is call");
|
||||
}
|
||||
|
||||
# Scenario 2 (1 cdr, search by customer, subscriber unavailable, incoming)
|
||||
{
|
||||
my $customer_a = $schema->resultset('contracts')->new_result({
|
||||
id => 21,
|
||||
});
|
||||
my $subscriber_a1 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 31,
|
||||
contract => $customer_a,
|
||||
status => "terminated",
|
||||
# provisioning_voip_subscriber => {},
|
||||
username => "a1",
|
||||
uuid => "a1_id",
|
||||
});
|
||||
my $cdr1 = $schema->resultset('cdr')->new_result({
|
||||
id => 11,
|
||||
source_user_id => 0,
|
||||
source_account_id => 0,
|
||||
source_user => "x_user",
|
||||
source_domain => "a_domain",
|
||||
source_cli => "999",
|
||||
destination_user_id => "a1_id",
|
||||
destination_account_id => 21,
|
||||
destination_user => "a1",
|
||||
destination_domain => "x_domain",
|
||||
destination_user_in => "a1",
|
||||
call_type => "call",
|
||||
call_status => "cancel",
|
||||
call_id => "aaa",
|
||||
rating_status => "ok",
|
||||
duration => 1,
|
||||
});
|
||||
|
||||
my $result = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr1, {customer => $customer_a}, {});
|
||||
# p $result;
|
||||
|
||||
is($result->{direction}, "in", "scenario 2 - direction is incoming");
|
||||
ok(!$result->{intra_customer}, "scenario 2 - not intra customer");
|
||||
is($result->{type}, "call", "scenario 2 - type is call");
|
||||
}
|
||||
|
||||
# Scenario 3 (1 cdr, search by customer, intra customer, subscriber terminated)
|
||||
{
|
||||
my $customer_a = $schema->resultset('contracts')->new_result({
|
||||
id => 21,
|
||||
});
|
||||
my $subscriber_a1 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 31,
|
||||
contract => $customer_a,
|
||||
status => "terminated",
|
||||
# provisioning_voip_subscriber => {},
|
||||
username => "a1",
|
||||
uuid => "a1_id",
|
||||
});
|
||||
my $subscriber_a2 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 32,
|
||||
contract => $customer_a,
|
||||
status => "terminated",
|
||||
# provisioning_voip_subscriber => {},
|
||||
username => "a2",
|
||||
uuid => "a2_id",
|
||||
});
|
||||
my $cdr1 = $schema->resultset('cdr')->new_result({
|
||||
id => 11,
|
||||
source_user_id => "a1_id",
|
||||
source_account_id => 21,
|
||||
source_user => "a1_user",
|
||||
source_domain => "a_domain",
|
||||
source_cli => "131",
|
||||
destination_user_id => "a2_id",
|
||||
destination_account_id => 21,
|
||||
destination_user => "a2_user",
|
||||
destination_domain => "a_domain",
|
||||
destination_user_in => "a2_user",
|
||||
call_type => "call",
|
||||
call_status => "cancel",
|
||||
call_id => "bbb",
|
||||
rating_status => "ok",
|
||||
duration => 1,
|
||||
});
|
||||
|
||||
my $result = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr1, {customer => $customer_a}, {});
|
||||
# p $result;
|
||||
|
||||
ok(!!$result->{intra_customer}, "scenario 3 - is intra_customer");
|
||||
is($result->{direction}, "out", "scenario 3 - direction is outgoing");
|
||||
}
|
||||
|
||||
# Scenario 4 (A1 -> A2 -> A3 -> B1)
|
||||
{
|
||||
my $customer_a = $schema->resultset('contracts')->new_result({
|
||||
id => 21,
|
||||
});
|
||||
my $customer_b = $schema->resultset('contracts')->new_result({
|
||||
id => 22,
|
||||
});
|
||||
my $subscriber_a1 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 31,
|
||||
contract => $customer_a,
|
||||
status => "active",
|
||||
provisioning_voip_subscriber => {
|
||||
uuid => 'a1_id',
|
||||
id => 41,
|
||||
domain => {id => 9999},
|
||||
},
|
||||
username => "a1",
|
||||
uuid => "a1_id",
|
||||
});
|
||||
my $subscriber_a2 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 32,
|
||||
contract => $customer_a,
|
||||
status => "active",
|
||||
provisioning_voip_subscriber => {
|
||||
uuid => 'a2_id',
|
||||
id => 42,
|
||||
domain => {id => 9999},
|
||||
},
|
||||
username => "a2",
|
||||
uuid => "a2_id",
|
||||
});
|
||||
my $subscriber_a3 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 33,
|
||||
contract => $customer_a,
|
||||
status => "active",
|
||||
provisioning_voip_subscriber => {
|
||||
uuid => 'a3_id',
|
||||
id => 43,
|
||||
domain => {id => 9999},
|
||||
},
|
||||
username => "a3",
|
||||
uuid => "a3_id",
|
||||
});
|
||||
my $subscriber_b1 = $schema->resultset('voip_subscribers')->new_result({
|
||||
id => 34,
|
||||
contract => $customer_b,
|
||||
status => "active",
|
||||
provisioning_voip_subscriber => {
|
||||
uuid => 'b1_id',
|
||||
id => 44,
|
||||
domain => {id => 9999},
|
||||
},
|
||||
username => "b1",
|
||||
uuid => "b1_id",
|
||||
});
|
||||
my $cdr1 = $schema->resultset('cdr')->new_result({
|
||||
id => 11,
|
||||
source_user_id => "a1_id",
|
||||
source_account_id => 21,
|
||||
source_user => "a1_user",
|
||||
source_domain => "a_domain",
|
||||
source_cli => "131",
|
||||
source_subscriber => $subscriber_a1,
|
||||
destination_user_id => "a2_id",
|
||||
destination_account_id => 21,
|
||||
destination_user => "a2_user",
|
||||
destination_domain => "a_domain",
|
||||
destination_user_in => "a2_user",
|
||||
destination_subscriber => $subscriber_a2,
|
||||
call_type => "call",
|
||||
call_status => "ok",
|
||||
call_id => "cdr1",
|
||||
rating_status => "ok",
|
||||
duration => 1,
|
||||
});
|
||||
my $cdr2 = $schema->resultset('cdr')->new_result({
|
||||
id => 12,
|
||||
source_user_id => "a2_id",
|
||||
source_account_id => 21,
|
||||
source_user => "a2_user",
|
||||
source_domain => "a_domain",
|
||||
source_cli => "132",
|
||||
source_subscriber => $subscriber_a2,
|
||||
destination_user_id => "a3_id",
|
||||
destination_account_id => 21,
|
||||
destination_user => "a3_user",
|
||||
destination_domain => "a_domain",
|
||||
destination_user_in => "a3_user",
|
||||
destination_subscriber => $subscriber_a3,
|
||||
call_type => "cfu",
|
||||
call_status => "ok",
|
||||
call_id => "cdr2",
|
||||
rating_status => "ok",
|
||||
duration => 1,
|
||||
});
|
||||
my $cdr3 = $schema->resultset('cdr')->new_result({
|
||||
id => 13,
|
||||
source_user_id => "a3_id",
|
||||
source_account_id => 21,
|
||||
source_user => "a3_user",
|
||||
source_domain => "a_domain",
|
||||
source_cli => "133",
|
||||
source_subscriber => $subscriber_a3,
|
||||
destination_user_id => "b1_id",
|
||||
destination_account_id => 22,
|
||||
destination_user => "b1_user",
|
||||
destination_domain => "b_domain",
|
||||
destination_user_in => "b1_user",
|
||||
destination_subscriber => $subscriber_b1,
|
||||
call_type => "cfu",
|
||||
call_status => "ok",
|
||||
call_id => "cdr3",
|
||||
rating_status => "ok",
|
||||
duration => 1,
|
||||
});
|
||||
|
||||
# Perspective A
|
||||
my $result1_a = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr1, {customer => $customer_a}, {});
|
||||
my $result2_a = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr2, {customer => $customer_a}, {});
|
||||
my $result3_a = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr3, {customer => $customer_a}, {});
|
||||
|
||||
is($result1_a->{type}, "call", "scenario 4, cdr1, perspective A - type is call");
|
||||
is($result1_a->{direction}, "out", "scenario 4, cdr1, perspective A - direction is out");
|
||||
ok(!!$result1_a->{intra_customer}, "scenario 4, cdr1, perspective A - intra_customer is true");
|
||||
|
||||
is($result2_a->{type}, "cfu", "scenario 4, cdr2, perspective A - type is cfu");
|
||||
is($result2_a->{direction}, "out", "scenario 4, cdr2, perspective A - direction is out");
|
||||
ok(!!$result2_a->{intra_customer}, "scenario 4, cdr2, perspective A - intra_customer is true");
|
||||
|
||||
is($result3_a->{type}, "cfu", "scenario 4, cdr3, perspective A - type is cfu");
|
||||
is($result3_a->{direction}, "out", "scenario 4, cdr3, perspective A - direction is out");
|
||||
ok( !$result3_a->{intra_customer}, "scenario 4, cdr3, perspective A - intra_customer is false");
|
||||
|
||||
# Perspective A1
|
||||
my $result1_a1 = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr1, {customer => $customer_a, subscriber => $subscriber_a1}, {});
|
||||
|
||||
is($result1_a1->{type}, "call", "scenario 4, cdr1, perspective A1 - type is call");
|
||||
is($result1_a1->{direction}, "out", "scenario 4, cdr1, perspective A1 - direction is out");
|
||||
ok(!!$result1_a1->{intra_customer}, "scenario 4, cdr1, perspective A1 - intra_customer is true");
|
||||
|
||||
# Perspective A2
|
||||
my $result1_a2 = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr1, {customer => $customer_a, subscriber => $subscriber_a2}, {});
|
||||
my $result2_a2 = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr2, {customer => $customer_a, subscriber => $subscriber_a2}, {});
|
||||
|
||||
is($result1_a2->{type}, "call", "scenario 4, cdr1, perspective A2 - type is call");
|
||||
is($result1_a2->{direction}, "in", "scenario 4, cdr1, perspective A2 - direction is in");
|
||||
ok(!!$result1_a2->{intra_customer}, "scenario 4, cdr1, perspective A2 - intra_customer is true");
|
||||
|
||||
is($result2_a2->{type}, "cfu", "scenario 4, cdr2, perspective A2 - type is cfu");
|
||||
is($result2_a2->{direction}, "out", "scenario 4, cdr2, perspective A2 - direction is out");
|
||||
ok(!!$result2_a2->{intra_customer}, "scenario 4, cdr2, perspective A2 - intra_customer is true");
|
||||
|
||||
|
||||
# Perspective B
|
||||
my $result3_b = NGCP::Panel::Utils::CallList::process_cdr_item($c, $cdr3, {customer => $customer_b}, {});
|
||||
|
||||
is($result3_b->{type}, "call", "scenario 4, cdr3, perspective B - type is call");
|
||||
is($result3_b->{direction}, "in", "scenario 4, cdr3, perspective B - direction is in");
|
||||
ok( !$result3_b->{intra_customer}, "scenario 4, cdr3, perspective B - intra_customer is false");
|
||||
}
|
||||
|
||||
done_testing;
|
Loading…
Reference in new issue