summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatthieu <matthieu.cneude@gmail.com>2020-06-01 17:54:05 +0200
committermatthieu <matthieu.cneude@gmail.com>2020-06-01 17:54:05 +0200
commitb43eb6ee0079e44b04ba38dd1b3db9fa83b0271b (patch)
tree8a5f6892501658623f91ceb60996978055a8fb4b
parent0e320c9ce6da3f21987a7d79090813b08f3ba1ee (diff)
Add more tests
-rw-r--r--internal/ga_widget.go90
-rw-r--r--internal/ga_widget_test.go127
-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
+}