diff --git a/apis/loaders_it_test.go b/apis/loaders_it_test.go index 9f029c73a..84e9de8e4 100644 --- a/apis/loaders_it_test.go +++ b/apis/loaders_it_test.go @@ -254,6 +254,8 @@ cgrates.org,RP1,,,,,,RT_WEEKEND,,,,true,,0.067,0.03,, cgrates.org,RP1,,,,,,RT_WEEKEND,,"* * * * 0,6",;10,false,0s,0.089,0.06,1m,1s cgrates.org,RP1,,,,,,RT_CHRISTMAS,,* * 24 12 *,;30,false,0s,0.0564,0.06,1m,1s cgrates.org,RP1,,,,,,RT_CHRISTMAS,,,,true,,,,, +cgrates.org,RP2,*string:~*req.Account:1001;*string:~*req.Account:1001;*string:~*req.Account:1002;*string:~*req.Account:1001;*string:~*req.Account:1003,,,,,,,,,,,,,, +cgrates.org,RP2,*string:~*req.Account:1003;*string:~*req.Account:1004,,,,,,,,,,,,,, cgrates.org,RP2,,,,,,RT_WEEK,,,,,1m,1.234,0.06,1m,1s cgrates.org,RP2,*string:~*req.Subject:1002,;10,0.2,0.4,*free,RT_WEEK,,"* * * * 1-5",fltr1;20,false,0s,0,0.24,2m,30s `); err != nil { @@ -898,9 +900,10 @@ func testLoadersGetRateProfiles(t *testing.T) { }, }, { - Tenant: "cgrates.org", - ID: "RP2", - FilterIDs: []string{"*string:~*req.Subject:1002"}, + Tenant: "cgrates.org", + ID: "RP2", + FilterIDs: []string{"*string:~*req.Account:1001", "*string:~*req.Account:1002", "*string:~*req.Account:1001", + "*string:~*req.Account:1003", "*string:~*req.Account:1004", "*string:~*req.Subject:1002"}, Weights: utils.DynamicWeights{ { Weight: 10, diff --git a/loaders/loader.go b/loaders/loader.go index 722d90757..8ab327405 100644 --- a/loaders/loader.go +++ b/loaders/loader.go @@ -24,6 +24,7 @@ import ( "io" "os" "path" + "slices" "time" "github.com/cgrates/birpc/context" @@ -104,6 +105,7 @@ func setToDB(ctx *context.Context, dm *engine.DataManager, lType string, data pr return dm.SetChargerProfile(ctx, data.(*utils.ChargerProfile), withIndex) case utils.MetaRateProfiles: rpl := data.(*utils.RateProfile) + rpl.FilterIDs = slices.Compact(rpl.FilterIDs) if ratesPartial { err = dm.SetRateProfile(ctx, rpl, false, true) } else { diff --git a/loaders/loader_test.go b/loaders/loader_test.go index 89c520bfb..9f8ec2d0c 100644 --- a/loaders/loader_test.go +++ b/loaders/loader_test.go @@ -1454,8 +1454,8 @@ func TestSetToDBRateProfileDuplicateSequentialFilterIDs(t *testing.T) { } expectedFilterIDs := []string{ - "*string:~*req.Account:1001", "*string:~*req.Account:1001", - "*string:~*req.Subject:1002", "*string:~*req.Subject:1002", "*string:~*req.Subject:1002", + "*string:~*req.Account:1001", + "*string:~*req.Subject:1002", "*string:~*req.Destination:1001", } @@ -1463,8 +1463,8 @@ func TestSetToDBRateProfileDuplicateSequentialFilterIDs(t *testing.T) { t.Errorf("Expected FilterIDs after setToDB: %v, received: %v", expectedFilterIDs, rp.FilterIDs) } - if len(rp.FilterIDs) != 6 { - t.Errorf("Expected 6 FilterIDs after compacting, got %d", len(rp.FilterIDs)) + if len(rp.FilterIDs) != 3 { + t.Errorf("Expected 3 FilterIDs after compacting, got %d", len(rp.FilterIDs)) } retrieved, err := dm.GetRateProfile(context.Background(), "cgrates.org", "RP1", true, true, utils.NonTransactional)