From 1866cb1e31126b6dda06f0db3dfbd0d44c0d50d4 Mon Sep 17 00:00:00 2001 From: 3timeslazy Date: Sun, 18 Nov 2018 19:00:52 +0300 Subject: [PATCH] fixed a bug when adding/subtrating did not take an amount of units (#181) --- pkg/stdlib/datetime/add_subtract.go | 8 +-- pkg/stdlib/datetime/add_subtract_test.go | 72 ++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 4 deletions(-) diff --git a/pkg/stdlib/datetime/add_subtract.go b/pkg/stdlib/datetime/add_subtract.go index 777641ba..fc80b5aa 100644 --- a/pkg/stdlib/datetime/add_subtract.go +++ b/pkg/stdlib/datetime/add_subtract.go @@ -109,13 +109,13 @@ func addUnit(dt values.DateTime, amount int, unit string) (values.DateTime, erro case "d", "day", "days": return values.NewDateTime(dt.AddDate(0, 0, amount*1)), nil case "h", "hour", "hours": - return values.NewDateTime(dt.Add(time.Hour)), nil + return values.NewDateTime(dt.Add(time.Duration(amount) * time.Hour)), nil case "i", "minute", "minutes": - return values.NewDateTime(dt.Add(time.Minute)), nil + return values.NewDateTime(dt.Add(time.Duration(amount) * time.Minute)), nil case "s", "second", "seconds": - return values.NewDateTime(dt.Add(time.Second)), nil + return values.NewDateTime(dt.Add(time.Duration(amount) * time.Second)), nil case "f", "millisecond", "milliseconds": - return values.NewDateTime(dt.Add(time.Millisecond)), nil + return values.NewDateTime(dt.Add(time.Duration(amount) * time.Millisecond)), nil } return values.DateTime{}, errors.Errorf("no such unit '%s'", unit) } diff --git a/pkg/stdlib/datetime/add_subtract_test.go b/pkg/stdlib/datetime/add_subtract_test.go index 8a6e1015..83077d3c 100644 --- a/pkg/stdlib/datetime/add_subtract_test.go +++ b/pkg/stdlib/datetime/add_subtract_test.go @@ -111,6 +111,42 @@ func TestDateAdd(t *testing.T) { values.NewString("year"), }, }, + &testCase{ + Name: "+2 hours", + Expected: mustDefaultLayoutDt("1999-02-07T17:04:05Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(2), + values.NewString("h"), + }, + }, + &testCase{ + Name: "+20 minutes", + Expected: mustDefaultLayoutDt("1999-02-07T15:24:05Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(20), + values.NewString("i"), + }, + }, + &testCase{ + Name: "+30 seconds", + Expected: mustDefaultLayoutDt("1999-02-07T15:04:35Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(30), + values.NewString("s"), + }, + }, + &testCase{ + Name: "+1000 milliseconds", + Expected: mustDefaultLayoutDt("1999-02-07T15:04:06Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(1000), + values.NewString("f"), + }, + }, } for _, tc := range tcs { @@ -214,6 +250,42 @@ func TestDateSubtract(t *testing.T) { values.NewString("year"), }, }, + &testCase{ + Name: "-2 hours", + Expected: mustDefaultLayoutDt("1999-02-07T13:04:05Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(2), + values.NewString("h"), + }, + }, + &testCase{ + Name: "-20 minutes", + Expected: mustDefaultLayoutDt("1999-02-07T14:44:05Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(20), + values.NewString("i"), + }, + }, + &testCase{ + Name: "-30 seconds", + Expected: mustDefaultLayoutDt("1999-02-07T15:03:35Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(30), + values.NewString("s"), + }, + }, + &testCase{ + Name: "-1000 milliseconds", + Expected: mustDefaultLayoutDt("1999-02-07T15:04:04Z"), + Args: []core.Value{ + mustDefaultLayoutDt("1999-02-07T15:04:05Z"), + values.NewInt(1000), + values.NewString("f"), + }, + }, } for _, tc := range tcs {