diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index b15a27772..58ad7f894 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -19,6 +19,7 @@ along with this program. If not, see package engine import ( + "errors" "reflect" "sort" "strings" @@ -2708,3 +2709,237 @@ func TestModelHelpersAPItoModelTPAttribute(t *testing.T) { t.Errorf("expected %v, received %v", utils.ToJSON(exp), utils.ToJSON(rcv)) } } + +func TestModelHelpersmodelEqual(t *testing.T) { + type Test struct { + Fl float64 + Nm int + Bl bool + Str string + } + tst := Test{ + Fl: fl, + Nm: nm, + Bl: bl, + Str: str, + } + type args struct { + this any + other any + } + tests := []struct { + name string + args args + exp bool + }{ + { + name: "true return", + args: args{tst, tst}, + exp: true, + }, + { + name: "false return", + args: args{nm, str}, + exp: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rcv := modelEqual(tt.args.this, tt.args.other) + + if rcv != tt.exp { + t.Errorf("received %v, expected %v", rcv, tt.exp) + } + }) + } +} + +func TestModelHelpersparamsToString(t *testing.T) { + rcv := paramsToString([]any{str, str}) + + if rcv != "test;test" { + t.Error(rcv) + } +} + +func TestModelHelpersAPItoModelTPDispatcherProfile(t *testing.T) { + tpDPP := &utils.TPDispatcherProfile{ + TPid: str, + Tenant: str, + ID: str, + Subsystems: slc, + FilterIDs: slc, + ActivationInterval: &utils.TPActivationInterval{ + ActivationTime: str, + ExpiryTime: str, + }, + Strategy: str, + StrategyParams: []any{str, str}, + Weight: fl, + Hosts: []*utils.TPDispatcherHostProfile{}, + } + + rcv := APItoModelTPDispatcherProfile(tpDPP) + exp := TPDispatcherProfiles{{ + Tpid: str, + Tenant: str, + ID: str, + Subsystems: str, + FilterIDs: str, + ActivationInterval: "test;test", + Strategy: str, + StrategyParameters: "test;test", + ConnID: "", + ConnFilterIDs: "", + ConnWeight: 0, + ConnBlocker: false, + ConnParameters: "", + Weight: fl, + }} + + if !reflect.DeepEqual(rcv, exp) { + t.Errorf("expected %v, received %v", utils.ToJSON(exp), utils.ToJSON(rcv)) + } + + rcv = APItoModelTPDispatcherProfile(nil) + + if rcv != nil { + t.Error(rcv) + } +} + +func TestModelHelpersAsTPDispatcherHosts(t *testing.T) { + tps := TPDispatcherHosts{{ + Tpid: str, + Tenant: str, + ID: str, + Address: utils.EmptyString, + Transport: str, + TLS: bl, + }, { + Tpid: str, + Tenant: str, + ID: str, + Address: str, + Transport: utils.EmptyString, + TLS: bl, + }} + + rcv := tps.AsTPDispatcherHosts() + exp := []*utils.TPDispatcherHost{{ + TPid: str, + Tenant: str, + ID: str, + Conns: []*utils.TPDispatcherHostConn{{ + Address: str, + Transport: "*json", + TLS: true, + }}, + }} + + if !reflect.DeepEqual(rcv, exp) { + t.Errorf("expected %v, received %v", utils.ToJSON(exp), utils.ToJSON(rcv)) + } +} + +func TestModelHelpersAPItoResource(t *testing.T) { + errStr := "test`" + tpRL := &utils.TPResourceProfile{ + TPid: str, + Tenant: str, + ID: str, + FilterIDs: slc, + ActivationInterval: &utils.TPActivationInterval{ + ActivationTime: str, + ExpiryTime: str, + }, + UsageTTL: errStr, + Limit: str, + AllocationMessage: str, + Blocker: bl, + Stored: bl, + Weight: fl, + ThresholdIDs: slc, + } + + _, err := APItoResource(tpRL, "") + + if err != nil { + if err.Error() != errors.New("time: invalid duration "+`"`+errStr+`"`).Error() { + t.Error(err) + } + } + + tpRL.UsageTTL = utils.EmptyString + + _, err = APItoResource(tpRL, "test") + + if err != nil { + if err.Error() != "unknown time zone test" { + t.Error(err) + } + } + + tpRL.ActivationInterval = nil + _, err = APItoResource(tpRL, "") + + if err != nil { + if err.Error() != `strconv.ParseFloat: parsing "test": invalid syntax` { + t.Error(err) + } + } +} + +func TestModelHelpersAPItoStats(t *testing.T) { + errStr := "test`" + tpST := &utils.TPStatProfile{ + TTL: errStr, + } + + _, err := APItoStats(tpST, "") + + if err != nil { + if err.Error() != errors.New("time: invalid duration "+`"`+errStr+`"`).Error() { + t.Error(err) + } + } + + tpST.TTL = utils.EmptyString + + _, err = APItoStats(tpST, "test") + + if err != nil { + if err.Error() != "unknown time zone test" { + t.Error(err) + } + } +} + +func TestModelHelpersAPItoThresholdProfile(t *testing.T) { + errStr := "test`" + tpST := &utils.TPThresholdProfile{ + MinSleep: errStr, + ActivationInterval: &utils.TPActivationInterval{ + ActivationTime: str, + ExpiryTime: str, + }, + } + + _, err := APItoThresholdProfile(tpST, "") + + if err != nil { + if err.Error() != errors.New("time: invalid duration "+`"`+errStr+`"`).Error() { + t.Error(err) + } + } + + tpST.MinSleep = "" + _, err = APItoThresholdProfile(tpST, "test") + + if err != nil { + if err.Error() != "unknown time zone test" { + t.Error(err) + } + } +} diff --git a/engine/models_test.go b/engine/models_test.go new file mode 100644 index 000000000..df33d862d --- /dev/null +++ b/engine/models_test.go @@ -0,0 +1,151 @@ +/* +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 ( + "reflect" + "testing" + + "github.com/cgrates/cgrates/utils" +) + +func TestModelsSetAccountActionId(t *testing.T) { + aa := &TpAccountAction{} + + err := aa.SetAccountActionId(str) + + if err != nil { + if err.Error() != "Wrong TP Account Action Id: test" { + t.Error(err) + } + } + + err = aa.SetAccountActionId("test:test:test") + if err != nil { + t.Error(err) + } + + if aa.Loadid != str && aa.Tenant != str && aa.Account != str { + t.Error("didn't set account action id") + } +} + +func TestModelsGetAccountActionId(t *testing.T) { + aa := &TpAccountAction{} + + err = aa.SetAccountActionId("test:test:test") + if err != nil { + t.Error(err) + } + + rcv := aa.GetAccountActionId() + exp := "test:test" + + if rcv != exp { + t.Errorf("received %s, expected %s", rcv, exp) + } +} + +func TestModelsTableName(t *testing.T) { + tn := CDRsql{} + + rcv := tn.TableName() + + if rcv != utils.CDRsTBL { + t.Error(rcv) + } +} + +func TestModelsAsMapStringInterface(t *testing.T) { + tn := CDRsql{ + ID: 1, + Cgrid: str, + RunID: str, + OriginHost: str, + Source: str, + OriginID: str, + TOR: str, + RequestType: str, + Tenant: str, + Category: str, + Account: str, + Subject: str, + Destination: str, + SetupTime: tm, + AnswerTime: tm, + Usage: 1, + ExtraFields: str, + CostSource: str, + Cost: fl, + CostDetails: str, + ExtraInfo: str, + CreatedAt: tm, + UpdatedAt: tm, + DeletedAt: &tm, + } + + rcv := tn.AsMapStringInterface() + exp := make(map[string]any) + exp["cgrid"] = tn.Cgrid + exp["run_id"] = tn.RunID + exp["origin_host"] = tn.OriginHost + exp["source"] = tn.Source + exp["origin_id"] = tn.OriginID + exp["tor"] = tn.TOR + exp["request_type"] = tn.RequestType + exp["tenant"] = tn.Tenant + exp["category"] = tn.Category + exp["account"] = tn.Account + exp["subject"] = tn.Subject + exp["destination"] = tn.Destination + exp["setup_time"] = tn.SetupTime + exp["answer_time"] = tn.AnswerTime + exp["usage"] = tn.Usage + exp["extra_fields"] = tn.ExtraFields + exp["cost_source"] = tn.CostSource + exp["cost"] = tn.Cost + exp["cost_details"] = tn.CostDetails + exp["extra_info"] = tn.ExtraInfo + exp["created_at"] = tn.CreatedAt + exp["updated_at"] = tn.UpdatedAt + + if !reflect.DeepEqual(rcv, exp) { + t.Errorf("received %s, expected %s", rcv, exp) + } +} + +func TestModelsSessionCostsSQLTableName(t *testing.T) { + tn := SessionCostsSQL{} + + rcv := tn.TableName() + + if rcv != utils.SessionCostsTBL { + t.Error(rcv) + } +} + +func TestModelsTBLVersionTableName(t *testing.T) { + tn := TBLVersion{} + + rcv := tn.TableName() + + if rcv != utils.TBLVersions { + t.Error(rcv) + } +}