diff options
author | matthieu <matthieu.cneude@gmail.com> | 2020-06-01 17:54:05 +0200 |
---|---|---|
committer | matthieu <matthieu.cneude@gmail.com> | 2020-06-01 17:54:05 +0200 |
commit | b43eb6ee0079e44b04ba38dd1b3db9fa83b0271b (patch) | |
tree | 8a5f6892501658623f91ceb60996978055a8fb4b | |
parent | 0e320c9ce6da3f21987a7d79090813b08f3ba1ee (diff) |
Add more tests
-rw-r--r-- | internal/ga_widget.go | 90 | ||||
-rw-r--r-- | internal/ga_widget_test.go | 127 | ||||
-rw-r--r-- | internal/host_widget.go (renamed from internal/remote_host_widget.go) | 54 |
3 files changed, 199 insertions, 72 deletions
diff --git a/internal/ga_widget.go b/internal/ga_widget.go index 1df5db2..132ffd8 100644 --- a/internal/ga_widget.go +++ b/internal/ga_widget.go @@ -90,47 +90,8 @@ func (g *gaWidget) CreateWidgets(widget Widget, tui *Tui) (f func() error, err e return } -func ExtractTimeRange(widgetOptions map[string]string) (sd time.Time, ed time.Time, err error) { - startDate := "7_days_ago" - if _, ok := widgetOptions[optionStartDate]; ok { - startDate = widgetOptions[optionStartDate] - } - - endDate := "today" - if _, ok := widgetOptions[optionEndDate]; ok { - endDate = widgetOptions[optionEndDate] - } - - sd, ed, err = platform.ConvertDates(time.Now(), startDate, endDate) - if err != nil { - return time.Time{}, time.Time{}, err - } - - return -} - -func ExtractDimension(widgetOptions map[string]string) (dimensions []string) { - dimensions = []string{} - if _, ok := widgetOptions[optionDimensions]; ok { - if len(widgetOptions[optionDimensions]) > 0 { - dimensions = strings.Split(strings.TrimSpace(widgetOptions[optionDimensions]), ",") - } - } - - return -} - -func ExtractMetric(widgetOptions map[string]string) (metric string) { - metric = "sessions" - if _, ok := widgetOptions[optionMetric]; ok { - metric = widgetOptions[optionMetric] - } - - return -} - func (g *gaWidget) totalMetric(widget Widget) (f func() error, err error) { - startDate, endDate, err := ExtractTimeRange(widget.Options) + startDate, endDate, err := ExtractTimeRange(time.Now(), widget.Options) if err != nil { return nil, err } @@ -265,7 +226,7 @@ func (g *gaWidget) barMetric(widget Widget, xHeader uint16) (f func() error, err } } - startDate, endDate, err := ExtractTimeRange(widget.Options) + startDate, endDate, err := ExtractTimeRange(time.Now(), widget.Options) if err != nil { return nil, err } @@ -295,7 +256,7 @@ func (g *gaWidget) barMetric(widget Widget, xHeader uint16) (f func() error, err TimePeriod: timePeriod, Global: global, Metrics: []string{ExtractMetric(widget.Options)}, - Dimensions: ExtractDimension(widget.Options), + Dimensions: ExtractDimensions(widget.Options), Filters: filters, XHeaders: xHeader, }, @@ -342,7 +303,7 @@ func (g *gaWidget) table(widget Widget, firstHeader string) (f func() error, err } } - startDate, endDate, err := ExtractTimeRange(widget.Options) + startDate, endDate, err := ExtractTimeRange(time.Now(), widget.Options) if err != nil { return nil, err } @@ -466,7 +427,7 @@ func (g *gaWidget) stackedBarDevices(widget Widget) (f func() error, err error) func (g *gaWidget) stackedBar(widget Widget) (f func() error, err error) { // defaults - startDate, endDate, err := ExtractTimeRange(widget.Options) + startDate, endDate, err := ExtractTimeRange(time.Now(), widget.Options) if err != nil { return nil, err } @@ -483,7 +444,7 @@ func (g *gaWidget) stackedBar(widget Widget) (f func() error, err error) { EndDate: endDate.Format(gaTimeFormat), TimePeriod: timePeriod, Metrics: []string{ExtractMetric(widget.Options)}, - Dimensions: ExtractDimension(widget.Options), + Dimensions: ExtractDimensions(widget.Options), }, ) if err != nil { @@ -531,3 +492,42 @@ func (g *gaWidget) stackedBar(widget Widget) (f func() error, err error) { return } + +func ExtractTimeRange(base time.Time, widgetOptions map[string]string) (sd time.Time, ed time.Time, err error) { + startDate := "7_days_ago" + if _, ok := widgetOptions[optionStartDate]; ok { + startDate = widgetOptions[optionStartDate] + } + + endDate := "today" + if _, ok := widgetOptions[optionEndDate]; ok { + endDate = widgetOptions[optionEndDate] + } + + sd, ed, err = platform.ConvertDates(base, startDate, endDate) + if err != nil { + return time.Time{}, time.Time{}, err + } + + return +} + +func ExtractDimensions(widgetOptions map[string]string) (dimensions []string) { + dimensions = []string{} + if _, ok := widgetOptions[optionDimensions]; ok { + if len(widgetOptions[optionDimensions]) > 0 { + dimensions = strings.Split(strings.TrimSpace(widgetOptions[optionDimensions]), ",") + } + } + + return +} + +func ExtractMetric(widgetOptions map[string]string) (metric string) { + metric = "sessions" + if _, ok := widgetOptions[optionMetric]; ok { + metric = widgetOptions[optionMetric] + } + + return +} diff --git a/internal/ga_widget_test.go b/internal/ga_widget_test.go index 3bd3fa3..b6518da 100644 --- a/internal/ga_widget_test.go +++ b/internal/ga_widget_test.go @@ -3,6 +3,7 @@ package internal import ( "reflect" "testing" + "time" ) func Test_formatTable(t *testing.T) { @@ -44,3 +45,129 @@ func Test_formatTable(t *testing.T) { }) } } + +func Test_ExtractDimensions(t *testing.T) { + testCases := []struct { + name string + expected []string + options map[string]string + }{ + { + name: "no dimension in option", + expected: []string{}, + options: map[string]string{}, + }, + { + name: "one dimension in option", + expected: []string{"dimension"}, + options: map[string]string{optionDimensions: "dimension"}, + }, + { + name: "multiple dimensions", + expected: []string{"dimension", "super", "extra"}, + options: map[string]string{optionDimensions: "dimension,super,extra"}, + }, + { + name: "wrong format", + expected: []string{"dimension super extra"}, + options: map[string]string{optionDimensions: "dimension super extra"}, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actual := ExtractDimensions(tc.options) + + if !reflect.DeepEqual(actual, tc.expected) { + t.Errorf("Expected %v, actual %v", tc.expected, actual) + } + }) + } +} + +func Test_ExtractMetric(t *testing.T) { + testCases := []struct { + name string + expected string + options map[string]string + }{ + { + name: "no metric in option", + expected: "sessions", + options: map[string]string{}, + }, + { + name: "one metric in option", + expected: "metric", + options: map[string]string{optionMetric: "metric"}, + }, + { + name: "wrong format with comma delimiters", + expected: "metric,lala", + options: map[string]string{optionMetric: "metric,lala"}, + }, + { + name: "wrong format with space delimiters", + expected: "metric lala", + options: map[string]string{optionMetric: "metric lala"}, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actual := ExtractMetric(tc.options) + + if !reflect.DeepEqual(actual, tc.expected) { + t.Errorf("Expected %v, actual %v", tc.expected, actual) + } + }) + } +} + +func Test_ExtractTimeRange(t *testing.T) { + testCases := []struct { + name string + expectedStartDate time.Time + expectedEndDate time.Time + options map[string]string + base time.Time + wantErr bool + }{ + { + name: "no time, 7 days ago by default", + base: time.Date(2020, 5, 5, 0, 0, 0, 0, time.Local), + expectedStartDate: time.Date(2020, 4, 28, 0, 0, 0, 0, time.Local), + expectedEndDate: time.Date(2020, 5, 5, 0, 0, 0, 0, time.Local), + options: map[string]string{}, + wantErr: false, + }, + { + name: "this month", + base: time.Date(2020, 5, 5, 0, 0, 0, 0, time.Local), + expectedStartDate: time.Date(2020, 5, 1, 0, 0, 0, 0, time.Local), + expectedEndDate: time.Date(2020, 5, 31, 0, 0, 0, 0, time.Local), + options: map[string]string{ + "start_date": "this_month", + "end_date": "this_month", + }, + wantErr: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + sd, ed, err := ExtractTimeRange(tc.base, tc.options) + if (err != nil) != tc.wantErr { + t.Errorf("Error '%v' even if wantErr is %t", err, tc.wantErr) + return + } + + if tc.wantErr == false && !sd.Equal(tc.expectedStartDate) { + t.Errorf("Expected start date %v, actual %v", tc.expectedStartDate, sd) + } + if tc.wantErr == false && !ed.Equal(tc.expectedEndDate) { + t.Errorf("Expected end date %v, actual %v", tc.expectedEndDate, ed) + } + }) + } +} diff --git a/internal/remote_host_widget.go b/internal/host_widget.go index d13d5e5..2a7ae4e 100644 --- a/internal/remote_host_widget.go +++ b/internal/host_widget.go @@ -125,7 +125,7 @@ func (ms *HostWidget) boxUptime(widget Widget) (f func() error, err error) { } f = func() error { - return ms.tui.AddTextBox(formatSeconds(time.Duration(uptime)), title, widget.Options) + return ms.tui.AddTextBox(FormatSeconds(time.Duration(uptime)), title, widget.Options) } return @@ -218,32 +218,6 @@ func (ms *HostWidget) barRates(widget Widget) (f func() error, err error) { return } -func formatSeconds(dur time.Duration) string { - dur = dur - (dur % time.Second) - var days int - for dur.Hours() > 24.0 { - days++ - dur -= 24 * time.Hour - } - for dur.Hours() > 24.0 { - days++ - dur -= 24 * time.Hour - } - - s1 := dur.String() - s2 := "" - if days > 0 { - s2 = fmt.Sprintf("%dd ", days) - } - for _, ch := range s1 { - s2 += string(ch) - if ch == 'h' || ch == 'm' { - s2 += " " - } - } - return s2 -} - func (ms *HostWidget) boxNetIO(widget Widget) (f func() error, err error) { unit := "kb" if _, ok := widget.Options[optionUnit]; ok { @@ -383,3 +357,29 @@ func (ms *HostWidget) table(widget Widget) (f func() error, err error) { return } + +func FormatSeconds(dur time.Duration) string { + dur = dur - (dur % time.Second) + var days int + for dur.Hours() > 24.0 { + days++ + dur -= 24 * time.Hour + } + for dur.Hours() > 24.0 { + days++ + dur -= 24 * time.Hour + } + + s1 := dur.String() + s2 := "" + if days > 0 { + s2 = fmt.Sprintf("%dd ", days) + } + for _, ch := range s1 { + s2 += string(ch) + if ch == 'h' || ch == 'm' { + s2 += " " + } + } + return s2 +} |