Skip to content

Commit 284a0cb

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 65123a2 + 5e22017 commit 284a0cb

File tree

9 files changed

+129
-139
lines changed

9 files changed

+129
-139
lines changed

cmd/entries.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"errors"
55
"fmt"
66
"github.com/cheynewallace/tabby"
7-
"github.com/leanovate/mite-go/datetime"
7+
"github.com/leanovate/mite-go/domain"
88
"github.com/leanovate/mite-go/mite"
99
"github.com/spf13/cobra"
1010
"strings"
@@ -31,9 +31,9 @@ var (
3131
)
3232

3333
func init() {
34-
today := datetime.Today()
34+
today := domain.Today()
3535
defaultFrom := today.Add(0, 0, -7)
36-
defaultMinutes := datetime.NewMinutes(0).String()
36+
defaultMinutes := domain.NewMinutes(0).String()
3737

3838
// list
3939
entriesListCommand.Flags().StringVarP(&listTo, "to", "t", today.String(), "list only entries until date (in YYYY-MM-DD format)")
@@ -75,11 +75,11 @@ var entriesListCommand = &cobra.Command{
7575
RunE: func(cmd *cobra.Command, args []string) error {
7676
direction := listOrder
7777

78-
to, err := datetime.ParseLocalDate(listTo)
78+
to, err := domain.ParseLocalDate(listTo)
7979
if err != nil {
8080
return err
8181
}
82-
from, err := datetime.ParseLocalDate(listFrom)
82+
from, err := domain.ParseLocalDate(listFrom)
8383
if err != nil {
8484
return err
8585
}
@@ -121,11 +121,11 @@ var entriesCreateCommand = &cobra.Command{
121121
return errors.New("please set both the project AND service id (either via arguments or config)")
122122
}
123123

124-
cDate, err := datetime.ParseLocalDate(createDate)
124+
cDate, err := domain.ParseLocalDate(createDate)
125125
if err != nil {
126126
return err
127127
}
128-
cMinutes, err := datetime.ParseMinutes(createMinutes)
128+
cMinutes, err := domain.ParseMinutes(createMinutes)
129129
if err != nil {
130130
return err
131131
}
@@ -190,15 +190,15 @@ var entriesEditCommand = &cobra.Command{
190190

191191
// override only fields affected by set parameters of edit
192192
if editDate != "" {
193-
eDate, err := datetime.ParseLocalDate(editDate)
193+
eDate, err := domain.ParseLocalDate(editDate)
194194
if err != nil {
195195
return err
196196
}
197197
timeEntry.Date = &eDate
198198
}
199199

200200
if editMinutes != "" {
201-
eMinutes, err := datetime.ParseMinutes(editMinutes)
201+
eMinutes, err := domain.ParseMinutes(editMinutes)
202202
if err != nil {
203203
return err
204204
}

cmd/tracker.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package cmd
33
import (
44
"errors"
55
"github.com/cheynewallace/tabby"
6-
"github.com/leanovate/mite-go/datetime"
6+
"github.com/leanovate/mite-go/domain"
77
"github.com/leanovate/mite-go/mite"
88
"github.com/spf13/cobra"
99
)
@@ -102,7 +102,7 @@ var trackerStopCommand = &cobra.Command{
102102
}
103103

104104
func fetchLatestTimeEntryForToday() (string, error) {
105-
today := datetime.Today()
105+
today := domain.Today()
106106

107107
entries, err := deps.miteApi.TimeEntries(&mite.TimeEntryQuery{
108108
To: &today,

datetime/local_date_test.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

datetime/minutes.go

Lines changed: 0 additions & 32 deletions
This file was deleted.

datetime/minutes_test.go

Lines changed: 0 additions & 37 deletions
This file was deleted.

datetime/local_date.go renamed to domain/datetime.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
package datetime
1+
package domain
22

3-
import "time"
3+
import (
4+
"math"
5+
"strings"
6+
"time"
7+
)
48

59
const ISO8601 = "2006-01-02"
610

@@ -32,3 +36,28 @@ func (d LocalDate) Add(years int, months int, days int) LocalDate {
3236
func (d LocalDate) String() string {
3337
return d.time.Format(ISO8601)
3438
}
39+
40+
type Minutes struct {
41+
duration time.Duration
42+
}
43+
44+
func NewMinutes(i int) Minutes {
45+
return Minutes{duration: time.Duration(i) * time.Minute}
46+
}
47+
48+
func ParseMinutes(s string) (Minutes, error) {
49+
d, err := time.ParseDuration(s)
50+
if err != nil {
51+
return Minutes{}, err
52+
}
53+
54+
return Minutes{duration: d.Round(time.Minute)}, nil
55+
}
56+
57+
func (m Minutes) Value() int {
58+
return int(math.Min(m.duration.Minutes(), math.MaxInt32))
59+
}
60+
61+
func (m Minutes) String() string {
62+
return strings.TrimSuffix(m.duration.String(), "0s")
63+
}

domain/datetime_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package domain_test
2+
3+
import (
4+
"github.com/leanovate/mite-go/domain"
5+
"github.com/stretchr/testify/assert"
6+
"testing"
7+
"time"
8+
)
9+
10+
func TestToday(t *testing.T) {
11+
expected := time.Now().Local().Format("2006-01-02")
12+
actual := domain.Today().String()
13+
14+
assert.Equal(t, expected, actual)
15+
}
16+
17+
func TestParseLocalDate(t *testing.T) {
18+
expected := domain.NewLocalDate(time.Date(1970, time.January, 1, 0, 0, 0, 0, time.Local))
19+
actual, err := domain.ParseLocalDate("1970-01-01")
20+
21+
assert.Nil(t, err)
22+
assert.Equal(t, expected, actual)
23+
24+
_, err = domain.ParseLocalDate("1970-01-01T00:00:00Z")
25+
26+
assert.IsType(t, &time.ParseError{}, err)
27+
}
28+
29+
func TestLocalDate_Add(t *testing.T) {
30+
expected := domain.NewLocalDate(time.Date(1971, time.February, 2, 0, 0, 0, 0, time.Local))
31+
actual := domain.
32+
NewLocalDate(time.Date(1970, time.January, 1, 0, 0, 0, 0, time.Local)).
33+
Add(1, 1, 1)
34+
35+
assert.Equal(t, expected, actual)
36+
}
37+
38+
func TestLocalDate_String(t *testing.T) {
39+
expected := "1970-01-01"
40+
actual := domain.NewLocalDate(time.Date(1970, time.January, 1, 0, 0, 0, 0, time.Local)).String()
41+
42+
assert.Equal(t, expected, actual)
43+
}
44+
45+
func Test_ParseMinutes(t *testing.T) {
46+
expected := domain.NewMinutes(23)
47+
actual, err := domain.ParseMinutes("23m")
48+
49+
assert.Nil(t, err)
50+
assert.Equal(t, expected, actual)
51+
52+
actual, err = domain.ParseMinutes("22m33s")
53+
54+
assert.Nil(t, err)
55+
assert.Equal(t, expected, actual)
56+
57+
_, err = domain.ParseMinutes("1970-01-01")
58+
assert.NotNil(t, err)
59+
}
60+
61+
func TestMinutes_Value(t *testing.T) {
62+
expected := 23
63+
actual := domain.NewMinutes(23).Value()
64+
65+
assert.Equal(t, expected, actual)
66+
}
67+
68+
func TestMinutes_String(t *testing.T) {
69+
expected := "23m"
70+
actual := domain.NewMinutes(23).String()
71+
72+
assert.Equal(t, expected, actual)
73+
}

mite/time_entry.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ package mite
22

33
import (
44
"fmt"
5-
"github.com/leanovate/mite-go/datetime"
5+
"github.com/leanovate/mite-go/domain"
66
"net/url"
77
"strconv"
88
"time"
99
)
1010

1111
type TimeEntry struct {
1212
Id string
13-
Minutes datetime.Minutes
14-
Date datetime.LocalDate
13+
Minutes domain.Minutes
14+
Date domain.LocalDate
1515
Note string
1616
Billable bool
1717
Locked bool
@@ -30,8 +30,8 @@ type TimeEntry struct {
3030
}
3131

3232
type TimeEntryCommand struct {
33-
Date *datetime.LocalDate
34-
Minutes *datetime.Minutes
33+
Date *domain.LocalDate
34+
Minutes *domain.Minutes
3535
Note string
3636
UserId string
3737
ProjectId string
@@ -57,8 +57,8 @@ func (c *TimeEntryCommand) toRequest() *timeEntryRequest {
5757
}
5858

5959
type TimeEntryQuery struct {
60-
From *datetime.LocalDate
61-
To *datetime.LocalDate
60+
From *domain.LocalDate
61+
To *domain.LocalDate
6262
Direction string
6363
}
6464

@@ -115,14 +115,14 @@ type timeEntryResponse struct {
115115
}
116116

117117
func (r *timeEntryResponse) toTimeEntry() *TimeEntry {
118-
d, err := datetime.ParseLocalDate(r.TimeEntry.Date)
118+
d, err := domain.ParseLocalDate(r.TimeEntry.Date)
119119
if err != nil {
120120
panic(err)
121121
}
122122

123123
return &TimeEntry{
124124
Id: strconv.Itoa(r.TimeEntry.Id),
125-
Minutes: datetime.NewMinutes(r.TimeEntry.Minutes),
125+
Minutes: domain.NewMinutes(r.TimeEntry.Minutes),
126126
Date: d,
127127
Note: r.TimeEntry.Note,
128128
Billable: r.TimeEntry.Billable,

0 commit comments

Comments
 (0)