diff --git a/engine/eventrequest_test.go b/engine/eventrequest_test.go index ace86336d..fbf7fc41a 100644 --- a/engine/eventrequest_test.go +++ b/engine/eventrequest_test.go @@ -28,9 +28,9 @@ import ( "github.com/cgrates/cgrates/utils" ) -func TestAgentRequestParseFieldDateTime(t *testing.T) { +func TestEventRequestParseFieldDateTimeDaily(t *testing.T) { tntTpl := config.NewRSRParsersMustCompile("*daily", utils.InfieldSep) - AgentReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) fctTemp := &config.FCTemplate{ Type: utils.MetaDateTime, Value: config.NewRSRParsersMustCompile("*daily", utils.InfieldSep), @@ -38,7 +38,7 @@ func TestAgentRequestParseFieldDateTime(t *testing.T) { Timezone: "", } - result, err := AgentReq.ParseField(fctTemp) + result, err := EventReq.ParseField(fctTemp) if err != nil { t.Errorf("Expected %v but received %v", nil, err) } @@ -56,3 +56,235 @@ func TestAgentRequestParseFieldDateTime(t *testing.T) { t.Errorf("Expected %v but received %v", expected, result) } } + +func TestEventReqParseFieldDateTimeTimeZone(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile("*daily", utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile("*daily", utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "Local", + } + + result, err := EventReq.ParseField(fctTemp) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + + expected, err := utils.ParseTimeDetectLayout("*daily", utils.FirstNonEmpty(fctTemp.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone)) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + strRes := fmt.Sprintf("%v", result) + finRes, err := time.Parse("“Mon Jan _2 15:04:05 2006”", strRes) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + if !reflect.DeepEqual(finRes.Day(), expected.Day()) { + t.Errorf("Expected %v but received %v", finRes.Day(), expected.Day()) + } +} + +func TestEventReqParseFieldDateTimeMonthly(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile("*monthly", utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile("*monthly", utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "Local", + } + result, err := EventReq.ParseField(fctTemp) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + + expected, err := utils.ParseTimeDetectLayout("*monthly", utils.FirstNonEmpty(fctTemp.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone)) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + strRes := fmt.Sprintf("%v", result) + finRes, err := time.Parse("“Mon Jan _2 15:04:05 2006”", strRes) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + if !reflect.DeepEqual(finRes.Month(), expected.Month()) { + t.Errorf("Expected %v but received %v", finRes.Month(), expected.Month()) + } +} + +func TestEventReqParseFieldDateTimeMonthlyEstimated(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile("*monthly_estimated", utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile("*monthly_estimated", utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "Local", + } + result, err := EventReq.ParseField(fctTemp) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + + expected, err := utils.ParseTimeDetectLayout("*monthly_estimated", utils.FirstNonEmpty(fctTemp.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone)) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + strRes := fmt.Sprintf("%v", result) + finRes, err := time.Parse("“Mon Jan _2 15:04:05 2006”", strRes) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + if !reflect.DeepEqual(finRes.Month(), expected.Month()) { + t.Errorf("Expected %v but received %v", finRes.Month(), expected.Month()) + } +} + +func TestEventReqParseFieldDateTimeYearly(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile("*yearly", utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile("*yearly", utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "Local", + } + result, err := EventReq.ParseField(fctTemp) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + + expected, err := utils.ParseTimeDetectLayout("*yearly", utils.FirstNonEmpty(fctTemp.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone)) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + strRes := fmt.Sprintf("%v", result) + finRes, err := time.Parse("“Mon Jan _2 15:04:05 2006”", strRes) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + if !reflect.DeepEqual(finRes.Year(), expected.Year()) { + t.Errorf("Expected %v but received %v", finRes.Year(), expected.Year()) + } +} + +func TestEventReqParseFieldDateTimeMetaUnlimited(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile(utils.MetaUnlimited, utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile(utils.MetaUnlimited, utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "Local", + } + result, err := EventReq.ParseField(fctTemp) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + + expected, err := utils.ParseTimeDetectLayout(utils.MetaUnlimited, utils.FirstNonEmpty(fctTemp.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone)) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + strRes := fmt.Sprintf("%v", result) + finRes, err := time.Parse("“Mon Jan _2 15:04:05 2006”", strRes) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + if !reflect.DeepEqual(finRes.Day(), expected.Day()) { + t.Errorf("Expected %v but received %v", finRes.Day(), expected.Day()) + } +} + +func TestEventReqParseFieldDateTimeEmpty(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile("", utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile("", utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "Local", + } + result, err := EventReq.ParseField(fctTemp) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + + expected, err := utils.ParseTimeDetectLayout("", utils.FirstNonEmpty(fctTemp.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone)) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + strRes := fmt.Sprintf("%v", result) + finRes, err := time.Parse("“Mon Jan _2 15:04:05 2006”", strRes) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + if !reflect.DeepEqual(finRes.Day(), expected.Day()) { + t.Errorf("Expected %v but received %v", finRes.Day(), expected.Day()) + } +} + +func TestEventReqParseFieldDateTimeMonthEnd(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile("*month_endTest", utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile("*month_endTest", utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "Local", + } + result, err := EventReq.ParseField(fctTemp) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + + expected, err := utils.ParseTimeDetectLayout("*month_endTest", utils.FirstNonEmpty(fctTemp.Timezone, config.CgrConfig().GeneralCfg().DefaultTimezone)) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + strRes := fmt.Sprintf("%v", result) + finRes, err := time.Parse("“Mon Jan _2 15:04:05 2006”", strRes) + if err != nil { + t.Errorf("Expected %v but received %v", nil, err) + } + if !reflect.DeepEqual(finRes.Day(), expected.Day()) { + t.Errorf("Expected %v but received %v", finRes.Day(), expected.Day()) + } +} + +func TestAgentRequestParseFieldDateTimeError(t *testing.T) { + tntTpl := config.NewRSRParsersMustCompile("*month_endTest", utils.InfieldSep) + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, tntTpl, "", "", nil, nil) + fctTemp := &config.FCTemplate{ + Type: utils.MetaDateTime, + Value: config.NewRSRParsersMustCompile("*month_endTest", utils.InfieldSep), + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "/", + } + _, err := EventReq.ParseField(fctTemp) + expected := "time: invalid location name" + if err == nil || err.Error() != expected { + t.Errorf("Expected <%+v> but received <%+v>", expected, err) + } +} + +func TestEventReqParseFieldDateTimeError2(t *testing.T) { + prsr, err := config.NewRSRParsersFromSlice([]string{"2.", "~*req.CGRID<~*opts.Converter>"}) + if err != nil { + t.Fatal(err) + } + EventReq := NewEventRequest(utils.MapStorage{}, nil, nil, prsr, "", "", nil, nil) + fctTemp := &config.FCTemplate{Type: utils.MetaDateTime, + Value: prsr, + Layout: "“Mon Jan _2 15:04:05 2006”", + Timezone: "/", + } + + _, err = EventReq.ParseField(fctTemp) + expected := utils.ErrNotFound + if err == nil || err != expected { + t.Errorf("Expected <%+v> but received <%+v>", expected, err) + } +}