Compact SupplierProfile.Suppliers and update test in engine/loader_csv_test.go

This commit is contained in:
TeoV
2017-11-28 11:46:32 +02:00
committed by Dan Christian Bogos
parent 215146ea14
commit a3822fe643
2 changed files with 50 additions and 13 deletions

View File

@@ -293,6 +293,9 @@ cgrates.org,FLTR_DST_NL,*destinations,Destination,DST_NL,2014-07-29T15:00:00Z
sppProfiles = `
#Tenant,ID,FilterIDs,ActivationInterval,Sorting,SortingParams,SupplierID,SupplierFilterIDs,SupplierRatingPlanIDs,SupplierResourceIDs,SupplierStatIDs,SupplierWeight,Blocker,Weight
cgrates.org,SPP_1,FLTR_ACNT_dan;FLTR_DST_DE,2014-07-29T15:00:00Z,*lowest_cost,,supplier1,FLTR_ACNT_dan,RPL_1,ResGroup1,Stat1,10,true,20
cgrates.org,SPP_1,,,,,supplier1,,RPL_2,ResGroup2,,10,,
cgrates.org,SPP_1,,,,,supplier1,FLTR_DST_DE,RPL_3,ResGroup3,Stat2,10,,
cgrates.org,SPP_1,,,,,supplier1,,,ResGroup4,Stat3,10,,
`
)
@@ -1633,10 +1636,10 @@ func TestLoadSupplierProfiles(t *testing.T) {
Suppliers: []*utils.TPRequestSupplier{
&utils.TPRequestSupplier{
ID: "supplier1",
FilterIDs: []string{"FLTR_ACNT_dan"},
RatingPlanIDs: []string{"RPL_1"},
ResourceIDs: []string{"ResGroup1"},
StatIDs: []string{"Stat1"},
FilterIDs: []string{"FLTR_ACNT_dan", "FLTR_DST_DE"},
RatingPlanIDs: []string{"RPL_1", "RPL_2", "RPL_3"},
ResourceIDs: []string{"ResGroup1", "ResGroup2", "ResGroup3", "ResGroup4"},
StatIDs: []string{"Stat1", "Stat2", "Stat3"},
Weight: 10,
},
},

View File

@@ -2423,6 +2423,7 @@ type TpSuppliers []*TpSupplier
func (tps TpSuppliers) AsTPSuppliers() (result []*utils.TPSupplier) {
mst := make(map[string]*utils.TPSupplier)
suppliersMap := make(map[string]map[string]*utils.TPRequestSupplier)
for _, tp := range tps {
th, found := mst[tp.ID]
if !found {
@@ -2436,14 +2437,41 @@ func (tps TpSuppliers) AsTPSuppliers() (result []*utils.TPSupplier) {
}
}
if tp.SupplierID != "" {
th.Suppliers = append(th.Suppliers, &utils.TPRequestSupplier{
ID: tp.SupplierID,
FilterIDs: strings.Split(tp.SupplierFilterIDs, utils.INFIELD_SEP),
RatingPlanIDs: strings.Split(tp.SupplierRatingplanIDs, utils.INFIELD_SEP),
ResourceIDs: strings.Split(tp.SupplierResourceIDs, utils.INFIELD_SEP),
StatIDs: strings.Split(tp.SupplierStatIDs, utils.INFIELD_SEP),
Weight: tp.SupplierWeight,
})
if _, has := suppliersMap[tp.ID]; !has {
suppliersMap[tp.ID] = make(map[string]*utils.TPRequestSupplier)
}
sup, found := suppliersMap[tp.ID][tp.SupplierID]
if !found {
sup = &utils.TPRequestSupplier{
ID: tp.SupplierID,
Weight: tp.SupplierWeight,
}
}
if tp.SupplierFilterIDs != "" {
supFilterSplit := strings.Split(tp.SupplierFilterIDs, utils.INFIELD_SEP)
for _, supFilter := range supFilterSplit {
sup.FilterIDs = append(sup.FilterIDs, supFilter)
}
}
if tp.SupplierRatingplanIDs != "" {
ratingPlanSplit := strings.Split(tp.SupplierRatingplanIDs, utils.INFIELD_SEP)
for _, ratingSplit := range ratingPlanSplit {
sup.RatingPlanIDs = append(sup.RatingPlanIDs, ratingSplit)
}
}
if tp.SupplierResourceIDs != "" {
resSplit := strings.Split(tp.SupplierResourceIDs, utils.INFIELD_SEP)
for _, res := range resSplit {
sup.ResourceIDs = append(sup.ResourceIDs, res)
}
}
if tp.SupplierStatIDs != "" {
statSplit := strings.Split(tp.SupplierStatIDs, utils.INFIELD_SEP)
for _, sts := range statSplit {
sup.StatIDs = append(sup.StatIDs, sts)
}
}
suppliersMap[tp.ID][tp.SupplierID] = sup
}
if tp.SortingParams != "" {
sortingParamSplit := strings.Split(tp.SortingParams, utils.INFIELD_SEP)
@@ -2470,13 +2498,19 @@ func (tps TpSuppliers) AsTPSuppliers() (result []*utils.TPSupplier) {
th.FilterIDs = append(th.FilterIDs, filter)
}
}
mst[tp.ID] = th
}
result = make([]*utils.TPSupplier, len(mst))
i := 0
for _, th := range mst {
result[i] = th
for id, _ := range suppliersMap {
if result[i].ID == id {
for _, supdata := range suppliersMap[id] {
result[i].Suppliers = append(result[i].Suppliers, supdata)
}
}
}
i++
}
return