mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
code cleanups, used consts from utils
This commit is contained in:
@@ -42,15 +42,15 @@ func TestSetAccounts(t *testing.T) {
|
||||
iscTenant := "itsyscom.com"
|
||||
b10 := &engine.Balance{Value: 10, Weight: 10}
|
||||
cgrAcnt1 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, cgrTenant, "account1"),
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
|
||||
cgrAcnt2 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, cgrTenant, "account2"),
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
|
||||
cgrAcnt3 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, cgrTenant, "account3"),
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
|
||||
iscAcnt1 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, iscTenant, "account1"),
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
|
||||
iscAcnt2 := &engine.Account{Id: utils.ConcatenatedKey(utils.OUT, iscTenant, "account2"),
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + engine.OUTBOUND: engine.BalanceChain{b10}}}
|
||||
BalanceMap: map[string]engine.BalanceChain{utils.MONETARY + utils.OUT: engine.BalanceChain{b10}}}
|
||||
for _, account := range []*engine.Account{cgrAcnt1, cgrAcnt2, cgrAcnt3, iscAcnt1, iscAcnt2} {
|
||||
if err := apierAcntsAcntStorage.SetAccount(account); err != nil {
|
||||
t.Error(err)
|
||||
|
||||
@@ -151,7 +151,7 @@ func (self *ApierV1) AddBalance(attr *AttrAddBalance, reply *string) error {
|
||||
AccountIds: []string{tag},
|
||||
}
|
||||
if attr.Direction == "" {
|
||||
attr.Direction = engine.OUTBOUND
|
||||
attr.Direction = utils.OUT
|
||||
}
|
||||
aType := engine.DEBIT
|
||||
// reverse the sign as it is a debit
|
||||
@@ -200,7 +200,7 @@ func (self *ApierV1) EnableDisableBalance(attr *AttrAddBalance, reply *string) e
|
||||
AccountIds: []string{tag},
|
||||
}
|
||||
if attr.Direction == "" {
|
||||
attr.Direction = engine.OUTBOUND
|
||||
attr.Direction = utils.OUT
|
||||
}
|
||||
at.SetActions(engine.Actions{
|
||||
&engine.Action{
|
||||
@@ -759,7 +759,7 @@ type AttrAddActionTrigger struct {
|
||||
|
||||
func (self *ApierV1) AddTriggeredAction(attr AttrAddActionTrigger, reply *string) error {
|
||||
if attr.BalanceDirection == "" {
|
||||
attr.BalanceDirection = engine.OUTBOUND
|
||||
attr.BalanceDirection = utils.OUT
|
||||
}
|
||||
balExpiryTime, err := utils.ParseTimeDetectLayout(attr.BalanceExpiryTime, self.Config.DefaultTimezone)
|
||||
if err != nil {
|
||||
@@ -823,7 +823,7 @@ func (self *ApierV1) ResetTriggeredActions(attr AttrResetTriggeredAction, reply
|
||||
a = &engine.Action{Id: attr.Id}
|
||||
} else {
|
||||
if attr.Direction == "" {
|
||||
attr.Direction = engine.OUTBOUND
|
||||
attr.Direction = utils.OUT
|
||||
}
|
||||
extraParameters, err := json.Marshal(struct {
|
||||
ThresholdType string
|
||||
|
||||
@@ -974,7 +974,7 @@ func TestApierSetActions(t *testing.T) {
|
||||
if !*testLocal {
|
||||
return
|
||||
}
|
||||
act1 := &utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: engine.OUTBOUND, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}
|
||||
act1 := &utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: utils.OUT, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}
|
||||
attrs1 := &utils.AttrSetActions{ActionsId: "ACTS_1", Actions: []*utils.TPAction{act1}}
|
||||
reply1 := ""
|
||||
if err := rater.Call("ApierV1.SetActions", attrs1, &reply1); err != nil {
|
||||
@@ -993,7 +993,7 @@ func TestApierGetActions(t *testing.T) {
|
||||
return
|
||||
}
|
||||
expectActs := []*utils.TPAction{
|
||||
&utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: engine.OUTBOUND, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}}
|
||||
&utils.TPAction{Identifier: engine.TOPUP_RESET, BalanceType: utils.MONETARY, Direction: utils.OUT, Units: 75.0, ExpiryTime: engine.UNLIMITED, Weight: 20.0}}
|
||||
|
||||
var reply []*utils.TPAction
|
||||
if err := rater.Call("ApierV1.GetActions", "ACTS_1", &reply); err != nil {
|
||||
|
||||
@@ -30,9 +30,6 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
// Direction type
|
||||
INBOUND = "*in"
|
||||
OUTBOUND = "*out"
|
||||
// action trigger threshold types
|
||||
TRIGGER_MIN_COUNTER = "*min_counter"
|
||||
TRIGGER_MAX_COUNTER = "*max_counter"
|
||||
@@ -104,6 +101,9 @@ func (ub *Account) debitBalanceAction(a *Action, reset bool) error {
|
||||
ub.BalanceMap = make(map[string]BalanceChain, 1)
|
||||
}
|
||||
found := false
|
||||
if a.Direction == "" {
|
||||
a.Direction = utils.OUT
|
||||
}
|
||||
id := a.BalanceType + a.Direction
|
||||
ub.CleanExpiredBalances()
|
||||
for _, b := range ub.BalanceMap[id] {
|
||||
@@ -394,6 +394,9 @@ COMMIT:
|
||||
}
|
||||
|
||||
func (ub *Account) GetDefaultMoneyBalance(direction string) *Balance {
|
||||
if direction == "" {
|
||||
direction = utils.OUT
|
||||
}
|
||||
for _, balance := range ub.BalanceMap[utils.MONETARY+direction] {
|
||||
if balance.IsDefault() {
|
||||
return balance
|
||||
@@ -401,7 +404,7 @@ func (ub *Account) GetDefaultMoneyBalance(direction string) *Balance {
|
||||
}
|
||||
// create default balance
|
||||
defaultBalance := &Balance{
|
||||
Uuid: "DEFAULT" + utils.GenUUID(),
|
||||
Uuid: utils.GenUUID(),
|
||||
Weight: 0,
|
||||
} // minimum weight
|
||||
if ub.BalanceMap == nil {
|
||||
@@ -517,7 +520,7 @@ func (ub *Account) getUnitCounter(a *Action) *UnitsCounter {
|
||||
for _, uc := range ub.UnitCounters {
|
||||
direction := a.Direction
|
||||
if direction == "" {
|
||||
direction = OUTBOUND
|
||||
direction = utils.OUT
|
||||
}
|
||||
if uc.BalanceType == a.BalanceType && uc.Direction == direction {
|
||||
return uc
|
||||
@@ -534,7 +537,7 @@ func (ub *Account) countUnits(a *Action) {
|
||||
if unitsCounter == nil {
|
||||
direction := a.Direction
|
||||
if direction == "" {
|
||||
direction = OUTBOUND
|
||||
direction = utils.OUT
|
||||
}
|
||||
unitsCounter = &UnitsCounter{BalanceType: a.BalanceType, Direction: direction}
|
||||
ub.UnitCounters = append(ub.UnitCounters, unitsCounter)
|
||||
@@ -556,7 +559,7 @@ func (ub *Account) initCounters() {
|
||||
if a.Balance != nil {
|
||||
direction := at.BalanceDirection
|
||||
if direction == "" {
|
||||
direction = OUTBOUND
|
||||
direction = utils.OUT
|
||||
}
|
||||
uc, exists := ucTempMap[direction]
|
||||
if !exists {
|
||||
|
||||
@@ -84,19 +84,19 @@ func TestBalanceChainStoreRestore(t *testing.T) {
|
||||
func TestAccountStorageStoreRestore(t *testing.T) {
|
||||
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
|
||||
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
|
||||
accountingStorage.SetAccount(rifsBalance)
|
||||
ub1, err := accountingStorage.GetAccount("other")
|
||||
if err != nil || !ub1.BalanceMap[utils.MONETARY+OUTBOUND].Equal(rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND]) {
|
||||
if err != nil || !ub1.BalanceMap[utils.MONETARY+utils.OUT].Equal(rifsBalance.BalanceMap[utils.MONETARY+utils.OUT]) {
|
||||
t.Log("UB: ", ub1)
|
||||
t.Errorf("Expected %v was %v", rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND], ub1.BalanceMap[utils.MONETARY+OUTBOUND])
|
||||
t.Errorf("Expected %v was %v", rifsBalance.BalanceMap[utils.MONETARY+utils.OUT], ub1.BalanceMap[utils.MONETARY+utils.OUT])
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetSecondsForPrefix(t *testing.T) {
|
||||
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
|
||||
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
|
||||
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 200}}}}
|
||||
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 200}}}}
|
||||
cd := &CallDescriptor{
|
||||
Category: "0",
|
||||
Tenant: "vdf",
|
||||
@@ -104,7 +104,7 @@ func TestGetSecondsForPrefix(t *testing.T) {
|
||||
TimeEnd: time.Date(2013, 10, 4, 15, 46, 10, 0, time.UTC),
|
||||
LoopIndex: 0,
|
||||
DurationIndex: 10 * time.Second,
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723",
|
||||
TOR: utils.VOICE,
|
||||
}
|
||||
@@ -123,8 +123,8 @@ func TestGetSpecialPricedSeconds(t *testing.T) {
|
||||
ub1 := &Account{
|
||||
Id: "OUT:CUSTOMER_1:rif",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1, b2},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1, b2},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
|
||||
},
|
||||
}
|
||||
cd := &CallDescriptor{
|
||||
@@ -133,7 +133,7 @@ func TestGetSpecialPricedSeconds(t *testing.T) {
|
||||
TimeStart: time.Date(2013, 10, 4, 15, 46, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 10, 4, 15, 46, 60, 0, time.UTC),
|
||||
LoopIndex: 0,
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723",
|
||||
TOR: utils.VOICE,
|
||||
}
|
||||
@@ -148,14 +148,14 @@ func TestGetSpecialPricedSeconds(t *testing.T) {
|
||||
func TestAccountStorageStore(t *testing.T) {
|
||||
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
|
||||
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
|
||||
accountingStorage.SetAccount(rifsBalance)
|
||||
result, err := accountingStorage.GetAccount(rifsBalance.Id)
|
||||
if err != nil || rifsBalance.Id != result.Id ||
|
||||
len(rifsBalance.BalanceMap[utils.VOICE+OUTBOUND]) < 2 || len(result.BalanceMap[utils.VOICE+OUTBOUND]) < 2 ||
|
||||
!(rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].Equal(result.BalanceMap[utils.VOICE+OUTBOUND][0])) ||
|
||||
!(rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1].Equal(result.BalanceMap[utils.VOICE+OUTBOUND][1])) ||
|
||||
!rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND].Equal(result.BalanceMap[utils.MONETARY+OUTBOUND]) {
|
||||
len(rifsBalance.BalanceMap[utils.VOICE+utils.OUT]) < 2 || len(result.BalanceMap[utils.VOICE+utils.OUT]) < 2 ||
|
||||
!(rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].Equal(result.BalanceMap[utils.VOICE+utils.OUT][0])) ||
|
||||
!(rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1].Equal(result.BalanceMap[utils.VOICE+utils.OUT][1])) ||
|
||||
!rifsBalance.BalanceMap[utils.MONETARY+utils.OUT].Equal(result.BalanceMap[utils.MONETARY+utils.OUT]) {
|
||||
t.Errorf("Expected %v was %v", rifsBalance, result)
|
||||
}
|
||||
}
|
||||
@@ -163,7 +163,7 @@ func TestAccountStorageStore(t *testing.T) {
|
||||
func TestDebitCreditZeroSecond(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 10, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1s"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -178,13 +178,13 @@ func TestDebitCreditZeroSecond(t *testing.T) {
|
||||
cd := &CallDescriptor{
|
||||
TimeStart: time.Date(2013, 9, 24, 10, 48, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 9, 24, 10, 48, 10, 0, time.UTC),
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Category: "0",
|
||||
TOR: utils.VOICE,
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Category: "0", Value: 21}}}}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Category: "0", Value: 21}}}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
if err != nil {
|
||||
@@ -194,16 +194,16 @@ func TestDebitCreditZeroSecond(t *testing.T) {
|
||||
t.Logf("%+v", cc.Timespans[0])
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitCreditZeroMinute(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -218,15 +218,15 @@ func TestDebitCreditZeroMinute(t *testing.T) {
|
||||
cd := &CallDescriptor{
|
||||
TimeStart: time.Date(2013, 9, 24, 10, 48, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 9, 24, 10, 48, 10, 0, time.UTC),
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Category: "0",
|
||||
TOR: utils.VOICE,
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -238,10 +238,10 @@ func TestDebitCreditZeroMinute(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != time.Minute {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
|
||||
t.Error("Error extracting minutes from balance: ",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ func TestDebitCreditZeroMixedMinute(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testm", Value: 70, Weight: 5, DestinationIds: "NAT", RatingSubject: "*zero1m"}
|
||||
b2 := &Balance{Uuid: "tests", Value: 10, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1s"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -272,8 +272,8 @@ func TestDebitCreditZeroMixedMinute(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1, b2},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1, b2},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -284,19 +284,19 @@ func TestDebitCreditZeroMixedMinute(t *testing.T) {
|
||||
cc.Timespans[1].Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans)
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
|
||||
t.Logf("TS0: %+v", cc.Timespans[0])
|
||||
t.Logf("TS1: %+v", cc.Timespans[1])
|
||||
t.Errorf("Error extracting minutes from balance: %+v", rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1])
|
||||
t.Errorf("Error extracting minutes from balance: %+v", rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitCreditNoCredit(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -324,7 +324,7 @@ func TestDebitCreditNoCredit(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -335,9 +335,9 @@ func TestDebitCreditNoCredit(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != time.Minute {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 {
|
||||
t.Error("Error extracting minutes from balance: ",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
|
||||
}
|
||||
if len(cc.Timespans) != 1 || cc.Timespans[0].GetDuration() != time.Minute {
|
||||
t.Error("Error truncating extra timespans: ", cc.Timespans)
|
||||
@@ -347,7 +347,7 @@ func TestDebitCreditNoCredit(t *testing.T) {
|
||||
func TestDebitCreditHasCredit(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -375,8 +375,8 @@ func TestDebitCreditHasCredit(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 110}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 110}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -387,10 +387,10 @@ func TestDebitCreditHasCredit(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != time.Minute {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 30 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 30 {
|
||||
t.Errorf("Error extracting minutes from balance: %+v, %+v",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
if len(cc.Timespans) != 3 || cc.Timespans[0].GetDuration() != time.Minute {
|
||||
t.Error("Error truncating extra timespans: ", cc.Timespans)
|
||||
@@ -400,7 +400,7 @@ func TestDebitCreditHasCredit(t *testing.T) {
|
||||
func TestDebitCreditSplitMinutesMoney(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 10, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1s"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -423,8 +423,8 @@ func TestDebitCreditSplitMinutesMoney(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 50}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 50}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -435,10 +435,10 @@ func TestDebitCreditSplitMinutesMoney(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != 1*time.Second {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0].Duration)
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 30 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 30 {
|
||||
t.Errorf("Error extracting minutes from balance: %+v, %+v",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
if len(cc.Timespans) != 2 || cc.Timespans[0].GetDuration() != 10*time.Second || cc.Timespans[1].GetDuration() != 20*time.Second {
|
||||
t.Error("Error truncating extra timespans: ", cc.Timespans[1].GetDuration())
|
||||
@@ -448,7 +448,7 @@ func TestDebitCreditSplitMinutesMoney(t *testing.T) {
|
||||
func TestDebitCreditMoreTimespans(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 150, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -476,7 +476,7 @@ func TestDebitCreditMoreTimespans(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -487,9 +487,9 @@ func TestDebitCreditMoreTimespans(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != time.Minute {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 30 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 30 {
|
||||
t.Error("Error extracting minutes from balance: ",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0])
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -497,7 +497,7 @@ func TestDebitCreditMoreTimespansMixed(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
|
||||
b2 := &Balance{Uuid: "testa", Value: 150, Weight: 5, DestinationIds: "NAT", RatingSubject: "*zero1s"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -525,7 +525,7 @@ func TestDebitCreditMoreTimespansMixed(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1, b2},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1, b2},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -536,17 +536,17 @@ func TestDebitCreditMoreTimespansMixed(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != time.Minute {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue() != 130 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 10 ||
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1].GetValue() != 130 {
|
||||
t.Error("Error extracting minutes from balance: ",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][1], cc.Timespans[1])
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][1], cc.Timespans[1])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitCreditNoConectFeeCredit(t *testing.T) {
|
||||
b1 := &Balance{Uuid: "testb", Value: 70, Weight: 10, DestinationIds: "NAT", RatingSubject: "*zero1m"}
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -575,7 +575,7 @@ func TestDebitCreditNoConectFeeCredit(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -583,14 +583,14 @@ func TestDebitCreditNoConectFeeCredit(t *testing.T) {
|
||||
t.Error("Error showing debiting balance error: ", err)
|
||||
}
|
||||
|
||||
if len(cc.Timespans) != 1 || rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 0 {
|
||||
t.Error("Error cutting at no connect fee: ", rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND])
|
||||
if len(cc.Timespans) != 1 || rifsBalance.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 0 {
|
||||
t.Error("Error cutting at no connect fee: ", rifsBalance.BalanceMap[utils.MONETARY+utils.OUT])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitCreditMoneyOnly(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -619,7 +619,7 @@ func TestDebitCreditMoneyOnly(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "money", Value: 50}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "money", Value: 50}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -631,9 +631,9 @@ func TestDebitCreditMoneyOnly(t *testing.T) {
|
||||
t.Logf("%+v", cc.Timespans[0].Increments)
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0].BalanceInfo)
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 0 {
|
||||
if rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 0 {
|
||||
t.Error("Error extracting minutes from balance: ",
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0])
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0])
|
||||
}
|
||||
if len(cc.Timespans) != 2 ||
|
||||
cc.Timespans[0].GetDuration() != 10*time.Second ||
|
||||
@@ -647,7 +647,7 @@ func TestDebitCreditSubjectMinutes(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -672,8 +672,8 @@ func TestDebitCreditSubjectMinutes(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 350}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 350}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -685,10 +685,10 @@ func TestDebitCreditSubjectMinutes(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != 10*time.Second {
|
||||
t.Errorf("Error setting balance id to increment: %+v", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 180 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 280 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 180 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 280 {
|
||||
t.Errorf("Error extracting minutes from balance: %+v, %+v",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
if len(cc.Timespans) != 1 || cc.Timespans[0].GetDuration() != 70*time.Second {
|
||||
for _, ts := range cc.Timespans {
|
||||
@@ -702,7 +702,7 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -727,7 +727,7 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 75, DestinationIds: "NAT", RatingSubject: "minu"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 75, DestinationIds: "NAT", RatingSubject: "minu"}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -738,9 +738,9 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != 10*time.Second {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 5 {
|
||||
if rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 5 {
|
||||
t.Errorf("Error extracting minutes from balance: %+v",
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
if len(cc.Timespans) != 1 || cc.Timespans[0].GetDuration() != 70*time.Second {
|
||||
t.Error("Error truncating extra timespans: ", cc.Timespans)
|
||||
@@ -752,7 +752,7 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -777,8 +777,8 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{b1},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 19500, RatingSubject: "minu"}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{b1},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 19500, RatingSubject: "minu"}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -790,10 +790,10 @@ func TestDebitCreditSubjectMoney(t *testing.T) {
|
||||
cc.Timespans[0].Increments[0].Duration != 10*time.Second {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 7 {
|
||||
if rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 7 {
|
||||
t.Errorf("Error extracting minutes from balance: %+v, %+v",
|
||||
rifsBalance.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
rifsBalance.BalanceMap[utils.VOICE+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
if len(cc.Timespans) != 2 || cc.Timespans[0].GetDuration() != 40*time.Second {
|
||||
for _, ts := range cc.Timespans {
|
||||
@@ -807,13 +807,13 @@ func TestAccountdebitBalance(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "rif",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
}
|
||||
newMb := &Balance{Weight: 20, DestinationIds: "NEW"}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: newMb}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: newMb}
|
||||
ub.debitBalanceAction(a, false)
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 3 || ub.BalanceMap[utils.VOICE+OUTBOUND][2].DestinationIds != newMb.DestinationIds {
|
||||
t.Errorf("Error adding minute bucket! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+OUTBOUND]), ub.BalanceMap[utils.VOICE+OUTBOUND][2], newMb)
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 3 || ub.BalanceMap[utils.VOICE+utils.OUT][2].DestinationIds != newMb.DestinationIds {
|
||||
t.Errorf("Error adding minute bucket! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+utils.OUT]), ub.BalanceMap[utils.VOICE+utils.OUT][2], newMb)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -821,13 +821,13 @@ func TestAccountDisableBalance(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "rif",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
}
|
||||
newMb := &Balance{Weight: 20, DestinationIds: "NAT", Disabled: true}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: newMb}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: newMb}
|
||||
ub.enableDisableBalanceAction(a)
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].Disabled != true {
|
||||
t.Errorf("Error disabling balance! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+OUTBOUND]), ub.BalanceMap[utils.VOICE+OUTBOUND][0], newMb)
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 || ub.BalanceMap[utils.VOICE+utils.OUT][0].Disabled != true {
|
||||
t.Errorf("Error disabling balance! %d %+v %+v", len(ub.BalanceMap[utils.VOICE+utils.OUT]), ub.BalanceMap[utils.VOICE+utils.OUT][0], newMb)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -836,12 +836,12 @@ func TestAccountdebitBalanceExists(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "rif",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS + OUTBOUND: BalanceChain{&Balance{Value: 14}}, utils.DATA + OUTBOUND: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 15, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS + utils.OUT: BalanceChain{&Balance{Value: 14}}, utils.DATA + utils.OUT: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 15, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
}
|
||||
newMb := &Balance{Value: -10, Weight: 20, DestinationIds: "NAT"}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: newMb}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: newMb}
|
||||
ub.debitBalanceAction(a, false)
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 25 {
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 25 {
|
||||
t.Error("Error adding minute bucket!")
|
||||
}
|
||||
}
|
||||
@@ -850,10 +850,10 @@ func TestAccountAddMinuteNil(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "rif",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS + OUTBOUND: BalanceChain{&Balance{Value: 14}}, utils.DATA + OUTBOUND: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS + utils.OUT: BalanceChain{&Balance{Value: 14}}, utils.DATA + utils.OUT: BalanceChain{&Balance{Value: 1024}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
}
|
||||
ub.debitBalanceAction(nil, false)
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 {
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 {
|
||||
t.Error("Error adding minute bucket!")
|
||||
}
|
||||
}
|
||||
@@ -863,100 +863,100 @@ func TestAccountAddMinutBucketEmpty(t *testing.T) {
|
||||
mb2 := &Balance{Value: -10, DestinationIds: "NAT"}
|
||||
mb3 := &Balance{Value: -10, DestinationIds: "OTHER"}
|
||||
ub := &Account{}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: mb1}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: mb1}
|
||||
ub.debitBalanceAction(a, false)
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 1 {
|
||||
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+OUTBOUND])
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 1 {
|
||||
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+utils.OUT])
|
||||
}
|
||||
a = &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: mb2}
|
||||
a = &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: mb2}
|
||||
ub.debitBalanceAction(a, false)
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 1 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
|
||||
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+OUTBOUND])
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 1 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
|
||||
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+utils.OUT])
|
||||
}
|
||||
a = &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: mb3}
|
||||
a = &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: mb3}
|
||||
ub.debitBalanceAction(a, false)
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 {
|
||||
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+OUTBOUND])
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 {
|
||||
t.Error("Error adding minute bucket: ", ub.BalanceMap[utils.VOICE+utils.OUT])
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccountExecuteTriggeredActions(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Balance: &Balance{Value: 1}})
|
||||
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
|
||||
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
|
||||
}
|
||||
// are set to executed
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 1}})
|
||||
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 1}})
|
||||
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
|
||||
}
|
||||
// we can reset them
|
||||
ub.ResetActionTriggers(nil)
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
|
||||
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 120 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 30 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
|
||||
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 120 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 30 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccountExecuteTriggeredActionsBalance(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 100, ThresholdType: TRIGGER_MIN_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 100, ThresholdType: TRIGGER_MIN_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Balance: &Balance{Value: 1}})
|
||||
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue(), ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
|
||||
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
|
||||
t.Error("Error executing triggered actions", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue(), ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccountExecuteTriggeredActionsOrder(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB_OREDER",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS_ORDER"}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ThresholdType: TRIGGER_MAX_COUNTER, ActionsId: "TEST_ACTIONS_ORDER"}},
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 1}})
|
||||
if len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 1 || ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 10 {
|
||||
t.Error("Error executing triggered actions in order", ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 1}})
|
||||
if len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 1 || ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 10 {
|
||||
t.Error("Error executing triggered actions in order", ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestCleanExpired(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB_OREDER",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)},
|
||||
&Balance{ExpirationDate: time.Date(2013, 7, 18, 14, 33, 0, 0, time.UTC)},
|
||||
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)}}, utils.VOICE + OUTBOUND: BalanceChain{
|
||||
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)}}, utils.VOICE + utils.OUT: BalanceChain{
|
||||
&Balance{ExpirationDate: time.Date(2013, 7, 18, 14, 33, 0, 0, time.UTC)},
|
||||
&Balance{ExpirationDate: time.Now().Add(10 * time.Second)},
|
||||
}},
|
||||
}
|
||||
ub.CleanExpiredBalances()
|
||||
if len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 2 {
|
||||
if len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 2 {
|
||||
t.Error("Error cleaning expired balances!")
|
||||
}
|
||||
if len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 1 {
|
||||
if len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 1 {
|
||||
t.Error("Error cleaning expired minute buckets!")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccountUnitCounting(t *testing.T) {
|
||||
ub := &Account{}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
|
||||
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 10 {
|
||||
t.Error("Error counting units")
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
|
||||
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 {
|
||||
t.Error("Error counting units")
|
||||
}
|
||||
@@ -964,15 +964,15 @@ func TestAccountUnitCounting(t *testing.T) {
|
||||
|
||||
func TestAccountUnitCountingOutbound(t *testing.T) {
|
||||
ub := &Account{}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
|
||||
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 10 {
|
||||
t.Error("Error counting units")
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
|
||||
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 {
|
||||
t.Error("Error counting units")
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
|
||||
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 30 {
|
||||
t.Error("Error counting units")
|
||||
}
|
||||
@@ -984,11 +984,11 @@ func TestAccountUnitCountingOutboundInbound(t *testing.T) {
|
||||
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 10 {
|
||||
t.Errorf("Error counting units: %+v", ub.UnitCounters[0])
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}})
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}})
|
||||
if len(ub.UnitCounters) != 1 && ub.UnitCounters[0].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 {
|
||||
t.Error("Error counting units")
|
||||
}
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: INBOUND, Balance: &Balance{Value: 10}})
|
||||
ub.countUnits(&Action{BalanceType: utils.MONETARY, Direction: utils.IN, Balance: &Balance{Value: 10}})
|
||||
if len(ub.UnitCounters) != 2 && ub.UnitCounters[1].BalanceType != utils.MONETARY || ub.UnitCounters[0].Balances[0].GetValue() != 20 || ub.UnitCounters[1].Balances[0].GetValue() != 10 {
|
||||
t.Error("Error counting units")
|
||||
}
|
||||
@@ -997,10 +997,10 @@ func TestAccountUnitCountingOutboundInbound(t *testing.T) {
|
||||
func TestAccountRefund(t *testing.T) {
|
||||
ub := &Account{
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{Uuid: "moneya", Value: 100},
|
||||
},
|
||||
utils.VOICE + OUTBOUND: BalanceChain{
|
||||
utils.VOICE + utils.OUT: BalanceChain{
|
||||
&Balance{Uuid: "minutea", Value: 10, Weight: 20, DestinationIds: "NAT"},
|
||||
&Balance{Uuid: "minuteb", Value: 10, DestinationIds: "RET"},
|
||||
},
|
||||
@@ -1012,12 +1012,12 @@ func TestAccountRefund(t *testing.T) {
|
||||
&Increment{Duration: 4 * time.Second, BalanceInfo: &BalanceInfo{UnitBalanceUuid: "minuteb", MoneyBalanceUuid: ""}},
|
||||
}
|
||||
for _, increment := range increments {
|
||||
ub.refundIncrement(increment, OUTBOUND, utils.VOICE, false)
|
||||
ub.refundIncrement(increment, utils.OUT, utils.VOICE, false)
|
||||
}
|
||||
if ub.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 104 ||
|
||||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 13 ||
|
||||
ub.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue() != 14 {
|
||||
t.Error("Error refounding money: ", ub.BalanceMap[utils.VOICE+OUTBOUND][1].GetValue())
|
||||
if ub.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 104 ||
|
||||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 13 ||
|
||||
ub.BalanceMap[utils.VOICE+utils.OUT][1].GetValue() != 14 {
|
||||
t.Error("Error refounding money: ", ub.BalanceMap[utils.VOICE+utils.OUT][1].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1025,7 +1025,7 @@ func TestDebitShared(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -1049,10 +1049,10 @@ func TestDebitShared(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rif := &Account{Id: "rif", BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
|
||||
}}
|
||||
groupie := &Account{Id: "groupie", BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
|
||||
}}
|
||||
|
||||
sg := &SharedGroup{Id: "SG_TEST", MemberIds: []string{rif.Id, groupie.Id}, AccountParameters: map[string]*SharingParameters{"*any": &SharingParameters{Strategy: STRATEGY_MINE_RANDOM}}}
|
||||
@@ -1064,12 +1064,12 @@ func TestDebitShared(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Error("Error debiting balance: ", err)
|
||||
}
|
||||
if rif.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 0 {
|
||||
t.Errorf("Error debiting from shared group: %+v", rif.BalanceMap[utils.MONETARY+OUTBOUND][0])
|
||||
if rif.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 0 {
|
||||
t.Errorf("Error debiting from shared group: %+v", rif.BalanceMap[utils.MONETARY+utils.OUT][0])
|
||||
}
|
||||
groupie, _ = accountingStorage.GetAccount("groupie")
|
||||
if groupie.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 10 {
|
||||
t.Errorf("Error debiting from shared group: %+v", groupie.BalanceMap[utils.MONETARY+OUTBOUND][0])
|
||||
if groupie.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 10 {
|
||||
t.Errorf("Error debiting from shared group: %+v", groupie.BalanceMap[utils.MONETARY+utils.OUT][0])
|
||||
}
|
||||
|
||||
if len(cc.Timespans) != 1 {
|
||||
@@ -1095,7 +1095,7 @@ func TestMaxDurationShared(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -1119,10 +1119,10 @@ func TestMaxDurationShared(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rif := &Account{Id: "rif", BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneya", Value: 0, SharedGroup: "SG_TEST"}},
|
||||
}}
|
||||
groupie := &Account{Id: "groupie", BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Uuid: "moneyc", Value: 130, SharedGroup: "SG_TEST"}},
|
||||
}}
|
||||
|
||||
sg := &SharedGroup{Id: "SG_TEST", MemberIds: []string{rif.Id, groupie.Id}, AccountParameters: map[string]*SharingParameters{"*any": &SharingParameters{Strategy: STRATEGY_MINE_RANDOM}}}
|
||||
@@ -1142,7 +1142,7 @@ func TestMaxDurationShared(t *testing.T) {
|
||||
|
||||
func TestDebitSMS(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -1165,8 +1165,8 @@ func TestDebitSMS(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.SMS + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
|
||||
utils.SMS + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -1176,16 +1176,16 @@ func TestDebitSMS(t *testing.T) {
|
||||
if cc.Timespans[0].Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.SMS+OUTBOUND][0].GetValue() != 99 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
|
||||
if rifsBalance.BalanceMap[utils.SMS+utils.OUT][0].GetValue() != 99 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
|
||||
t.Log(cc.Timespans[0].Increments)
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.SMS+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.SMS+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitGeneric(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -1208,8 +1208,8 @@ func TestDebitGeneric(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.GENERIC + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
|
||||
utils.GENERIC + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -1219,16 +1219,16 @@ func TestDebitGeneric(t *testing.T) {
|
||||
if cc.Timespans[0].Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
|
||||
t.Error("Error setting balance id to increment: ", cc.Timespans[0].Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.GENERIC+OUTBOUND][0].GetValue() != 99 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
|
||||
if rifsBalance.BalanceMap[utils.GENERIC+utils.OUT][0].GetValue() != 99 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
|
||||
t.Log(cc.Timespans[0].Increments)
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.GENERIC+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.GENERIC+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitDataUnits(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -1258,8 +1258,8 @@ func TestDebitDataUnits(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.DATA + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}},
|
||||
utils.DATA + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 100, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
@@ -1274,16 +1274,16 @@ func TestDebitDataUnits(t *testing.T) {
|
||||
if ts.Increments[0].BalanceInfo.UnitBalanceUuid != "testm" {
|
||||
t.Error("Error setting balance id to increment: ", ts.Increments[0])
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue() != 20 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 21 {
|
||||
if rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue() != 20 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 21 {
|
||||
t.Log(ts.Increments)
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebitDataMoney(t *testing.T) {
|
||||
cc := &CallCost{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Destination: "0723045326",
|
||||
Timespans: []*TimeSpan{
|
||||
&TimeSpan{
|
||||
@@ -1312,23 +1312,23 @@ func TestDebitDataMoney(t *testing.T) {
|
||||
testCallcost: cc,
|
||||
}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{
|
||||
utils.DATA + OUTBOUND: BalanceChain{&Balance{Uuid: "testm", Value: 0, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 160}},
|
||||
utils.DATA + utils.OUT: BalanceChain{&Balance{Uuid: "testm", Value: 0, Weight: 5, DestinationIds: "NAT"}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 160}},
|
||||
}}
|
||||
var err error
|
||||
cc, err = rifsBalance.debitCreditBalance(cd, false, false, true)
|
||||
if err != nil {
|
||||
t.Error("Error debiting balance: ", err)
|
||||
}
|
||||
if rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 0 {
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+OUTBOUND][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue())
|
||||
if rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue() != 0 ||
|
||||
rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 0 {
|
||||
t.Error("Error extracting minutes from balance: ", rifsBalance.BalanceMap[utils.DATA+utils.OUT][0].GetValue(), rifsBalance.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccountGetDefaultMoneyBalanceEmpty(t *testing.T) {
|
||||
acc := &Account{}
|
||||
defBal := acc.GetDefaultMoneyBalance(OUTBOUND)
|
||||
defBal := acc.GetDefaultMoneyBalance(utils.OUT)
|
||||
if defBal == nil || len(acc.BalanceMap) != 1 || !defBal.IsDefault() {
|
||||
t.Errorf("Bad default money balance: %+v", defBal)
|
||||
}
|
||||
@@ -1337,9 +1337,9 @@ func TestAccountGetDefaultMoneyBalanceEmpty(t *testing.T) {
|
||||
func TestAccountGetDefaultMoneyBalance(t *testing.T) {
|
||||
acc := &Account{}
|
||||
acc.BalanceMap = make(map[string]BalanceChain)
|
||||
tag := utils.MONETARY + OUTBOUND
|
||||
tag := utils.MONETARY + utils.OUT
|
||||
acc.BalanceMap[tag] = append(acc.BalanceMap[tag], &Balance{Weight: 10})
|
||||
defBal := acc.GetDefaultMoneyBalance(OUTBOUND)
|
||||
defBal := acc.GetDefaultMoneyBalance(utils.OUT)
|
||||
if defBal == nil || len(acc.BalanceMap[tag]) != 2 || !defBal.IsDefault() {
|
||||
t.Errorf("Bad default money balance: %+v", defBal)
|
||||
}
|
||||
@@ -1352,7 +1352,7 @@ func BenchmarkGetSecondForPrefix(b *testing.B) {
|
||||
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
|
||||
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
|
||||
|
||||
ub1 := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
|
||||
ub1 := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
|
||||
cd := &CallDescriptor{
|
||||
Destination: "0723",
|
||||
}
|
||||
@@ -1365,7 +1365,7 @@ func BenchmarkGetSecondForPrefix(b *testing.B) {
|
||||
func BenchmarkAccountStorageStoreRestore(b *testing.B) {
|
||||
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
|
||||
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
|
||||
rifsBalance := &Account{Id: "other", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
|
||||
for i := 0; i < b.N; i++ {
|
||||
accountingStorage.SetAccount(rifsBalance)
|
||||
accountingStorage.GetAccount(rifsBalance.Id)
|
||||
@@ -1375,7 +1375,7 @@ func BenchmarkAccountStorageStoreRestore(b *testing.B) {
|
||||
func BenchmarkGetSecondsForPrefix(b *testing.B) {
|
||||
b1 := &Balance{Value: 10, Weight: 10, DestinationIds: "NAT"}
|
||||
b2 := &Balance{Value: 100, Weight: 20, DestinationIds: "RET"}
|
||||
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b1, b2}, utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 21}}}}
|
||||
ub1 := &Account{Id: "OUT:CUSTOMER_1:rif", BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b1, b2}, utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 21}}}}
|
||||
cd := &CallDescriptor{
|
||||
Destination: "0723",
|
||||
}
|
||||
|
||||
@@ -514,7 +514,7 @@ func TestActionPlansRemoveMember(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchNil(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
@@ -527,7 +527,7 @@ func TestActionTriggerMatchNil(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchAllBlank(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
@@ -540,12 +540,12 @@ func TestActionTriggerMatchAllBlank(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchMinuteBucketBlank(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY}
|
||||
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY}
|
||||
if !at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -553,7 +553,7 @@ func TestActionTriggerMatchMinuteBucketBlank(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchMinuteBucketFull(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
@@ -566,12 +566,12 @@ func TestActionTriggerMatchMinuteBucketFull(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchAllFull(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
|
||||
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
|
||||
if !at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -579,12 +579,12 @@ func TestActionTriggerMatchAllFull(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchSomeFalse(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Direction: INBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
|
||||
a := &Action{Direction: utils.IN, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 2)}
|
||||
if at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -592,12 +592,12 @@ func TestActionTriggerMatchSomeFalse(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatcBalanceFalse(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 3.0)}
|
||||
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_BALANCE, 3.0)}
|
||||
if at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -605,12 +605,12 @@ func TestActionTriggerMatcBalanceFalse(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatcAllFalse(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Direction: INBOUND, BalanceType: utils.VOICE, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_COUNTER, 3)}
|
||||
a := &Action{Direction: utils.IN, BalanceType: utils.VOICE, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v}`, TRIGGER_MAX_COUNTER, 3)}
|
||||
if at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -618,7 +618,7 @@ func TestActionTriggerMatcAllFalse(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchAll(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
BalanceType: utils.MONETARY,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
@@ -627,7 +627,7 @@ func TestActionTriggerMatchAll(t *testing.T) {
|
||||
BalanceRatingSubject: "test1",
|
||||
BalanceSharedGroup: "test2",
|
||||
}
|
||||
a := &Action{Direction: OUTBOUND, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "DestinationIds": "%v", "BalanceWeight": %v, "BalanceRatingSubject": "%v", "BalanceSharedGroup": "%v"}`, TRIGGER_MAX_BALANCE, 2, "NAT", 1.0, "test1", "test2")}
|
||||
a := &Action{Direction: utils.OUT, BalanceType: utils.MONETARY, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "DestinationIds": "%v", "BalanceWeight": %v, "BalanceRatingSubject": "%v", "BalanceSharedGroup": "%v"}`, TRIGGER_MAX_BALANCE, 2, "NAT", 1.0, "test1", "test2")}
|
||||
if !at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -648,7 +648,7 @@ func TestActionTriggers(t *testing.T) {
|
||||
func TestActionResetTriggres(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
@@ -674,7 +674,7 @@ func TestActionResetTriggresExecutesThem(t *testing.T) {
|
||||
func TestActionResetTriggresActionFilter(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
@@ -687,7 +687,7 @@ func TestActionResetTriggresActionFilter(t *testing.T) {
|
||||
func TestActionSetPostpaid(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
@@ -701,7 +701,7 @@ func TestActionSetPrepaid(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
@@ -715,7 +715,7 @@ func TestActionResetPrepaid(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
@@ -723,7 +723,7 @@ func TestActionResetPrepaid(t *testing.T) {
|
||||
if !ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 0 ||
|
||||
len(ub.UnitCounters) != 0 ||
|
||||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
|
||||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
|
||||
ub.ActionTriggers[0].Executed == true || ub.ActionTriggers[1].Executed == true {
|
||||
t.Log(ub.BalanceMap)
|
||||
t.Error("Reset prepaid action failed!")
|
||||
@@ -733,14 +733,14 @@ func TestActionResetPrepaid(t *testing.T) {
|
||||
func TestActionResetPostpaid(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.SMS, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
resetAccountAction(ub, nil, nil, nil)
|
||||
if ub.BalanceMap[utils.MONETARY].GetTotalValue() != 0 ||
|
||||
len(ub.UnitCounters) != 0 ||
|
||||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 0 ||
|
||||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 0 ||
|
||||
ub.ActionTriggers[0].Executed == true || ub.ActionTriggers[1].Executed == true {
|
||||
t.Error("Reset postpaid action failed!")
|
||||
}
|
||||
@@ -749,18 +749,18 @@ func TestActionResetPostpaid(t *testing.T) {
|
||||
func TestActionTopupResetCredit(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 10 ||
|
||||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 10 ||
|
||||
len(ub.UnitCounters) != 1 ||
|
||||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
|
||||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
|
||||
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+OUTBOUND][0])
|
||||
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -768,18 +768,18 @@ func TestActionTopupResetCreditId(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 100},
|
||||
&Balance{Id: "TEST_B", Value: 15},
|
||||
},
|
||||
},
|
||||
}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Id: "TEST_B", Value: 10}}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Id: "TEST_B", Value: 10}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 110 ||
|
||||
len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 2 {
|
||||
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+OUTBOUND][0])
|
||||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 110 ||
|
||||
len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 2 {
|
||||
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -787,18 +787,18 @@ func TestActionTopupResetCreditNoId(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 100},
|
||||
&Balance{Id: "TEST_B", Value: 15},
|
||||
},
|
||||
},
|
||||
}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 20 ||
|
||||
len(ub.BalanceMap[utils.MONETARY+OUTBOUND]) != 2 {
|
||||
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+OUTBOUND][1])
|
||||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 20 ||
|
||||
len(ub.BalanceMap[utils.MONETARY+utils.OUT]) != 2 {
|
||||
t.Errorf("Topup reset action failed: %+v", ub.BalanceMap[utils.MONETARY+utils.OUT][1])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -806,94 +806,94 @@ func TestActionTopupResetMinutes(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}},
|
||||
utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.VOICE+OUTBOUND].GetTotalValue() != 5 ||
|
||||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 100 ||
|
||||
ub.BalanceMap[utils.VOICE+utils.OUT].GetTotalValue() != 5 ||
|
||||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 100 ||
|
||||
len(ub.UnitCounters) != 1 ||
|
||||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
|
||||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
|
||||
t.Errorf("Topup reset minutes action failed: %+v", ub.BalanceMap[utils.VOICE+OUTBOUND][0])
|
||||
t.Errorf("Topup reset minutes action failed: %+v", ub.BalanceMap[utils.VOICE+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestActionTopupCredit(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
|
||||
topupAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 110 ||
|
||||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 110 ||
|
||||
len(ub.UnitCounters) != 1 ||
|
||||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
|
||||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
|
||||
t.Error("Topup action failed!", ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue())
|
||||
t.Error("Topup action failed!", ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestActionTopupMinutes(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
|
||||
topupAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.VOICE+OUTBOUND].GetTotalValue() != 15 ||
|
||||
ub.BalanceMap[utils.VOICE+utils.OUT].GetTotalValue() != 15 ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 100 ||
|
||||
len(ub.UnitCounters) != 1 ||
|
||||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
|
||||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
|
||||
t.Error("Topup minutes action failed!", ub.BalanceMap[utils.VOICE+OUTBOUND])
|
||||
t.Error("Topup minutes action failed!", ub.BalanceMap[utils.VOICE+utils.OUT])
|
||||
}
|
||||
}
|
||||
|
||||
func TestActionDebitCredit(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}}
|
||||
debitAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue() != 90 ||
|
||||
ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue() != 90 ||
|
||||
len(ub.UnitCounters) != 1 ||
|
||||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
|
||||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
|
||||
t.Error("Debit action failed!", ub.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue())
|
||||
t.Error("Debit action failed!", ub.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue())
|
||||
}
|
||||
}
|
||||
|
||||
func TestActionDebitMinutes(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{BalanceType: utils.MONETARY, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
|
||||
a := &Action{BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Value: 5, Weight: 20, DestinationIds: "NAT"}}
|
||||
debitAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 5 ||
|
||||
ub.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 5 ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 100 ||
|
||||
len(ub.UnitCounters) != 1 ||
|
||||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
|
||||
ub.ActionTriggers[0].Executed != true || ub.ActionTriggers[1].Executed != true {
|
||||
t.Error("Debit minutes action failed!", ub.BalanceMap[utils.VOICE+OUTBOUND][0])
|
||||
t.Error("Debit minutes action failed!", ub.BalanceMap[utils.VOICE+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -963,16 +963,16 @@ func TestActionResetCounterCredit(t *testing.T) {
|
||||
ub := &Account{
|
||||
Id: "TEST_UB",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + OUTBOUND: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}, &UnitsCounter{BalanceType: utils.SMS, Direction: OUTBOUND, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: OUTBOUND, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE + utils.OUT: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{&UnitsCounter{BalanceType: utils.MONETARY, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}, &UnitsCounter{BalanceType: utils.SMS, Direction: utils.OUT, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{BalanceType: utils.MONETARY, BalanceDirection: utils.OUT, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: OUTBOUND}
|
||||
a := &Action{BalanceType: utils.MONETARY, Direction: utils.OUT}
|
||||
resetCounterAction(ub, nil, a, nil)
|
||||
if !ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 100 ||
|
||||
len(ub.UnitCounters) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+OUTBOUND]) != 2 ||
|
||||
len(ub.BalanceMap[utils.VOICE+utils.OUT]) != 2 ||
|
||||
ub.ActionTriggers[0].Executed != true {
|
||||
t.Error("Reset counters action failed!", ub.UnitCounters)
|
||||
}
|
||||
@@ -982,7 +982,7 @@ func TestActionTriggerLogging(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Id: "some_uuid",
|
||||
BalanceType: utils.MONETARY,
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
ThresholdValue: 100.0,
|
||||
BalanceDestinationIds: "NAT",
|
||||
Weight: 10.0,
|
||||
@@ -1089,7 +1089,7 @@ func TestTopupAction(t *testing.T) {
|
||||
a := &Action{
|
||||
ActionType: TOPUP,
|
||||
BalanceType: utils.MONETARY,
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Balance: &Balance{Value: 25, DestinationIds: "RET", Weight: 20},
|
||||
}
|
||||
|
||||
@@ -1100,8 +1100,8 @@ func TestTopupAction(t *testing.T) {
|
||||
|
||||
at.Execute()
|
||||
afterUb, _ := accountingStorage.GetAccount("*out:vdf:minu")
|
||||
initialValue := initialUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
|
||||
afterValue := afterUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
|
||||
initialValue := initialUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
|
||||
afterValue := afterUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
|
||||
if initialValue != 50 || afterValue != 75 {
|
||||
t.Error("Bad topup before and after: ", initialValue, afterValue)
|
||||
}
|
||||
@@ -1112,7 +1112,7 @@ func TestTopupActionLoaded(t *testing.T) {
|
||||
a := &Action{
|
||||
ActionType: TOPUP,
|
||||
BalanceType: utils.MONETARY,
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Balance: &Balance{Value: 25, DestinationIds: "RET", Weight: 20},
|
||||
}
|
||||
|
||||
@@ -1123,8 +1123,8 @@ func TestTopupActionLoaded(t *testing.T) {
|
||||
|
||||
at.Execute()
|
||||
afterUb, _ := accountingStorage.GetAccount("*out:vdf:minitsboy")
|
||||
initialValue := initialUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
|
||||
afterValue := afterUb.BalanceMap[utils.MONETARY+OUTBOUND].GetTotalValue()
|
||||
initialValue := initialUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
|
||||
afterValue := afterUb.BalanceMap[utils.MONETARY+utils.OUT].GetTotalValue()
|
||||
if initialValue != 100 || afterValue != 125 {
|
||||
t.Logf("Initial: %+v", initialUb)
|
||||
t.Logf("After: %+v", afterUb)
|
||||
|
||||
@@ -628,22 +628,6 @@ func (bc BalanceChain) GetTotalValue() (total float64) {
|
||||
return
|
||||
}
|
||||
|
||||
func (bc BalanceChain) Debit(amount float64) float64 {
|
||||
bc.Sort()
|
||||
for i, b := range bc {
|
||||
if b.IsExpired() {
|
||||
continue
|
||||
}
|
||||
if b.GetValue() >= amount || i == len(bc)-1 { // if last one go negative
|
||||
b.SubstractValue(amount)
|
||||
break
|
||||
}
|
||||
b.SetValue(0)
|
||||
amount -= b.GetValue()
|
||||
}
|
||||
return bc.GetTotalValue()
|
||||
}
|
||||
|
||||
func (bc BalanceChain) Equal(o BalanceChain) bool {
|
||||
if len(bc) != len(o) {
|
||||
return false
|
||||
|
||||
@@ -28,14 +28,14 @@ import (
|
||||
func TestSingleResultMerge(t *testing.T) {
|
||||
t1 := time.Date(2012, time.February, 2, 17, 0, 0, 0, time.UTC)
|
||||
t2 := time.Date(2012, time.February, 2, 17, 1, 0, 0, time.UTC)
|
||||
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc1, _ := cd.getCost()
|
||||
if cc1.Cost != 61 {
|
||||
t.Errorf("expected 61 was %v", cc1.Cost)
|
||||
}
|
||||
/*t1 = time.Date(2012, time.February, 2, 17, 1, 0, 0, time.UTC)
|
||||
t2 = time.Date(2012, time.February, 2, 17, 2, 0, 0, time.UTC)
|
||||
cd = &CallDescriptor{Direction: OUTBOUND, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd = &CallDescriptor{Direction: utils.OUT, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc2, _ := cd.GetCost()
|
||||
if cc2.Cost != 60 {
|
||||
t.Errorf("expected 60 was %v", cc2.Cost)
|
||||
@@ -52,7 +52,7 @@ func TestSingleResultMerge(t *testing.T) {
|
||||
func TestMultipleResultMerge(t *testing.T) {
|
||||
t1 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
|
||||
t2 := time.Date(2012, time.February, 2, 18, 0, 0, 0, time.UTC)
|
||||
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc1, _ := cd.getCost()
|
||||
if cc1.Cost != 61 {
|
||||
//ils.LogFull(cc1)
|
||||
@@ -63,7 +63,7 @@ func TestMultipleResultMerge(t *testing.T) {
|
||||
}
|
||||
t1 = time.Date(2012, time.February, 2, 18, 00, 0, 0, time.UTC)
|
||||
t2 = time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
|
||||
cd = &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd = &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc2, _ := cd.getCost()
|
||||
if cc2.Cost != 30 {
|
||||
t.Errorf("expected 30 was %v", cc2.Cost)
|
||||
@@ -83,7 +83,7 @@ func TestMultipleResultMerge(t *testing.T) {
|
||||
func TestMultipleInputLeftMerge(t *testing.T) {
|
||||
t1 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
|
||||
t2 := time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
|
||||
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc1, _ := cd.getCost()
|
||||
//log.Printf("Timing: %+v", cc1.Timespans[1].RateInterval.Timing)
|
||||
//log.Printf("Rating: %+v", cc1.Timespans[1].RateInterval.Rating)
|
||||
@@ -92,7 +92,7 @@ func TestMultipleInputLeftMerge(t *testing.T) {
|
||||
}
|
||||
/*t1 = time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
|
||||
t2 = time.Date(2012, time.February, 2, 18, 02, 0, 0, time.UTC)
|
||||
cd = &CallDescriptor{Direction: OUTBOUND, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd = &CallDescriptor{Direction: utils.OUT, TOR: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc2, _ := cd.getCost()
|
||||
if cc2.Cost != 30 {
|
||||
t.Errorf("expected 30 was %v", cc2.Cost)
|
||||
@@ -109,14 +109,14 @@ func TestMultipleInputLeftMerge(t *testing.T) {
|
||||
func TestMultipleInputRightMerge(t *testing.T) {
|
||||
t1 := time.Date(2012, time.February, 2, 17, 58, 0, 0, time.UTC)
|
||||
t2 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
|
||||
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc1, _ := cd.getCost()
|
||||
if cc1.Cost != 61 {
|
||||
t.Errorf("expected 61 was %v", cc1.Cost)
|
||||
}
|
||||
t1 = time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
|
||||
t2 = time.Date(2012, time.February, 2, 18, 01, 0, 0, time.UTC)
|
||||
cd = &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd = &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc2, _ := cd.getCost()
|
||||
if cc2.Cost != 91 {
|
||||
t.Errorf("expected 91 was %v", cc2.Cost)
|
||||
@@ -133,7 +133,7 @@ func TestMultipleInputRightMerge(t *testing.T) {
|
||||
func TestCallCostMergeEmpty(t *testing.T) {
|
||||
t1 := time.Date(2012, time.February, 2, 17, 58, 0, 0, time.UTC)
|
||||
t2 := time.Date(2012, time.February, 2, 17, 59, 0, 0, time.UTC)
|
||||
cd := &CallDescriptor{Direction: OUTBOUND, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cd := &CallDescriptor{Direction: utils.OUT, Category: "0", Tenant: "vdf", Subject: "rif", Destination: "0256", TimeStart: t1, TimeEnd: t2}
|
||||
cc1, _ := cd.getCost()
|
||||
cc2 := &CallCost{}
|
||||
cc1.Merge(cc2)
|
||||
|
||||
@@ -41,20 +41,20 @@ func init() {
|
||||
|
||||
func populateDB() {
|
||||
ats := []*Action{
|
||||
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}},
|
||||
&Action{ActionType: "*topup", BalanceType: utils.VOICE, Direction: OUTBOUND, Balance: &Balance{Weight: 20, Value: 10, DestinationIds: "NAT"}},
|
||||
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}},
|
||||
&Action{ActionType: "*topup", BalanceType: utils.VOICE, Direction: utils.OUT, Balance: &Balance{Weight: 20, Value: 10, DestinationIds: "NAT"}},
|
||||
}
|
||||
|
||||
ats1 := []*Action{
|
||||
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: OUTBOUND, Balance: &Balance{Value: 10}, Weight: 10},
|
||||
&Action{ActionType: "*topup", BalanceType: utils.MONETARY, Direction: utils.OUT, Balance: &Balance{Value: 10}, Weight: 10},
|
||||
&Action{ActionType: "*reset_account", Weight: 20},
|
||||
}
|
||||
|
||||
minu := &Account{
|
||||
Id: "*out:vdf:minu",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{&Balance{Value: 50}},
|
||||
utils.VOICE + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{&Balance{Value: 50}},
|
||||
utils.VOICE + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 200, DestinationIds: "NAT", Weight: 10},
|
||||
&Balance{Value: 100, DestinationIds: "RET", Weight: 20},
|
||||
}},
|
||||
@@ -62,7 +62,7 @@ func populateDB() {
|
||||
broker := &Account{
|
||||
Id: "*out:vdf:broker",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{
|
||||
utils.VOICE + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 20, DestinationIds: "NAT", Weight: 10, RatingSubject: "rif"},
|
||||
&Balance{Value: 100, DestinationIds: "RET", Weight: 20},
|
||||
}},
|
||||
@@ -70,7 +70,7 @@ func populateDB() {
|
||||
luna := &Account{
|
||||
Id: "*out:vdf:luna",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 0, Weight: 20},
|
||||
}},
|
||||
}
|
||||
@@ -78,11 +78,11 @@ func populateDB() {
|
||||
minitsboy := &Account{
|
||||
Id: "*out:vdf:minitsboy",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.VOICE + OUTBOUND: BalanceChain{
|
||||
utils.VOICE + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 20, DestinationIds: "NAT", Weight: 10, RatingSubject: "rif"},
|
||||
&Balance{Value: 100, DestinationIds: "RET", Weight: 20},
|
||||
},
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 100, Weight: 10},
|
||||
},
|
||||
},
|
||||
@@ -90,14 +90,14 @@ func populateDB() {
|
||||
max := &Account{
|
||||
Id: "*out:cgrates.org:max",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 11, Weight: 20},
|
||||
}},
|
||||
}
|
||||
money := &Account{
|
||||
Id: "*out:cgrates.org:money",
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY + OUTBOUND: BalanceChain{
|
||||
utils.MONETARY + utils.OUT: BalanceChain{
|
||||
&Balance{Value: 10000, Weight: 10},
|
||||
}},
|
||||
}
|
||||
@@ -129,7 +129,7 @@ func TestSplitSpans(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSplitSpansWeekend(t *testing.T) {
|
||||
cd := &CallDescriptor{Direction: OUTBOUND,
|
||||
cd := &CallDescriptor{Direction: utils.OUT,
|
||||
Category: "postpaid",
|
||||
TOR: utils.VOICE,
|
||||
Tenant: "foehn",
|
||||
@@ -710,13 +710,13 @@ func TestMaxDebitWithAccountShared(t *testing.T) {
|
||||
t.Errorf("Wrong callcost in shared debit: %+v, %v", cc, err)
|
||||
}
|
||||
acc, _ := cd.getAccount()
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
|
||||
if len(balanceMap) != 1 || balanceMap[0].GetValue() != 0 {
|
||||
t.Errorf("Wrong shared balance debited: %+v", balanceMap[0])
|
||||
}
|
||||
other, err := accountingStorage.GetAccount("*out:vdf:empty10")
|
||||
if err != nil || other.BalanceMap[utils.MONETARY+OUTBOUND][0].GetValue() != 7.5 {
|
||||
t.Errorf("Error debiting shared balance: %+v", other.BalanceMap[utils.MONETARY+OUTBOUND][0])
|
||||
if err != nil || other.BalanceMap[utils.MONETARY+utils.OUT][0].GetValue() != 7.5 {
|
||||
t.Errorf("Error debiting shared balance: %+v", other.BalanceMap[utils.MONETARY+utils.OUT][0])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -923,7 +923,7 @@ func TestDebitFromShareAndNormal(t *testing.T) {
|
||||
}
|
||||
cc, err := cd.MaxDebit()
|
||||
acc, _ := cd.getAccount()
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
|
||||
if err != nil || cc.Cost != 2.5 {
|
||||
t.Errorf("Debit from share and normal error: %+v, %v", cc, err)
|
||||
}
|
||||
@@ -955,7 +955,7 @@ func TestDebitFromEmptyShare(t *testing.T) {
|
||||
t.Errorf("Debit from empty share error: %+v, %v", cc, err)
|
||||
}
|
||||
acc, _ := cd.getAccount()
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
|
||||
if len(balanceMap) != 2 || balanceMap[0].GetValue() != 0 || balanceMap[1].GetValue() != -2.5 {
|
||||
t.Errorf("Error debiting from empty share: %+v", balanceMap[1].GetValue())
|
||||
}
|
||||
@@ -984,13 +984,13 @@ func TestDebitNegatve(t *testing.T) {
|
||||
}
|
||||
acc, _ := cd.getAccount()
|
||||
//utils.PrintFull(acc)
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+OUTBOUND]
|
||||
balanceMap := acc.BalanceMap[utils.MONETARY+utils.OUT]
|
||||
if len(balanceMap) != 1 || balanceMap[0].GetValue() != -2.5 {
|
||||
t.Errorf("Error debiting from empty share: %+v", balanceMap[0].GetValue())
|
||||
}
|
||||
cc, err = cd.MaxDebit()
|
||||
acc, _ = cd.getAccount()
|
||||
balanceMap = acc.BalanceMap[utils.MONETARY+OUTBOUND]
|
||||
balanceMap = acc.BalanceMap[utils.MONETARY+utils.OUT]
|
||||
//utils.LogFull(balanceMap)
|
||||
if err != nil || cc.Cost != 2.5 {
|
||||
t.Errorf("Debit from empty share error: %+v, %v", cc, err)
|
||||
@@ -1073,8 +1073,8 @@ func TestMaxDebitConsumesMinutes(t *testing.T) {
|
||||
LoopIndex: 0,
|
||||
DurationIndex: 0}
|
||||
cd1.MaxDebit()
|
||||
if cd1.account.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != 20 {
|
||||
t.Error("Error using minutes: ", cd1.account.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
|
||||
if cd1.account.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != 20 {
|
||||
t.Error("Error using minutes: ", cd1.account.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -809,7 +809,7 @@ func TestLoadActions(t *testing.T) {
|
||||
Id: "MINI0",
|
||||
ActionType: TOPUP_RESET,
|
||||
BalanceType: utils.MONETARY,
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
ExpirationString: UNLIMITED,
|
||||
ExtraParameters: "",
|
||||
Weight: 10,
|
||||
@@ -823,7 +823,7 @@ func TestLoadActions(t *testing.T) {
|
||||
Id: "MINI1",
|
||||
ActionType: TOPUP,
|
||||
BalanceType: utils.VOICE,
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
ExpirationString: UNLIMITED,
|
||||
ExtraParameters: "",
|
||||
Weight: 10,
|
||||
@@ -845,7 +845,7 @@ func TestLoadActions(t *testing.T) {
|
||||
Id: "SHARED0",
|
||||
ActionType: TOPUP,
|
||||
BalanceType: utils.MONETARY,
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
ExpirationString: UNLIMITED,
|
||||
Weight: 10,
|
||||
Balance: &Balance{
|
||||
@@ -995,7 +995,7 @@ func TestLoadActionTriggers(t *testing.T) {
|
||||
atr := csvr.actionsTriggers["STANDARD_TRIGGER"][0]
|
||||
expected := &ActionTrigger{
|
||||
BalanceType: utils.VOICE,
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
ThresholdType: TRIGGER_MIN_COUNTER,
|
||||
ThresholdValue: 10,
|
||||
BalanceDestinationIds: "GERMANY_O2",
|
||||
@@ -1009,7 +1009,7 @@ func TestLoadActionTriggers(t *testing.T) {
|
||||
atr = csvr.actionsTriggers["STANDARD_TRIGGER"][1]
|
||||
expected = &ActionTrigger{
|
||||
BalanceType: utils.VOICE,
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
ThresholdType: TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 200,
|
||||
BalanceDestinationIds: "GERMANY",
|
||||
|
||||
@@ -32,7 +32,7 @@ func TestApRestoreFromStorage(t *testing.T) {
|
||||
cd := &CallDescriptor{
|
||||
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Category: "0",
|
||||
Tenant: "CUSTOMER_1",
|
||||
Subject: "rif:from:tm",
|
||||
@@ -77,7 +77,7 @@ func TestFallbackDirect(t *testing.T) {
|
||||
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Tenant: "CUSTOMER_2",
|
||||
Subject: "danb:87.139.12.167",
|
||||
Destination: "41"}
|
||||
@@ -92,7 +92,7 @@ func TestFallbackMultiple(t *testing.T) {
|
||||
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Tenant: "vdf",
|
||||
Subject: "fall",
|
||||
Destination: "0723045"}
|
||||
@@ -107,7 +107,7 @@ func TestFallbackWithBackTrace(t *testing.T) {
|
||||
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Tenant: "CUSTOMER_2",
|
||||
Subject: "danb:87.139.12.167",
|
||||
Destination: "4123"}
|
||||
@@ -122,7 +122,7 @@ func TestFallbackNoDefault(t *testing.T) {
|
||||
TimeStart: time.Date(2013, 10, 21, 18, 34, 0, 0, time.UTC),
|
||||
TimeEnd: time.Date(2013, 10, 21, 18, 35, 0, 0, time.UTC),
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Tenant: "vdf",
|
||||
Subject: "one",
|
||||
Destination: "0723"}
|
||||
@@ -133,7 +133,7 @@ func TestFallbackNoDefault(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFallbackNoInfiniteLoop(t *testing.T) {
|
||||
cd := &CallDescriptor{Category: "0", Direction: OUTBOUND, Tenant: "vdf", Subject: "rif", Destination: "0721"}
|
||||
cd := &CallDescriptor{Category: "0", Direction: utils.OUT, Tenant: "vdf", Subject: "rif", Destination: "0721"}
|
||||
cd.LoadRatingPlans()
|
||||
if len(cd.RatingInfos) != 0 {
|
||||
t.Error("Error restoring activation periods: ", len(cd.RatingInfos))
|
||||
@@ -141,7 +141,7 @@ func TestFallbackNoInfiniteLoop(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFallbackNoInfiniteLoopSelf(t *testing.T) {
|
||||
cd := &CallDescriptor{Category: "0", Direction: OUTBOUND, Tenant: "vdf", Subject: "inf", Destination: "0721"}
|
||||
cd := &CallDescriptor{Category: "0", Direction: utils.OUT, Tenant: "vdf", Subject: "inf", Destination: "0721"}
|
||||
cd.LoadRatingPlans()
|
||||
if len(cd.RatingInfos) != 0 {
|
||||
t.Error("Error restoring activation periods: ", len(cd.RatingInfos))
|
||||
|
||||
@@ -21,6 +21,8 @@ package engine
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
|
||||
func TestGetRatingProfileForPrefix(t *testing.T) {
|
||||
@@ -29,7 +31,7 @@ func TestGetRatingProfileForPrefix(t *testing.T) {
|
||||
TimeEnd: time.Date(2013, 11, 18, 13, 47, 30, 0, time.UTC),
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Subject: "fallback1",
|
||||
Destination: "0256098",
|
||||
}
|
||||
@@ -48,7 +50,7 @@ func TestGetRatingProfileForPrefixFirstEmpty(t *testing.T) {
|
||||
TimeEnd: time.Date(2013, 11, 18, 13, 47, 30, 0, time.UTC),
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Subject: "fallback1",
|
||||
Destination: "0256098",
|
||||
}
|
||||
@@ -68,7 +70,7 @@ func TestGetRatingProfileNotFound(t *testing.T) {
|
||||
TimeEnd: time.Date(2015, 8, 18, 22, 06, 30, 0, time.UTC),
|
||||
Tenant: "vdf",
|
||||
Category: "0",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Subject: "no_rating_profile",
|
||||
Destination: "0256098",
|
||||
}
|
||||
@@ -84,7 +86,7 @@ func TestGetRatingProfileFoundButNoDestination(t *testing.T) {
|
||||
TimeEnd: time.Date(2015, 8, 18, 22, 06, 30, 0, time.UTC),
|
||||
Tenant: "cgrates.org",
|
||||
Category: "call",
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
Subject: "nt",
|
||||
Destination: "447956",
|
||||
}
|
||||
|
||||
@@ -73,8 +73,8 @@ func TestGetDerivedMaxSessionTime(t *testing.T) {
|
||||
}
|
||||
b10 := &Balance{Value: 10, Weight: 10, DestinationIds: "DE_TMOBILE"}
|
||||
b20 := &Balance{Value: 20, Weight: 10, DestinationIds: "DE_TMOBILE"}
|
||||
rifsAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "rif"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b10}}}
|
||||
dansAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "dan"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{b20}}}
|
||||
rifsAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "rif"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b10}}}
|
||||
dansAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, testTenant, "dan"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{b20}}}
|
||||
if err := accountingStorage.SetAccount(rifsAccount); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -96,15 +96,15 @@ func TestGetDerivedMaxSessionTime(t *testing.T) {
|
||||
ratingStorage.CacheRatingAll()
|
||||
if rifStoredAcnt, err := accountingStorage.GetAccount(utils.ConcatenatedKey(utils.OUT, testTenant, "rif")); err != nil {
|
||||
t.Error(err)
|
||||
//} else if rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND].Equal(rifsAccount.BalanceMap[utils.VOICE+OUTBOUND]) {
|
||||
// t.Errorf("Expected: %+v, received: %+v", rifsAccount.BalanceMap[utils.VOICE+OUTBOUND][0], rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0])
|
||||
} else if rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != rifsAccount.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() {
|
||||
t.Error("BalanceValue: ", rifStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
|
||||
//} else if rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT].Equal(rifsAccount.BalanceMap[utils.VOICE+utils.OUT]) {
|
||||
// t.Errorf("Expected: %+v, received: %+v", rifsAccount.BalanceMap[utils.VOICE+utils.OUT][0], rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0])
|
||||
} else if rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != rifsAccount.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() {
|
||||
t.Error("BalanceValue: ", rifStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
|
||||
}
|
||||
if danStoredAcnt, err := accountingStorage.GetAccount(utils.ConcatenatedKey(utils.OUT, testTenant, "dan")); err != nil {
|
||||
t.Error(err)
|
||||
} else if danStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() != dansAccount.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue() {
|
||||
t.Error("BalanceValue: ", danStoredAcnt.BalanceMap[utils.VOICE+OUTBOUND][0].GetValue())
|
||||
} else if danStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() != dansAccount.BalanceMap[utils.VOICE+utils.OUT][0].GetValue() {
|
||||
t.Error("BalanceValue: ", danStoredAcnt.BalanceMap[utils.VOICE+utils.OUT][0].GetValue())
|
||||
}
|
||||
var dcs utils.DerivedChargers
|
||||
attrs := &utils.AttrDerivedChargers{Tenant: testTenant, Category: "call", Direction: "*out", Account: "dan", Subject: "dan"}
|
||||
@@ -430,8 +430,8 @@ func TestGetLCR(t *testing.T) {
|
||||
}
|
||||
bRif12 := &Balance{Value: 40, Weight: 10, DestinationIds: dstDe.Id}
|
||||
bIvo12 := &Balance{Value: 60, Weight: 10, DestinationIds: dstDe.Id}
|
||||
rif12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "rif12"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{bRif12}}, AllowNegative: true}
|
||||
ivo12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "ivo12"), BalanceMap: map[string]BalanceChain{utils.VOICE + OUTBOUND: BalanceChain{bIvo12}}, AllowNegative: true}
|
||||
rif12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "rif12"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{bRif12}}, AllowNegative: true}
|
||||
ivo12sAccount := &Account{Id: utils.ConcatenatedKey(utils.OUT, "tenant12", "ivo12"), BalanceMap: map[string]BalanceChain{utils.VOICE + utils.OUT: BalanceChain{bIvo12}}, AllowNegative: true}
|
||||
for _, acnt := range []*Account{rif12sAccount, ivo12sAccount} {
|
||||
if err := accountingStorage.SetAccount(acnt); err != nil {
|
||||
t.Error(err)
|
||||
|
||||
@@ -273,14 +273,14 @@ func TestDifferentUuid(t *testing.T) {
|
||||
|
||||
func GetUB() *Account {
|
||||
uc := &UnitsCounter{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
BalanceType: utils.SMS,
|
||||
Balances: BalanceChain{&Balance{Value: 1}, &Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}},
|
||||
}
|
||||
at := &ActionTrigger{
|
||||
Id: "some_uuid",
|
||||
BalanceType: utils.MONETARY,
|
||||
BalanceDirection: OUTBOUND,
|
||||
BalanceDirection: utils.OUT,
|
||||
ThresholdValue: 100.0,
|
||||
BalanceDestinationIds: "NAT",
|
||||
Weight: 10.0,
|
||||
@@ -291,7 +291,7 @@ func GetUB() *Account {
|
||||
ub := &Account{
|
||||
Id: "rif",
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS + OUTBOUND: BalanceChain{&Balance{Value: 14, ExpirationDate: zeroTime}}, utils.DATA + OUTBOUND: BalanceChain{&Balance{Value: 1024, ExpirationDate: zeroTime}}, utils.VOICE: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS + utils.OUT: BalanceChain{&Balance{Value: 14, ExpirationDate: zeroTime}}, utils.DATA + utils.OUT: BalanceChain{&Balance{Value: 1024, ExpirationDate: zeroTime}}, utils.VOICE: BalanceChain{&Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}}},
|
||||
UnitCounters: []*UnitsCounter{uc, uc},
|
||||
ActionTriggers: ActionTriggers{at, at, at},
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ import (
|
||||
|
||||
func TestUnitsCounterAddBalance(t *testing.T) {
|
||||
uc := &UnitsCounter{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
BalanceType: utils.SMS,
|
||||
Balances: BalanceChain{&Balance{Value: 1}, &Balance{Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}},
|
||||
}
|
||||
@@ -38,7 +38,7 @@ func TestUnitsCounterAddBalance(t *testing.T) {
|
||||
|
||||
func TestUnitsCounterAddBalanceExists(t *testing.T) {
|
||||
uc := &UnitsCounter{
|
||||
Direction: OUTBOUND,
|
||||
Direction: utils.OUT,
|
||||
BalanceType: utils.SMS,
|
||||
Balances: BalanceChain{&Balance{Value: 1}, &Balance{Value: 10, Weight: 20, DestinationIds: "NAT"}, &Balance{Weight: 10, DestinationIds: "RET"}},
|
||||
}
|
||||
|
||||
@@ -135,10 +135,10 @@ func TestExecuteActions(t *testing.T) {
|
||||
t.Error(err)
|
||||
} else if len(acnt.BalanceMap) != 2 {
|
||||
t.Error("Account does not have enough balances: ", acnt.BalanceMap)
|
||||
} else if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 40 {
|
||||
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
|
||||
} else if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != 10 {
|
||||
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
|
||||
} else if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 40 {
|
||||
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
|
||||
} else if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != 10 {
|
||||
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,10 +162,10 @@ func TestDebit(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 20 {
|
||||
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
|
||||
if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 20 {
|
||||
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
|
||||
}
|
||||
if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != 9.99 {
|
||||
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
|
||||
if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != 9.99 {
|
||||
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,10 +134,10 @@ func TestExecuteActions2(t *testing.T) {
|
||||
t.Error(err)
|
||||
} else if len(acnt.BalanceMap) != 2 {
|
||||
t.Error("Account does not have enough balances: ", acnt.BalanceMap)
|
||||
} else if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 40 {
|
||||
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
|
||||
} else if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != 0 {
|
||||
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
|
||||
} else if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 40 {
|
||||
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
|
||||
} else if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != 0 {
|
||||
t.Error("Account does not have enough monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,10 +164,10 @@ func TestDebit2(t *testing.T) {
|
||||
if len(acnt.BalanceMap) != 2 {
|
||||
t.Error("Wrong number of user balances found", acnt.BalanceMap)
|
||||
}
|
||||
if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 20 {
|
||||
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
|
||||
if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 20 {
|
||||
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
|
||||
}
|
||||
for _, blnc := range acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND] { // Test negative balance for default one
|
||||
for _, blnc := range acnt.BalanceMap[utils.MONETARY+utils.OUT] { // Test negative balance for default one
|
||||
if blnc.Weight == 10 && blnc.Value != 0 {
|
||||
t.Errorf("Balance with weight: %f, having value: %f ", blnc.Weight, blnc.Value)
|
||||
} else if blnc.Weight == 0 && blnc.Value != -0.01 {
|
||||
|
||||
@@ -132,8 +132,8 @@ func TestExecuteActions3(t *testing.T) {
|
||||
t.Error(err)
|
||||
} else if len(acnt.BalanceMap) != 1 {
|
||||
t.Error("Account does not have enough balances: ", acnt.BalanceMap)
|
||||
} else if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 40 {
|
||||
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
|
||||
} else if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 40 {
|
||||
t.Error("Account does not have enough minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,10 +160,10 @@ func TestDebit3(t *testing.T) {
|
||||
if len(acnt.BalanceMap) != 2 {
|
||||
t.Error("Wrong number of user balances found", acnt.BalanceMap)
|
||||
}
|
||||
if acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value != 20 {
|
||||
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+engine.OUTBOUND][0].Value)
|
||||
if acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value != 20 {
|
||||
t.Error("Account does not have expected minutes in balance", acnt.BalanceMap[utils.VOICE+utils.OUT][0].Value)
|
||||
}
|
||||
if acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value != -0.01 {
|
||||
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+engine.OUTBOUND][0].Value)
|
||||
if acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value != -0.01 {
|
||||
t.Error("Account does not have expected monetary balance", acnt.BalanceMap[utils.MONETARY+utils.OUT][0].Value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,6 +156,7 @@ const (
|
||||
NANOSECONDS = "nanoseconds"
|
||||
SECONDS = "seconds"
|
||||
OUT = "*out"
|
||||
IN = "*in"
|
||||
META_OUT = "*out"
|
||||
META_ANY = "*any"
|
||||
CDR_IMPORT = "cdr_import"
|
||||
|
||||
Reference in New Issue
Block a user