diff --git a/engine/action_test.go b/engine/action_test.go
new file mode 100644
index 000000000..60c64c905
--- /dev/null
+++ b/engine/action_test.go
@@ -0,0 +1,123 @@
+/*
+Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
+Copyright (C) ITsysCOM GmbH
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see
+*/
+
+package engine
+
+import "testing"
+
+func TestActionErrors(t *testing.T) {
+ tests := []struct {
+ name string
+ rcv string
+ exp string
+ }{
+ {
+ name: "resetTriggersAction",
+ rcv: resetTriggersAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: setRecurrentAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: unsetRecurrentAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: allowNegativeAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: denyNegativeAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: resetAccountAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: topupResetAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: debitResetAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: debitAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: resetCountersAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: genericDebit(nil, nil, false).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: enableAccountAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: disableAccountAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: topupZeroNegativeAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: setExpiryAction(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: publishAccount(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ {
+ name: "resetTriggersAction",
+ rcv: publishBalance(nil, nil, nil, nil).Error(),
+ exp: "nil account",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if tt.rcv != tt.exp {
+ t.Errorf("expected %s, receives %s", tt.exp, tt.rcv)
+ }
+ })
+ }
+}
diff --git a/engine/callcost_test.go b/engine/callcost_test.go
index 6eca80429..ed8960031 100644
--- a/engine/callcost_test.go
+++ b/engine/callcost_test.go
@@ -282,17 +282,17 @@ func TestCallCostToDataCost(t *testing.T) {
Cost: cc.Cost,
deductConnectFee: cc.deductConnectFee,
DataSpans: []*DataSpan{{
- DataStart: 0,
- DataEnd: 0,
- Cost: 0,
- ratingInfo: nil,
- RateInterval: nil,
- DataIndex: 0,
- Increments: []*DataIncrement{{}},
- MatchedSubject: "",
- MatchedPrefix: "",
- MatchedDestId: "",
- RatingPlanId: "",
+ DataStart: 0,
+ DataEnd: 0,
+ Cost: 0,
+ ratingInfo: nil,
+ RateInterval: nil,
+ DataIndex: 0,
+ Increments: []*DataIncrement{{}},
+ MatchedSubject: "",
+ MatchedPrefix: "",
+ MatchedDestId: "",
+ RatingPlanId: "",
}},
}
@@ -316,4 +316,4 @@ func TestCallCostUpdateCost(t *testing.T) {
if cc.deductConnectFee != true {
t.Error("didn't update")
}
-}
\ No newline at end of file
+}
diff --git a/engine/eventcost_test.go b/engine/eventcost_test.go
index 30f9f5639..9320f2f78 100644
--- a/engine/eventcost_test.go
+++ b/engine/eventcost_test.go
@@ -3066,3 +3066,244 @@ func TestECFieldAsInterfaceNilEventCost(t *testing.T) {
t.Fatalf("Expected error:%s, received: %v", utils.ErrNotFound.Error(), err)
}
}
+
+func TestEventCostFieldAsInterface(t *testing.T) {
+ ec := EventCost{
+ cache: utils.MapStorage{"test": "val1"},
+ }
+
+ _, err := ec.FieldAsInterface([]string{"test", "val1"})
+
+ if err != nil {
+ if err.Error() != "WRONG_PATH" {
+ t.Error(err)
+ }
+ }
+
+ ec = EventCost{
+ cache: utils.MapStorage{"test[": nil},
+ }
+
+ _, err = ec.FieldAsInterface([]string{"test["})
+
+ if err != nil {
+ if err.Error() != "NOT_FOUND" {
+ t.Error(err)
+ }
+ }
+}
+
+func TestEventCostfieldAsInterface(t *testing.T) {
+ td := 1 * time.Second
+ fl := 1.2
+ as := AccountSummary{ID: "test"}
+
+ ec := EventCost{
+ CGRID: "test",
+ RunID: "test",
+ StartTime: time.Date(1999, 8, 28, 1, 12, 34, 1334, time.Local),
+ Usage: &td,
+ Cost: &fl,
+ Charges: []*ChargingInterval{{RatingID: "test"}},
+ AccountSummary: &as,
+ Rating: Rating{},
+ Accounting: Accounting{},
+ RatingFilters: RatingFilters{},
+ Rates: ChargedRates{},
+ Timings: ChargedTimings{},
+ }
+
+ tests := []struct {
+ name string
+ arg []string
+ val any
+ err string
+ }{
+ {
+ name: "get path index error check",
+ arg: []string{"test"},
+ val: nil,
+ err: "unsupported field prefix: ",
+ },
+ {
+ name: "case charges",
+ arg: []string{"Charges"},
+ val: []*ChargingInterval{{RatingID: "test"}},
+ err: "",
+ },
+ {
+ name: "case StartTime",
+ arg: []string{"StartTime"},
+ val: time.Date(1999, 8, 28, 1, 12, 34, 1334, time.Local),
+ err: "",
+ },
+ {
+ name: "case Usage",
+ arg: []string{"Usage"},
+ val: &td,
+ err: "",
+ },
+ {
+ name: "case Cost",
+ arg: []string{"Cost"},
+ val: &fl,
+ err: "",
+ },
+ {
+ name: "case charges error",
+ arg: []string{"Charges", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case CGRID error",
+ arg: []string{"CGRID", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case RunID error",
+ arg: []string{"RunID", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case StartTime error",
+ arg: []string{"StartTime", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case Usage error",
+ arg: []string{"Usage", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case Cost error",
+ arg: []string{"Cost", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case AccountSummary error",
+ arg: []string{"AccountSummary"},
+ val: &as,
+ err: "",
+ },
+ {
+ name: "case Timings error",
+ arg: []string{"Timings"},
+ val: ChargedTimings{},
+ err: "",
+ },
+ {
+ name: "case Timings",
+ arg: []string{"Timings", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case Rates error",
+ arg: []string{"Rates"},
+ val: ChargedRates{},
+ err: "",
+ },
+ {
+ name: "case RatingFilters error",
+ arg: []string{"RatingFilters"},
+ val: RatingFilters{},
+ err: "",
+ },
+ {
+ name: "case RatingFilters error",
+ arg: []string{"RatingFilters", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case Accounting error",
+ arg: []string{"Accounting"},
+ val: Accounting{},
+ err: "",
+ },
+ {
+ name: "case Accounting error",
+ arg: []string{"Accounting", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "case Rating error",
+ arg: []string{"Rating"},
+ val: Rating{},
+ err: "",
+ },
+ {
+ name: "case Rating error",
+ arg: []string{"Rating", "test"},
+ val: nil,
+ err: "NOT_FOUND",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ rcv, err := ec.fieldAsInterface(tt.arg)
+
+ if err != nil {
+ if err.Error() != tt.err {
+ t.Fatal(err)
+ }
+ }
+
+ if !reflect.DeepEqual(rcv, tt.val) {
+ t.Errorf("expected %v, received %v", tt.val, rcv)
+ }
+ })
+ }
+}
+
+func TestEventCostgetChargesForPath(t *testing.T) {
+ ec := EventCost{}
+ chr := ChargingInterval{}
+
+ tests := []struct {
+ name string
+ fl []string
+ chr *ChargingInterval
+ exp any
+ err string
+ }{
+ {
+ name: "nil charging interval",
+ fl: []string{},
+ chr: nil,
+ exp: nil,
+ err: "NOT_FOUND",
+ },
+ {
+ name: "nil charging interval",
+ fl: []string{},
+ chr: &chr,
+ exp: &chr,
+ err: "",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ rcv, err := ec.getChargesForPath(tt.fl, tt.chr)
+
+ if err != nil {
+ if err.Error() != tt.err {
+ t.Error(err)
+ }
+ }
+
+ if !reflect.DeepEqual(rcv, tt.exp) {
+ t.Errorf("expected %v, received %v", tt.exp, rcv)
+ }
+ })
+ }
+}