From 93e79b3b88273de3a44e358effae70edefb35906 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Thu, 23 Sep 2021 15:24:39 +0300 Subject: [PATCH] Updated filter CSV loading --- engine/model_helpers.go | 18 ++++++++--- engine/model_helpers_test.go | 61 ++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/engine/model_helpers.go b/engine/model_helpers.go index c8d398d4c..7640237ed 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -1693,6 +1693,7 @@ func (tps FilterMdls) CSVHeader() (result []string) { func (tps FilterMdls) AsTPFilter() (result []*utils.TPFilterProfile) { mst := make(map[string]*utils.TPFilterProfile) + filterRules := make(map[string]*utils.TPFilter) for _, tp := range tps { tenID := (&utils.TenantID{Tenant: tp.Tenant, ID: tp.ID}).TenantID() th, found := mst[tenID] @@ -1718,11 +1719,18 @@ func (tps FilterMdls) AsTPFilter() (result []*utils.TPFilterProfile) { if tp.Values != utils.EmptyString { vals = splitDynFltrValues(tp.Values, utils.InfieldSep) } - th.Filters = append(th.Filters, &utils.TPFilter{ - Type: tp.Type, - Element: tp.Element, - Values: vals, - }) + key := utils.ConcatenatedKey(tenID, tp.Type, tp.Element) + if f, has := filterRules[key]; has { + f.Values = append(f.Values, vals...) + } else { + f = &utils.TPFilter{ + Type: tp.Type, + Element: tp.Element, + Values: vals, + } + th.Filters = append(th.Filters, f) + filterRules[key] = f + } } mst[tenID] = th } diff --git a/engine/model_helpers_test.go b/engine/model_helpers_test.go index 7f25d7021..1fd6898ec 100644 --- a/engine/model_helpers_test.go +++ b/engine/model_helpers_test.go @@ -2651,6 +2651,67 @@ func TestTPFilterAsTPFilter2(t *testing.T) { } } +func TestTPFilterAsTPFilter3(t *testing.T) { + tps := []*FilterMdl{ + { + Tpid: "TEST_TPID", + Tenant: "cgrates.org", + ID: "Filter1", + Type: utils.MetaPrefix, + Element: "Account", + Values: "1001", + }, + { + Tpid: "TEST_TPID", + Tenant: "cgrates.org", + ID: "Filter1", + Type: utils.MetaPrefix, + Element: "Account", + Values: "1001", + }, + { + Tpid: "TEST_TPID", + Tenant: "anotherTenant", + ID: "Filter1", + Type: utils.MetaPrefix, + Element: "Account", + Values: "1010", + }, + } + eTPs := []*utils.TPFilterProfile{ + { + TPid: tps[0].Tpid, + Tenant: "cgrates.org", + ID: tps[0].ID, + Filters: []*utils.TPFilter{ + { + Type: utils.MetaPrefix, + Element: "Account", + Values: []string{"1001", "1002"}, + }, + }, + }, + { + TPid: tps[1].Tpid, + Tenant: "anotherTenant", + ID: tps[1].ID, + Filters: []*utils.TPFilter{ + { + Type: utils.MetaPrefix, + Element: "Account", + Values: []string{"1010"}, + }, + }, + }, + } + + rcvTPs := FilterMdls(tps).AsTPFilter() + sort.Strings(rcvTPs[0].Filters[0].Values) + if len(eTPs) != len(rcvTPs) { + t.Errorf("Expecting: %+v ,Received: %+v", utils.ToIJSON(eTPs), utils.ToIJSON(rcvTPs)) + } +} + func TestAPItoModelTPFilter(t *testing.T) { var th *utils.TPFilterProfile if rcv := APItoModelTPFilter(th); rcv != nil {