mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
refactoring
This commit is contained in:
@@ -22,6 +22,7 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/cache2go"
|
||||
@@ -587,6 +588,7 @@ func (acc *Account) ExecuteActionTriggers(a *Action) {
|
||||
// the next reset (see RESET_TRIGGERS action type)
|
||||
continue
|
||||
}
|
||||
|
||||
if !at.Match(a) {
|
||||
continue
|
||||
}
|
||||
@@ -673,9 +675,10 @@ func (acc *Account) InitCounters() {
|
||||
if strings.Contains(at.ThresholdType, "balance") {
|
||||
ct = utils.COUNTER_BALANCE
|
||||
}
|
||||
|
||||
log.Print(at.Balance.GetType() + ct)
|
||||
uc, exists := ucTempMap[at.Balance.GetType()+ct]
|
||||
if !exists {
|
||||
log.Print("HERE!")
|
||||
uc = &UnitCounter{
|
||||
BalanceType: at.Balance.GetType(),
|
||||
CounterType: ct,
|
||||
|
||||
@@ -814,7 +814,7 @@ func TestAccountdebitBalance(t *testing.T) {
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE: BalanceChain{&Balance{Weight: 20, DestinationIds: utils.StringMap{"NAT": true}}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
}
|
||||
newMb := &BalancePointer{
|
||||
newMb := &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Weight: utils.Float64Pointer(20),
|
||||
DestinationIds: utils.StringMapPointer(utils.StringMap{"NEW": true}),
|
||||
@@ -833,7 +833,7 @@ func TestAccountdebitBalance(t *testing.T) {
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1204}}, utils.VOICE: BalanceChain{&Balance{Weight: 20, DestinationIds: utils.StringMap{"NAT": true}, Directions: utils.NewStringMap(utils.OUT)}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
}
|
||||
newMb := &BalancePointer{
|
||||
newMb := &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Weight: utils.Float64Pointer(20),
|
||||
DestinationIds: utils.StringMapPointer(utils.StringMap{"NAT": true}),
|
||||
@@ -856,7 +856,7 @@ func TestAccountdebitBalanceExists(t *testing.T) {
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.SMS: BalanceChain{&Balance{Value: 14}}, utils.DATA: BalanceChain{&Balance{Value: 1024}}, utils.VOICE: BalanceChain{&Balance{Value: 15, Weight: 20, DestinationIds: utils.StringMap{"NAT": true}, Directions: utils.NewStringMap(utils.OUT)}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
}
|
||||
newMb := &BalancePointer{
|
||||
newMb := &BalanceFilter{
|
||||
Value: utils.Float64Pointer(-10),
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Weight: utils.Float64Pointer(20),
|
||||
@@ -883,19 +883,19 @@ func TestAccountAddMinuteNil(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAccountAddMinutBucketEmpty(t *testing.T) {
|
||||
mb1 := &BalancePointer{
|
||||
mb1 := &BalanceFilter{
|
||||
Value: utils.Float64Pointer(-10),
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
DestinationIds: utils.StringMapPointer(utils.StringMap{"NAT": true}),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
}
|
||||
mb2 := &BalancePointer{
|
||||
mb2 := &BalanceFilter{
|
||||
Value: utils.Float64Pointer(-10),
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
DestinationIds: utils.StringMapPointer(utils.StringMap{"NAT": true}),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
}
|
||||
mb3 := &BalancePointer{
|
||||
mb3 := &BalanceFilter{
|
||||
Value: utils.Float64Pointer(-10),
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
DestinationIds: utils.StringMapPointer(utils.StringMap{"OTHER": true}),
|
||||
@@ -924,7 +924,7 @@ func TestAccountExecuteTriggeredActions(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.StringMap{"NAT": true}, Directions: utils.StringMap{utils.OUT: true}}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.StringMap{utils.OUT: true}}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
}
|
||||
ub.countUnits(1, utils.MONETARY, &CallCost{Direction: utils.OUT}, nil)
|
||||
if ub.BalanceMap[utils.MONETARY][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE][0].GetValue() != 20 {
|
||||
@@ -948,7 +948,7 @@ func TestAccountExecuteTriggeredActionsBalance(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100}}, utils.VOICE: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 10, Weight: 20, DestinationIds: utils.StringMap{"NAT": true}}, &Balance{Directions: utils.NewStringMap(utils.OUT), Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 100, ThresholdType: utils.TRIGGER_MIN_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 100, ThresholdType: utils.TRIGGER_MIN_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"}},
|
||||
}
|
||||
ub.countUnits(1, utils.MONETARY, nil, nil)
|
||||
if ub.BalanceMap[utils.MONETARY][0].GetValue() != 110 || ub.BalanceMap[utils.VOICE][0].GetValue() != 20 {
|
||||
@@ -961,7 +961,7 @@ func TestAccountExecuteTriggeredActionsOrder(t *testing.T) {
|
||||
Id: "TEST_UB_OREDER",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.NewStringMap(utils.OUT)}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS_ORDER"}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS_ORDER"}},
|
||||
}
|
||||
|
||||
ub.countUnits(1, utils.MONETARY, &CallCost{Direction: utils.OUT}, nil)
|
||||
@@ -976,11 +976,13 @@ func TestAccountExecuteTriggeredDayWeek(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.StringMap{"NAT": true}, Directions: utils.StringMap{utils.OUT: true}}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
ActionTriggers: ActionTriggers{
|
||||
&ActionTrigger{UniqueID: "day_trigger", Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"},
|
||||
&ActionTrigger{UniqueID: "week_trigger", Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 100, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"},
|
||||
&ActionTrigger{UniqueID: "day_trigger", Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"},
|
||||
&ActionTrigger{UniqueID: "week_trigger", Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 100, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ActionsId: "TEST_ACTIONS"},
|
||||
},
|
||||
}
|
||||
log.Print("==============")
|
||||
ub.InitCounters()
|
||||
log.Print("==============")
|
||||
if len(ub.UnitCounters) != 1 || len(ub.UnitCounters[0].Balances) != 2 {
|
||||
log.Print("Error initializing counters: ", ub.UnitCounters[0].Balances[0])
|
||||
}
|
||||
@@ -992,7 +994,7 @@ func TestAccountExecuteTriggeredDayWeek(t *testing.T) {
|
||||
}
|
||||
|
||||
// we can reset them
|
||||
resetCountersAction(ub, nil, &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Id: utils.StringPointer("day_trigger")}}, nil)
|
||||
resetCountersAction(ub, nil, &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Id: utils.StringPointer("day_trigger")}}, nil)
|
||||
if ub.UnitCounters[0].Balances[0].Value != 0 ||
|
||||
ub.UnitCounters[0].Balances[1].Value != 1 {
|
||||
t.Error("Error reseting both counters", ub.UnitCounters[0].Balances[0].Value, ub.UnitCounters[0].Balances[1].Value)
|
||||
@@ -1004,7 +1006,7 @@ func TestAccountExpActionTrigger(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100, ExpirationDate: time.Date(2015, time.November, 9, 9, 48, 0, 0, time.UTC)}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.StringMap{"NAT": true}, Directions: utils.StringMap{utils.OUT: true}}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
ActionTriggers: ActionTriggers{
|
||||
&ActionTrigger{ID: "check expired balances", Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, ActionsId: "TEST_ACTIONS"},
|
||||
&ActionTrigger{ID: "check expired balances", Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, ActionsId: "TEST_ACTIONS"},
|
||||
},
|
||||
}
|
||||
ub.ExecuteActionTriggers(nil)
|
||||
@@ -1022,7 +1024,7 @@ func TestAccountExpActionTriggerNotActivated(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.StringMap{"NAT": true}, Directions: utils.StringMap{utils.OUT: true}}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
ActionTriggers: ActionTriggers{
|
||||
&ActionTrigger{ID: "check expired balances", ActivationDate: time.Date(2116, 2, 5, 18, 0, 0, 0, time.UTC), Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, ActionsId: "TEST_ACTIONS"},
|
||||
&ActionTrigger{ID: "check expired balances", ActivationDate: time.Date(2116, 2, 5, 18, 0, 0, 0, time.UTC), Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, ActionsId: "TEST_ACTIONS"},
|
||||
},
|
||||
}
|
||||
ub.ExecuteActionTriggers(nil)
|
||||
@@ -1040,7 +1042,7 @@ func TestAccountExpActionTriggerExpired(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.StringMap{"NAT": true}, Directions: utils.StringMap{utils.OUT: true}}, &Balance{Weight: 10, DestinationIds: utils.StringMap{"RET": true}}}},
|
||||
ActionTriggers: ActionTriggers{
|
||||
&ActionTrigger{ID: "check expired balances", ExpirationDate: time.Date(2016, 2, 4, 18, 0, 0, 0, time.UTC), Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, ActionsId: "TEST_ACTIONS"},
|
||||
&ActionTrigger{ID: "check expired balances", ExpirationDate: time.Date(2016, 2, 4, 18, 0, 0, 0, time.UTC), Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 10, ThresholdType: utils.TRIGGER_BALANCE_EXPIRED, ActionsId: "TEST_ACTIONS"},
|
||||
},
|
||||
}
|
||||
ub.ExecuteActionTriggers(nil)
|
||||
@@ -1598,7 +1600,7 @@ func TestAccountInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR1",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1607,7 +1609,7 @@ func TestAccountInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR11",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1616,7 +1618,7 @@ func TestAccountInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR2",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1625,7 +1627,7 @@ func TestAccountInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR3",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1634,7 +1636,7 @@ func TestAccountInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR4",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1643,7 +1645,7 @@ func TestAccountInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR5",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1673,7 +1675,7 @@ func TestAccountDoubleInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR1",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1682,7 +1684,7 @@ func TestAccountDoubleInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR11",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1691,7 +1693,7 @@ func TestAccountDoubleInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR2",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1700,7 +1702,7 @@ func TestAccountDoubleInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR3",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1709,7 +1711,7 @@ func TestAccountDoubleInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR4",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1718,7 +1720,7 @@ func TestAccountDoubleInitCounters(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR5",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
|
||||
@@ -45,10 +45,10 @@ type Action struct {
|
||||
Filter string
|
||||
ExpirationString string // must stay as string because it can have relative values like 1month
|
||||
Weight float64
|
||||
Balance *BalancePointer
|
||||
Balance *BalanceFilter
|
||||
}
|
||||
|
||||
type BalancePointer struct {
|
||||
type BalanceFilter struct {
|
||||
Uuid *string
|
||||
Id *string
|
||||
Type *string
|
||||
@@ -67,7 +67,7 @@ type BalancePointer struct {
|
||||
Blocker *bool
|
||||
}
|
||||
|
||||
func (bp *BalancePointer) CreateBalance() *Balance {
|
||||
func (bp *BalanceFilter) CreateBalance() *Balance {
|
||||
b := &Balance{}
|
||||
if bp.Uuid != nil {
|
||||
b.Uuid = *bp.Uuid
|
||||
@@ -114,7 +114,7 @@ func (bp *BalancePointer) CreateBalance() *Balance {
|
||||
return b.Clone()
|
||||
}
|
||||
|
||||
func (bp *BalancePointer) LoadFromBalance(b *Balance) {
|
||||
func (bp *BalanceFilter) LoadFromBalance(b *Balance) {
|
||||
if b.Uuid != "" {
|
||||
bp.Uuid = &b.Uuid
|
||||
}
|
||||
@@ -155,20 +155,27 @@ func (bp *BalancePointer) LoadFromBalance(b *Balance) {
|
||||
bp.Blocker = &b.Blocker
|
||||
}
|
||||
|
||||
func (bp *BalancePointer) GetType() string {
|
||||
func (bp *BalanceFilter) GetType() string {
|
||||
if bp.Type == nil {
|
||||
return ""
|
||||
}
|
||||
return *bp.Type
|
||||
}
|
||||
|
||||
func (bp *BalancePointer) GetValue() float64 {
|
||||
func (bp *BalanceFilter) GetValue() float64 {
|
||||
if bp.Value == nil {
|
||||
return 0.0
|
||||
}
|
||||
return *bp.Value
|
||||
}
|
||||
|
||||
func (bp *BalanceFilter) SetValue(v float64) {
|
||||
if bp.Value == nil {
|
||||
bp.Value = new(float64)
|
||||
}
|
||||
*bp.Value = v
|
||||
}
|
||||
|
||||
const (
|
||||
LOG = "*log"
|
||||
RESET_TRIGGERS = "*reset_triggers"
|
||||
@@ -492,9 +499,8 @@ func resetCountersAction(ub *Account, sq *StatsQueueTriggered, a *Action, acs Ac
|
||||
}
|
||||
|
||||
func genericMakeNegative(a *Action) {
|
||||
b := a.Balance.CreateBalance()
|
||||
if a.Balance != nil && b.GetValue() >= 0 { // only apply if not allready negative
|
||||
b.SetValue(-b.GetValue())
|
||||
if a.Balance != nil && a.Balance.GetValue() >= 0 { // only apply if not allready negative
|
||||
a.Balance.SetValue(-a.Balance.GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ type ActionTrigger struct {
|
||||
ExpirationDate time.Time
|
||||
ActivationDate time.Time
|
||||
//BalanceType string // *monetary/*voice etc
|
||||
Balance *BalancePointer
|
||||
Balance *BalanceFilter
|
||||
Weight float64
|
||||
ActionsId string
|
||||
MinQueuedItems int // Trigger actions only if this number is hit (stats only)
|
||||
@@ -76,9 +76,8 @@ func (at *ActionTrigger) Execute(ub *Account, sq *StatsQueueTriggered) (err erro
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
if a.Balance == nil {
|
||||
a.Balance = &BalancePointer{}
|
||||
a.Balance = &BalanceFilter{}
|
||||
}
|
||||
if a.ExpirationString != "" {
|
||||
a.Balance.ExpirationDate = &time.Time{}
|
||||
|
||||
@@ -410,7 +410,7 @@ func TestActionPlanCheckForASAP(t *testing.T) {
|
||||
func TestActionPlanLogFunction(t *testing.T) {
|
||||
a := &Action{
|
||||
ActionType: "*log",
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer("test"),
|
||||
Value: utils.Float64Pointer(1.1),
|
||||
},
|
||||
@@ -427,7 +427,7 @@ func TestActionPlanLogFunction(t *testing.T) {
|
||||
func TestActionPlanFunctionNotAvailable(t *testing.T) {
|
||||
a := &Action{
|
||||
ActionType: "VALID_FUNCTION_TYPE",
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer("test"),
|
||||
Value: utils.Float64Pointer(1.1),
|
||||
},
|
||||
@@ -531,7 +531,7 @@ func TestActionPlansRemoveMember(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchNil(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
@@ -546,7 +546,7 @@ func TestActionTriggerMatchNil(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchAllBlank(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
@@ -561,14 +561,14 @@ func TestActionTriggerMatchAllBlank(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchMinuteBucketBlank(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: `{"BalanceDirections":"*out"}`}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: `{"BalanceDirections":"*out"}`}
|
||||
if !at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -576,7 +576,7 @@ func TestActionTriggerMatchMinuteBucketBlank(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchMinuteBucketFull(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
@@ -591,14 +591,14 @@ func TestActionTriggerMatchMinuteBucketFull(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchAllFull(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*out"}`, utils.TRIGGER_MAX_BALANCE, 2)}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*out"}`, utils.TRIGGER_MAX_BALANCE, 2)}
|
||||
if !at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -606,14 +606,14 @@ func TestActionTriggerMatchAllFull(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchSomeFalse(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*in"}`, utils.TRIGGER_MAX_BALANCE, 2)}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*in"}`, utils.TRIGGER_MAX_BALANCE, 2)}
|
||||
if at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -621,14 +621,14 @@ func TestActionTriggerMatchSomeFalse(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatcBalanceFalse(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*out"}`, utils.TRIGGER_MAX_BALANCE, 3.0)}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*out"}`, utils.TRIGGER_MAX_BALANCE, 3.0)}
|
||||
if at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -636,14 +636,14 @@ func TestActionTriggerMatcBalanceFalse(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatcAllFalse(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
},
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 2,
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*in"}`, utils.TRIGGER_MAX_EVENT_COUNTER, 3)}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"ThresholdType":"%v", "ThresholdValue": %v, "BalanceDirections":"*in"}`, utils.TRIGGER_MAX_EVENT_COUNTER, 3)}
|
||||
if at.Match(a) {
|
||||
t.Errorf("Action trigger [%v] does not match action [%v]", at, a)
|
||||
}
|
||||
@@ -651,7 +651,7 @@ func TestActionTriggerMatcAllFalse(t *testing.T) {
|
||||
|
||||
func TestActionTriggerMatchAll(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
RatingSubject: utils.StringPointer("test1"),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
@@ -662,7 +662,7 @@ func TestActionTriggerMatchAll(t *testing.T) {
|
||||
},
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"BalanceDirections":"*out", "ThresholdType":"%v", "ThresholdValue": %v, "DestinationIds": "%v", "BalanceWeight": %v, "BalanceRatingSubject": "%v", "BalanceSharedGroup": "%v"}`, utils.TRIGGER_MAX_BALANCE, 2, "NAT", 1.0, "test1", "test2")}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ExtraParameters: fmt.Sprintf(`{"BalanceDirections":"*out", "ThresholdType":"%v", "ThresholdValue": %v, "DestinationIds": "%v", "BalanceWeight": %v, "BalanceRatingSubject": "%v", "BalanceSharedGroup": "%v"}`, utils.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)
|
||||
}
|
||||
@@ -685,7 +685,7 @@ func TestActionResetTriggres(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
resetTriggersAction(ub, nil, nil, nil)
|
||||
if ub.ActionTriggers[0].Executed == true || ub.ActionTriggers[1].Executed == true {
|
||||
@@ -698,7 +698,7 @@ func TestActionResetTriggresExecutesThem(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
resetTriggersAction(ub, nil, nil, nil)
|
||||
if ub.ActionTriggers[0].Executed == true || ub.BalanceMap[utils.MONETARY][0].GetValue() == 12 {
|
||||
@@ -711,9 +711,9 @@ func TestActionResetTriggresActionFilter(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 10}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
resetTriggersAction(ub, nil, &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.SMS)}}, nil)
|
||||
resetTriggersAction(ub, nil, &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.SMS)}}, nil)
|
||||
if ub.ActionTriggers[0].Executed == false || ub.ActionTriggers[1].Executed == false {
|
||||
t.Error("Reset triggers action failed!")
|
||||
}
|
||||
@@ -724,7 +724,7 @@ func TestActionSetPostpaid(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
allowNegativeAction(ub, nil, nil, nil)
|
||||
if !ub.AllowNegative {
|
||||
@@ -738,7 +738,7 @@ func TestActionSetPrepaid(t *testing.T) {
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
denyNegativeAction(ub, nil, nil, nil)
|
||||
if ub.AllowNegative {
|
||||
@@ -752,7 +752,7 @@ func TestActionResetPrepaid(t *testing.T) {
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
resetAccountAction(ub, nil, nil, nil)
|
||||
if !ub.AllowNegative ||
|
||||
@@ -770,7 +770,7 @@ func TestActionResetPostpaid(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.SMS)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
resetAccountAction(ub, nil, nil, nil)
|
||||
if ub.BalanceMap[utils.MONETARY].GetTotalValue() != 0 ||
|
||||
@@ -786,9 +786,9 @@ func TestActionTopupResetCredit(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Directions: utils.NewStringMap(utils.OUT), Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.NewStringMap(utils.OUT)}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 10 ||
|
||||
@@ -805,7 +805,7 @@ func TestActionTopupValueFactor(t *testing.T) {
|
||||
BalanceMap: map[string]BalanceChain{},
|
||||
}
|
||||
a := &Action{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Value: utils.Float64Pointer(10),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
@@ -828,7 +828,7 @@ func TestActionTopupResetCreditId(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Id: utils.StringPointer("TEST_B"), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Id: utils.StringPointer("TEST_B"), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 110 ||
|
||||
@@ -847,7 +847,7 @@ func TestActionTopupResetCreditNoId(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 20 ||
|
||||
@@ -863,9 +863,9 @@ func TestActionTopupResetMinutes(t *testing.T) {
|
||||
utils.MONETARY: BalanceChain{&Balance{Value: 100}},
|
||||
utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT"), Directions: utils.NewStringMap(utils.OUT)}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.NewStringMap(utils.OUT)}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.VOICE), Value: utils.Float64Pointer(5), Weight: utils.Float64Pointer(20), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.VOICE), Value: utils.Float64Pointer(5), Weight: utils.Float64Pointer(20), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
topupResetAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.VOICE].GetTotalValue() != 5 ||
|
||||
@@ -882,9 +882,9 @@ func TestActionTopupCredit(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT"), Directions: utils.NewStringMap(utils.OUT)}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.NewStringMap(utils.OUT)}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
topupAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 110 ||
|
||||
@@ -900,9 +900,9 @@ func TestActionTopupMinutes(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT"), Directions: utils.NewStringMap(utils.OUT)}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.VOICE), Value: utils.Float64Pointer(5), Weight: utils.Float64Pointer(20), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.VOICE), Value: utils.Float64Pointer(5), Weight: utils.Float64Pointer(20), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
topupAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.VOICE].GetTotalValue() != 15 ||
|
||||
@@ -919,9 +919,9 @@ func TestActionDebitCredit(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.NewStringMap(utils.OUT)}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
debitAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 90 ||
|
||||
@@ -937,9 +937,9 @@ func TestActionDebitMinutes(t *testing.T) {
|
||||
Id: "TEST_UB",
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT"), Directions: utils.NewStringMap(utils.OUT)}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}, &ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.VOICE), Value: utils.Float64Pointer(5), Weight: utils.Float64Pointer(20), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.VOICE), Value: utils.Float64Pointer(5), Weight: utils.Float64Pointer(20), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}}
|
||||
debitAction(ub, nil, a, nil)
|
||||
if ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.VOICE][0].GetValue() != 5 ||
|
||||
@@ -961,7 +961,7 @@ func TestActionResetAllCounters(t *testing.T) {
|
||||
&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT"), Directions: utils.NewStringMap(utils.OUT)},
|
||||
&Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET"), Directions: utils.NewStringMap(utils.OUT)}}},
|
||||
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ThresholdValue: 2, Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Weight: utils.Float64Pointer(20)}, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ThresholdValue: 2, Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")), Weight: utils.Float64Pointer(20)}, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
ub.InitCounters()
|
||||
resetCountersAction(ub, nil, nil, nil)
|
||||
@@ -989,9 +989,9 @@ func TestActionResetCounterOnlyDefault(t *testing.T) {
|
||||
BalanceMap: map[string]BalanceChain{
|
||||
utils.MONETARY: BalanceChain{&Balance{Value: 100}},
|
||||
utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}, ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}}
|
||||
ub.InitCounters()
|
||||
resetCountersAction(ub, nil, a, nil)
|
||||
if !ub.AllowNegative ||
|
||||
@@ -1020,9 +1020,9 @@ func TestActionResetCounterCredit(t *testing.T) {
|
||||
AllowNegative: true,
|
||||
BalanceMap: map[string]BalanceChain{utils.MONETARY: BalanceChain{&Balance{Value: 100}}, utils.VOICE: BalanceChain{&Balance{Value: 10, Weight: 20, DestinationIds: utils.NewStringMap("NAT")}, &Balance{Weight: 10, DestinationIds: utils.NewStringMap("RET")}}},
|
||||
UnitCounters: UnitCounters{&UnitCounter{BalanceType: utils.MONETARY, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.NewStringMap(utils.OUT)}}}, &UnitCounter{BalanceType: utils.SMS, Balances: BalanceChain{&Balance{Value: 1, Directions: utils.NewStringMap(utils.OUT)}}}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
ActionTriggers: ActionTriggers{&ActionTrigger{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT))}, ThresholdValue: 2, ActionsId: "TEST_ACTIONS", Executed: true}},
|
||||
}
|
||||
a := &Action{Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY)}}
|
||||
a := &Action{Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY)}}
|
||||
resetCountersAction(ub, nil, a, nil)
|
||||
if !ub.AllowNegative ||
|
||||
ub.BalanceMap[utils.MONETARY].GetTotalValue() != 100 ||
|
||||
@@ -1036,7 +1036,7 @@ func TestActionResetCounterCredit(t *testing.T) {
|
||||
func TestActionTriggerLogging(t *testing.T) {
|
||||
at := &ActionTrigger{
|
||||
ID: "some_uuid",
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")),
|
||||
@@ -1108,7 +1108,7 @@ func TestActionPlanLogging(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestActionMakeNegative(t *testing.T) {
|
||||
a := &Action{Balance: &BalancePointer{Value: utils.Float64Pointer(10)}}
|
||||
a := &Action{Balance: &BalanceFilter{Value: utils.Float64Pointer(10)}}
|
||||
genericMakeNegative(a)
|
||||
if a.Balance.GetValue() > 0 {
|
||||
t.Error("Failed to make negative: ", a)
|
||||
@@ -1142,7 +1142,7 @@ func TestTopupAction(t *testing.T) {
|
||||
initialUb, _ := accountingStorage.GetAccount("vdf:minu")
|
||||
a := &Action{
|
||||
ActionType: TOPUP,
|
||||
Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), Weight: utils.Float64Pointer(20)},
|
||||
}
|
||||
|
||||
at := &ActionTiming{
|
||||
@@ -1163,7 +1163,7 @@ func TestTopupActionLoaded(t *testing.T) {
|
||||
initialUb, _ := accountingStorage.GetAccount("vdf:minitsboy")
|
||||
a := &Action{
|
||||
ActionType: TOPUP,
|
||||
Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)), Weight: utils.Float64Pointer(20)},
|
||||
}
|
||||
|
||||
at := &ActionTiming{
|
||||
@@ -1190,7 +1190,7 @@ func TestActionCdrlogEmpty(t *testing.T) {
|
||||
err := cdrLogAction(acnt, nil, cdrlog, Actions{
|
||||
&Action{
|
||||
ActionType: DEBIT,
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
@@ -1212,11 +1212,11 @@ func TestActionCdrlogWithParams(t *testing.T) {
|
||||
err := cdrLogAction(acnt, nil, cdrlog, Actions{
|
||||
&Action{
|
||||
ActionType: DEBIT,
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
},
|
||||
&Action{
|
||||
ActionType: DEBIT_RESET,
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
@@ -1239,11 +1239,11 @@ func TestActionCdrLogParamsWithOverload(t *testing.T) {
|
||||
err := cdrLogAction(acnt, nil, cdrlog, Actions{
|
||||
&Action{
|
||||
ActionType: DEBIT,
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
},
|
||||
&Action{
|
||||
ActionType: DEBIT_RESET,
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(25), DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")), Weight: utils.Float64Pointer(20)},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
@@ -1324,11 +1324,11 @@ func TestActionTransactionFuncType(t *testing.T) {
|
||||
actions: []*Action{
|
||||
&Action{
|
||||
ActionType: TOPUP,
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(1.1), Type: utils.StringPointer(utils.MONETARY)},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(1.1), Type: utils.StringPointer(utils.MONETARY)},
|
||||
},
|
||||
&Action{
|
||||
ActionType: "VALID_FUNCTION_TYPE",
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(1.1), Type: utils.StringPointer("test")},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(1.1), Type: utils.StringPointer("test")},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1360,11 +1360,11 @@ func TestActionTransactionBalanceType(t *testing.T) {
|
||||
actions: []*Action{
|
||||
&Action{
|
||||
ActionType: TOPUP,
|
||||
Balance: &BalancePointer{Value: utils.Float64Pointer(1.1), Type: utils.StringPointer(utils.MONETARY)},
|
||||
Balance: &BalanceFilter{Value: utils.Float64Pointer(1.1), Type: utils.StringPointer(utils.MONETARY)},
|
||||
},
|
||||
&Action{
|
||||
ActionType: TOPUP,
|
||||
Balance: &BalancePointer{Type: utils.StringPointer("test")},
|
||||
Balance: &BalanceFilter{Type: utils.StringPointer("test")},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1396,14 +1396,14 @@ func TestActionWithExpireWithoutExpire(t *testing.T) {
|
||||
actions: []*Action{
|
||||
&Action{
|
||||
ActionType: TOPUP,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Value: utils.Float64Pointer(15),
|
||||
},
|
||||
},
|
||||
&Action{
|
||||
ActionType: TOPUP,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Value: utils.Float64Pointer(30),
|
||||
ExpirationDate: utils.TimePointer(time.Date(2025, time.November, 11, 22, 39, 0, 0, time.UTC)),
|
||||
@@ -1451,7 +1451,7 @@ func TestActionRemoveBalance(t *testing.T) {
|
||||
actions: []*Action{
|
||||
&Action{
|
||||
ActionType: REMOVE_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT", "RET")),
|
||||
},
|
||||
@@ -1561,7 +1561,7 @@ func TestActionTransferMonetaryDefaultFilter(t *testing.T) {
|
||||
|
||||
a := &Action{
|
||||
ActionType: TRANSFER_MONETARY_DEFAULT,
|
||||
Balance: &BalancePointer{Weight: utils.Float64Pointer(20)},
|
||||
Balance: &BalanceFilter{Weight: utils.Float64Pointer(20)},
|
||||
}
|
||||
|
||||
at := &ActionTiming{
|
||||
@@ -1623,7 +1623,7 @@ func TestActionConditionalTopup(t *testing.T) {
|
||||
a := &Action{
|
||||
ActionType: TOPUP,
|
||||
Filter: `{"Type":"*monetary","Value":1,"Weight":10}`,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Value: utils.Float64Pointer(11),
|
||||
Weight: utils.Float64Pointer(30),
|
||||
@@ -1687,7 +1687,7 @@ func TestActionConditionalTopupNoMatch(t *testing.T) {
|
||||
a := &Action{
|
||||
ActionType: TOPUP,
|
||||
Filter: `{"Type":"*monetary","Value":2,"Weight":10}`,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Value: utils.Float64Pointer(11),
|
||||
Weight: utils.Float64Pointer(30),
|
||||
@@ -1751,7 +1751,7 @@ func TestActionConditionalTopupExistingBalance(t *testing.T) {
|
||||
a := &Action{
|
||||
ActionType: TOPUP,
|
||||
Filter: `{"Type":"*voice","Value":{"*gte":100}}`,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Value: utils.Float64Pointer(11),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1852,7 +1852,7 @@ func TestActionConditionalDisabledIfNegative(t *testing.T) {
|
||||
a1 := &Action{
|
||||
ActionType: "*enable_disable_balance",
|
||||
Filter: "{\"*and\":[{\"Value\":{\"*lt\":0}},{\"Id\":{\"*eq\":\"*default\"}}]}",
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer("*sms"),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
Disabled: utils.BoolPointer(true),
|
||||
@@ -1862,7 +1862,7 @@ func TestActionConditionalDisabledIfNegative(t *testing.T) {
|
||||
a2 := &Action{
|
||||
ActionType: "*enable_disable_balance",
|
||||
Filter: "{\"*and\":[{\"Value\":{\"*lt\":0}},{\"Id\":{\"*eq\":\"*default\"}}]}",
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer("*sms"),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("FRANCE_NATIONAL")),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1873,7 +1873,7 @@ func TestActionConditionalDisabledIfNegative(t *testing.T) {
|
||||
a3 := &Action{
|
||||
ActionType: "*enable_disable_balance",
|
||||
Filter: "{\"*and\":[{\"Value\":{\"*lt\":0}},{\"Id\":{\"*eq\":\"*default\"}}]}",
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer("*data"),
|
||||
RatingSubject: utils.StringPointer("for_v3hsillmilld500m_data_forfait"),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1884,7 +1884,7 @@ func TestActionConditionalDisabledIfNegative(t *testing.T) {
|
||||
a4 := &Action{
|
||||
ActionType: "*enable_disable_balance",
|
||||
Filter: "{\"*and\":[{\"Value\":{\"*lt\":0}},{\"Id\":{\"*eq\":\"*default\"}}]}",
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer("*voice"),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("FRANCE_NATIONAL")),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -1956,7 +1956,7 @@ func TestActionSetBalance(t *testing.T) {
|
||||
|
||||
a := &Action{
|
||||
ActionType: SET_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Id: utils.StringPointer("m2"),
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Value: utils.Float64Pointer(11),
|
||||
|
||||
@@ -72,7 +72,7 @@ func (b *Balance) Equal(o *Balance) bool {
|
||||
b.Blocker == o.Blocker
|
||||
}
|
||||
|
||||
func (b *Balance) MatchFilter(o *BalancePointer, skipIds bool) bool {
|
||||
func (b *Balance) MatchFilter(o *BalanceFilter, skipIds bool) bool {
|
||||
if o == nil {
|
||||
return true
|
||||
}
|
||||
@@ -84,7 +84,7 @@ func (b *Balance) MatchFilter(o *BalancePointer, skipIds bool) bool {
|
||||
}
|
||||
return (o.ExpirationDate == nil || b.ExpirationDate.Equal(*o.ExpirationDate)) &&
|
||||
(o.Weight == nil || b.Weight == *o.Weight) &&
|
||||
(o.Blocker != nil || b.Blocker == *o.Blocker) &&
|
||||
(o.Blocker == nil || b.Blocker == *o.Blocker) &&
|
||||
(o.Disabled == nil || b.Disabled == *o.Disabled) &&
|
||||
(o.DestinationIds == nil || b.DestinationIds.Includes(*o.DestinationIds)) &&
|
||||
(o.Directions == nil || b.Directions.Includes(*o.Directions)) &&
|
||||
@@ -94,7 +94,7 @@ func (b *Balance) MatchFilter(o *BalancePointer, skipIds bool) bool {
|
||||
(o.RatingSubject == nil || b.RatingSubject == *o.RatingSubject)
|
||||
}
|
||||
|
||||
func (b *Balance) HardMatchFilter(o *BalancePointer, skipIds bool) bool {
|
||||
func (b *Balance) HardMatchFilter(o *BalanceFilter, skipIds bool) bool {
|
||||
if o == nil {
|
||||
return true
|
||||
}
|
||||
@@ -106,7 +106,7 @@ func (b *Balance) HardMatchFilter(o *BalancePointer, skipIds bool) bool {
|
||||
}
|
||||
return (o.ExpirationDate == nil || b.ExpirationDate.Equal(*o.ExpirationDate)) &&
|
||||
(o.Weight == nil || b.Weight == *o.Weight) &&
|
||||
(o.Blocker != nil || b.Blocker == *o.Blocker) &&
|
||||
(o.Blocker == nil || b.Blocker == *o.Blocker) &&
|
||||
(o.Disabled == nil || b.Disabled == *o.Disabled) &&
|
||||
(o.DestinationIds == nil || b.DestinationIds.Equal(*o.DestinationIds)) &&
|
||||
(o.Directions == nil || b.Directions.Equal(*o.Directions)) &&
|
||||
|
||||
@@ -90,7 +90,7 @@ func TestBalanceEqual(t *testing.T) {
|
||||
|
||||
func TestBalanceMatchFilter(t *testing.T) {
|
||||
mb1 := &Balance{Weight: 1, precision: 1, RatingSubject: "1", DestinationIds: utils.StringMap{}}
|
||||
mb2 := &BalancePointer{Weight: utils.Float64Pointer(1), RatingSubject: nil, DestinationIds: nil}
|
||||
mb2 := &BalanceFilter{Weight: utils.Float64Pointer(1), RatingSubject: nil, DestinationIds: nil}
|
||||
if !mb1.MatchFilter(mb2, false) {
|
||||
t.Errorf("Match filter failure: %+v == %+v", mb1, mb2)
|
||||
}
|
||||
@@ -98,7 +98,7 @@ func TestBalanceMatchFilter(t *testing.T) {
|
||||
|
||||
func TestBalanceMatchFilterEmpty(t *testing.T) {
|
||||
mb1 := &Balance{Weight: 1, precision: 1, RatingSubject: "1", DestinationIds: utils.StringMap{}}
|
||||
mb2 := &BalancePointer{}
|
||||
mb2 := &BalanceFilter{}
|
||||
if !mb1.MatchFilter(mb2, false) {
|
||||
t.Errorf("Match filter failure: %+v == %+v", mb1, mb2)
|
||||
}
|
||||
@@ -106,7 +106,7 @@ func TestBalanceMatchFilterEmpty(t *testing.T) {
|
||||
|
||||
func TestBalanceMatchFilterId(t *testing.T) {
|
||||
mb1 := &Balance{Id: "T1", Weight: 2, precision: 2, RatingSubject: "2", DestinationIds: utils.NewStringMap("NAT")}
|
||||
mb2 := &BalancePointer{Id: utils.StringPointer("T1"), Weight: utils.Float64Pointer(1), RatingSubject: utils.StringPointer("1"), DestinationIds: nil}
|
||||
mb2 := &BalanceFilter{Id: utils.StringPointer("T1"), Weight: utils.Float64Pointer(1), RatingSubject: utils.StringPointer("1"), DestinationIds: nil}
|
||||
if !mb1.MatchFilter(mb2, false) {
|
||||
t.Errorf("Match filter failure: %+v == %+v", mb1, mb2)
|
||||
}
|
||||
@@ -114,7 +114,7 @@ func TestBalanceMatchFilterId(t *testing.T) {
|
||||
|
||||
func TestBalanceMatchFilterDiffId(t *testing.T) {
|
||||
mb1 := &Balance{Id: "T1", Weight: 1, precision: 1, RatingSubject: "1", DestinationIds: utils.StringMap{}}
|
||||
mb2 := &BalancePointer{Id: utils.StringPointer("T2"), Weight: utils.Float64Pointer(1), RatingSubject: utils.StringPointer("1"), DestinationIds: nil}
|
||||
mb2 := &BalanceFilter{Id: utils.StringPointer("T2"), Weight: utils.Float64Pointer(1), RatingSubject: utils.StringPointer("1"), DestinationIds: nil}
|
||||
if mb1.MatchFilter(mb2, false) {
|
||||
t.Errorf("Match filter failure: %+v != %+v", mb1, mb2)
|
||||
}
|
||||
@@ -129,7 +129,7 @@ func TestBalanceClone(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestBalanceMatchActionTriggerId(t *testing.T) {
|
||||
at := &ActionTrigger{Balance: &BalancePointer{Id: utils.StringPointer("test")}}
|
||||
at := &ActionTrigger{Balance: &BalanceFilter{Id: utils.StringPointer("test")}}
|
||||
b := &Balance{Id: "test"}
|
||||
if !b.MatchActionTrigger(at) {
|
||||
t.Errorf("Error matching action trigger: %+v %+v", b, at)
|
||||
@@ -150,7 +150,7 @@ func TestBalanceMatchActionTriggerId(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestBalanceMatchActionTriggerDestination(t *testing.T) {
|
||||
at := &ActionTrigger{Balance: &BalancePointer{DestinationIds: utils.StringMapPointer(utils.NewStringMap("test"))}}
|
||||
at := &ActionTrigger{Balance: &BalanceFilter{DestinationIds: utils.StringMapPointer(utils.NewStringMap("test"))}}
|
||||
b := &Balance{DestinationIds: utils.NewStringMap("test")}
|
||||
if !b.MatchActionTrigger(at) {
|
||||
t.Errorf("Error matching action trigger: %+v %+v", b, at)
|
||||
@@ -171,7 +171,7 @@ func TestBalanceMatchActionTriggerDestination(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestBalanceMatchActionTriggerWeight(t *testing.T) {
|
||||
at := &ActionTrigger{Balance: &BalancePointer{Weight: utils.Float64Pointer(1)}}
|
||||
at := &ActionTrigger{Balance: &BalanceFilter{Weight: utils.Float64Pointer(1)}}
|
||||
b := &Balance{Weight: 1}
|
||||
if !b.MatchActionTrigger(at) {
|
||||
t.Errorf("Error matching action trigger: %+v %+v", b, at)
|
||||
@@ -192,7 +192,7 @@ func TestBalanceMatchActionTriggerWeight(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestBalanceMatchActionTriggerRatingSubject(t *testing.T) {
|
||||
at := &ActionTrigger{Balance: &BalancePointer{RatingSubject: utils.StringPointer("test")}}
|
||||
at := &ActionTrigger{Balance: &BalanceFilter{RatingSubject: utils.StringPointer("test")}}
|
||||
b := &Balance{RatingSubject: "test"}
|
||||
if !b.MatchActionTrigger(at) {
|
||||
t.Errorf("Error matching action trigger: %+v %+v", b, at)
|
||||
@@ -213,7 +213,7 @@ func TestBalanceMatchActionTriggerRatingSubject(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestBalanceMatchActionTriggerSharedGroup(t *testing.T) {
|
||||
at := &ActionTrigger{Balance: &BalancePointer{SharedGroups: utils.StringMapPointer(utils.NewStringMap("test"))}}
|
||||
at := &ActionTrigger{Balance: &BalanceFilter{SharedGroups: utils.StringMapPointer(utils.NewStringMap("test"))}}
|
||||
b := &Balance{SharedGroups: utils.NewStringMap("test")}
|
||||
if !b.MatchActionTrigger(at) {
|
||||
t.Errorf("Error matching action trigger: %+v %+v", b, at)
|
||||
|
||||
@@ -41,12 +41,12 @@ func init() {
|
||||
|
||||
func populateDB() {
|
||||
ats := []*Action{
|
||||
&Action{ActionType: "*topup", Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10)}},
|
||||
&Action{ActionType: "*topup", Balance: &BalancePointer{Type: utils.StringPointer(utils.VOICE), Weight: utils.Float64Pointer(20), Value: utils.Float64Pointer(10), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT"))}},
|
||||
&Action{ActionType: "*topup", Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10)}},
|
||||
&Action{ActionType: "*topup", Balance: &BalanceFilter{Type: utils.StringPointer(utils.VOICE), Weight: utils.Float64Pointer(20), Value: utils.Float64Pointer(10), DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT"))}},
|
||||
}
|
||||
|
||||
ats1 := []*Action{
|
||||
&Action{ActionType: "*topup", Balance: &BalancePointer{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10)}, Weight: 10},
|
||||
&Action{ActionType: "*topup", Balance: &BalanceFilter{Type: utils.StringPointer(utils.MONETARY), Value: utils.Float64Pointer(10)}, Weight: 10},
|
||||
&Action{ActionType: "*reset_account", Weight: 20},
|
||||
}
|
||||
|
||||
|
||||
@@ -826,7 +826,7 @@ func TestLoadActions(t *testing.T) {
|
||||
ExpirationString: UNLIMITED,
|
||||
ExtraParameters: "",
|
||||
Weight: 10,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Uuid: as1[0].Balance.Uuid,
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
@@ -844,7 +844,7 @@ func TestLoadActions(t *testing.T) {
|
||||
ExpirationString: UNLIMITED,
|
||||
ExtraParameters: "",
|
||||
Weight: 10,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Uuid: as1[1].Balance.Uuid,
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
@@ -868,7 +868,7 @@ func TestLoadActions(t *testing.T) {
|
||||
ActionType: TOPUP,
|
||||
ExpirationString: UNLIMITED,
|
||||
Weight: 10,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
DestinationIds: nil,
|
||||
@@ -891,7 +891,7 @@ func TestLoadActions(t *testing.T) {
|
||||
ActionType: CDRLOG,
|
||||
ExtraParameters: `{"Category":"^ddi","MediationRunId":"^did_run"}`,
|
||||
Weight: 10,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Uuid: as3[0].Balance.Uuid,
|
||||
Directions: nil,
|
||||
DestinationIds: nil,
|
||||
@@ -1047,7 +1047,7 @@ func TestLoadActionTriggers(t *testing.T) {
|
||||
UniqueID: "st0",
|
||||
ThresholdType: utils.TRIGGER_MIN_EVENT_COUNTER,
|
||||
ThresholdValue: 10,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("GERMANY_O2")),
|
||||
@@ -1068,7 +1068,7 @@ func TestLoadActionTriggers(t *testing.T) {
|
||||
UniqueID: "st1",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
ThresholdValue: 200,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("GERMANY")),
|
||||
|
||||
@@ -317,7 +317,7 @@ func GetUB() *Account {
|
||||
at := &ActionTrigger{
|
||||
ID: "some_uuid",
|
||||
ThresholdValue: 100.0,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")),
|
||||
|
||||
@@ -521,7 +521,7 @@ func (tpr *TpReader) LoadActions() (err error) {
|
||||
ExtraParameters: tpact.ExtraParameters,
|
||||
ExpirationString: tpact.ExpiryTime,
|
||||
Filter: tpact.Filter,
|
||||
Balance: &BalancePointer{},
|
||||
Balance: &BalanceFilter{},
|
||||
}
|
||||
if tpact.BalanceId != "" && tpact.BalanceId != utils.ANY {
|
||||
acts[idx].Balance.Id = utils.StringPointer(tpact.BalanceId)
|
||||
@@ -545,7 +545,7 @@ func (tpr *TpReader) LoadActions() (err error) {
|
||||
}
|
||||
acts[idx].Balance.Weight = utils.Float64Pointer(u)
|
||||
}
|
||||
if tpact.ExpiryTime != "" && tpact.ExpiryTime != utils.ANY {
|
||||
if tpact.ExpiryTime != "" && tpact.ExpiryTime != utils.ANY && tpact.ExpiryTime != utils.UNLIMITED {
|
||||
u, err := utils.ParseTimeDetectLayout(tpact.ExpiryTime, tpr.timezone)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -700,7 +700,7 @@ func (tpr *TpReader) LoadActionTriggers() (err error) {
|
||||
MinSleep: minSleep,
|
||||
ExpirationDate: expirationDate,
|
||||
ActivationDate: activationDate,
|
||||
Balance: &BalancePointer{},
|
||||
Balance: &BalanceFilter{},
|
||||
Weight: atr.Weight,
|
||||
ActionsId: atr.ActionsId,
|
||||
MinQueuedItems: atr.MinQueuedItems,
|
||||
@@ -720,7 +720,7 @@ func (tpr *TpReader) LoadActionTriggers() (err error) {
|
||||
}
|
||||
atrs[idx].Balance.Weight = utils.Float64Pointer(u)
|
||||
}
|
||||
if atr.BalanceExpirationDate != "" && atr.BalanceExpirationDate != utils.ANY {
|
||||
if atr.BalanceExpirationDate != "" && atr.BalanceExpirationDate != utils.ANY && atr.ExpirationDate != utils.UNLIMITED {
|
||||
u, err := utils.ParseTimeDetectLayout(atr.BalanceExpirationDate, tpr.timezone)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -901,7 +901,7 @@ func (tpr *TpReader) LoadAccountActionsFiltered(qriedAA *TpAccountAction) error
|
||||
MinSleep: minSleep,
|
||||
ExpirationDate: expTime,
|
||||
ActivationDate: actTime,
|
||||
Balance: &BalancePointer{},
|
||||
Balance: &BalanceFilter{},
|
||||
Weight: atr.Weight,
|
||||
ActionsId: atr.ActionsId,
|
||||
}
|
||||
@@ -920,7 +920,7 @@ func (tpr *TpReader) LoadAccountActionsFiltered(qriedAA *TpAccountAction) error
|
||||
}
|
||||
atrs[idx].Balance.Weight = utils.Float64Pointer(u)
|
||||
}
|
||||
if atr.BalanceExpirationDate != "" && atr.BalanceExpirationDate != utils.ANY {
|
||||
if atr.BalanceExpirationDate != "" && atr.BalanceExpirationDate != utils.ANY && atr.ExpirationDate != utils.UNLIMITED {
|
||||
u, err := utils.ParseTimeDetectLayout(atr.BalanceExpirationDate, tpr.timezone)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1003,7 +1003,7 @@ func (tpr *TpReader) LoadAccountActionsFiltered(qriedAA *TpAccountAction) error
|
||||
ExtraParameters: tpact.ExtraParameters,
|
||||
ExpirationString: tpact.ExpiryTime,
|
||||
Filter: tpact.Filter,
|
||||
Balance: &BalancePointer{},
|
||||
Balance: &BalanceFilter{},
|
||||
}
|
||||
if tpact.BalanceId != "" && tpact.BalanceId != utils.ANY {
|
||||
acts[idx].Balance.Id = utils.StringPointer(tpact.BalanceId)
|
||||
@@ -1238,7 +1238,7 @@ func (tpr *TpReader) LoadCdrStatsFiltered(tag string, save bool) (err error) {
|
||||
MinSleep: minSleep,
|
||||
ExpirationDate: expTime,
|
||||
ActivationDate: actTime,
|
||||
Balance: &BalancePointer{},
|
||||
Balance: &BalanceFilter{},
|
||||
Weight: atr.Weight,
|
||||
ActionsId: atr.ActionsId,
|
||||
}
|
||||
@@ -1257,7 +1257,7 @@ func (tpr *TpReader) LoadCdrStatsFiltered(tag string, save bool) (err error) {
|
||||
}
|
||||
atrs[idx].Balance.Weight = utils.Float64Pointer(u)
|
||||
}
|
||||
if atr.BalanceExpirationDate != "" && atr.BalanceExpirationDate != utils.ANY {
|
||||
if atr.BalanceExpirationDate != "" && atr.BalanceExpirationDate != utils.ANY && atr.ExpirationDate != utils.UNLIMITED {
|
||||
u, err := utils.ParseTimeDetectLayout(atr.BalanceExpirationDate, tpr.timezone)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1349,7 +1349,7 @@ func (tpr *TpReader) LoadCdrStatsFiltered(tag string, save bool) (err error) {
|
||||
ExtraParameters: tpact.ExtraParameters,
|
||||
ExpirationString: tpact.ExpiryTime,
|
||||
Filter: tpact.Filter,
|
||||
Balance: &BalancePointer{},
|
||||
Balance: &BalanceFilter{},
|
||||
}
|
||||
if tpact.BalanceId != "" && tpact.BalanceId != utils.ANY {
|
||||
acts[idx].Balance.Id = utils.StringPointer(tpact.BalanceId)
|
||||
|
||||
@@ -18,7 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
package engine
|
||||
|
||||
import "github.com/cgrates/cgrates/utils"
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
|
||||
// Amount of a trafic of a certain type
|
||||
type UnitCounter struct {
|
||||
@@ -58,11 +62,13 @@ func (ucs UnitCounters) addUnits(amount float64, kind string, cc *CallCost, b *B
|
||||
uc.CounterType = utils.COUNTER_EVENT
|
||||
}
|
||||
for _, bal := range uc.Balances {
|
||||
log.Print(b)
|
||||
if uc.CounterType == utils.COUNTER_EVENT && cc != nil && bal.MatchCCFilter(cc) {
|
||||
log.Print("HERE")
|
||||
bal.AddValue(amount)
|
||||
continue
|
||||
}
|
||||
bp := &BalancePointer{}
|
||||
bp := &BalanceFilter{}
|
||||
bp.LoadFromBalance(bal)
|
||||
if uc.CounterType == utils.COUNTER_BALANCE && b != nil && b.MatchFilter(bp, true) {
|
||||
bal.AddValue(amount)
|
||||
|
||||
@@ -52,7 +52,7 @@ func TestUnitCountersCountAllMonetary(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR1",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -61,7 +61,7 @@ func TestUnitCountersCountAllMonetary(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR11",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -70,7 +70,7 @@ func TestUnitCountersCountAllMonetary(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR2",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -79,7 +79,7 @@ func TestUnitCountersCountAllMonetary(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR3",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -88,7 +88,7 @@ func TestUnitCountersCountAllMonetary(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR4",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -97,7 +97,7 @@ func TestUnitCountersCountAllMonetary(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR5",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -128,7 +128,7 @@ func TestUnitCountersCountAllMonetaryId(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR1",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -137,7 +137,7 @@ func TestUnitCountersCountAllMonetaryId(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR11",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(20),
|
||||
@@ -146,7 +146,7 @@ func TestUnitCountersCountAllMonetaryId(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR2",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -155,7 +155,7 @@ func TestUnitCountersCountAllMonetaryId(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR3",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -164,7 +164,7 @@ func TestUnitCountersCountAllMonetaryId(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR4",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -173,7 +173,7 @@ func TestUnitCountersCountAllMonetaryId(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR5",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -204,7 +204,7 @@ func TestUnitCountersCountAllVoiceDestinationEvent(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR1",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -213,7 +213,7 @@ func TestUnitCountersCountAllVoiceDestinationEvent(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR11",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(20),
|
||||
@@ -222,7 +222,7 @@ func TestUnitCountersCountAllVoiceDestinationEvent(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR2",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")),
|
||||
@@ -232,7 +232,7 @@ func TestUnitCountersCountAllVoiceDestinationEvent(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR22",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -241,7 +241,7 @@ func TestUnitCountersCountAllVoiceDestinationEvent(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR3",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -250,7 +250,7 @@ func TestUnitCountersCountAllVoiceDestinationEvent(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR4",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -259,7 +259,7 @@ func TestUnitCountersCountAllVoiceDestinationEvent(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR5",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -290,7 +290,7 @@ func TestUnitCountersKeepValuesAfterInit(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR1",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -299,7 +299,7 @@ func TestUnitCountersKeepValuesAfterInit(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR11",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(20),
|
||||
@@ -308,7 +308,7 @@ func TestUnitCountersKeepValuesAfterInit(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR2",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("NAT")),
|
||||
@@ -318,7 +318,7 @@ func TestUnitCountersKeepValuesAfterInit(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR22",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
DestinationIds: utils.StringMapPointer(utils.NewStringMap("RET")),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -327,7 +327,7 @@ func TestUnitCountersKeepValuesAfterInit(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR3",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -336,7 +336,7 @@ func TestUnitCountersKeepValuesAfterInit(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR4",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -345,7 +345,7 @@ func TestUnitCountersKeepValuesAfterInit(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR5",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -390,7 +390,7 @@ func TestUnitCountersResetCounterById(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR1",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -399,7 +399,7 @@ func TestUnitCountersResetCounterById(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR11",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -408,7 +408,7 @@ func TestUnitCountersResetCounterById(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR2",
|
||||
ThresholdType: utils.TRIGGER_MAX_EVENT_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -417,7 +417,7 @@ func TestUnitCountersResetCounterById(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR3",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.VOICE),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -426,7 +426,7 @@ func TestUnitCountersResetCounterById(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR4",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE_COUNTER,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -435,7 +435,7 @@ func TestUnitCountersResetCounterById(t *testing.T) {
|
||||
&ActionTrigger{
|
||||
UniqueID: "TestTR5",
|
||||
ThresholdType: utils.TRIGGER_MAX_BALANCE,
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.SMS),
|
||||
Directions: utils.StringMapPointer(utils.NewStringMap(utils.OUT, utils.IN)),
|
||||
Weight: utils.Float64Pointer(10),
|
||||
@@ -459,7 +459,7 @@ func TestUnitCountersResetCounterById(t *testing.T) {
|
||||
t.Errorf("Error Initializing adding unit counters: %v", len(a.UnitCounters))
|
||||
}
|
||||
a.UnitCounters.resetCounters(&Action{
|
||||
Balance: &BalancePointer{
|
||||
Balance: &BalanceFilter{
|
||||
Type: utils.StringPointer(utils.MONETARY),
|
||||
Id: utils.StringPointer("TestTR11"),
|
||||
},
|
||||
|
||||
@@ -91,6 +91,7 @@ const (
|
||||
ROUNDING_MIDDLE = "*middle"
|
||||
ROUNDING_DOWN = "*down"
|
||||
ANY = "*any"
|
||||
UNLIMITED = "*unlimited"
|
||||
ZERO = "*zero"
|
||||
ASAP = "*asap"
|
||||
USERS = "*users"
|
||||
|
||||
Reference in New Issue
Block a user