1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
package worktime
import (
"strings"
"testing"
"time"
)
func TestParseImportDateFallbackLayout(t *testing.T) {
parsed, err := ParseImportDate("06.01.2026")
if err != nil {
t.Fatalf("ParseImportDate() error = %v", err)
}
expected := time.Date(2026, 1, 6, 0, 0, 0, 0, time.Local)
if parsed.Year() != expected.Year() || parsed.Month() != expected.Month() || parsed.Day() != expected.Day() {
t.Fatalf("parsed date = %v, want %v", parsed, expected)
}
}
func TestParseImportDateIncludesUnderlyingParseError(t *testing.T) {
_, err := ParseImportDate("not-a-date")
if err == nil {
t.Fatal("ParseImportDate() error = nil, want error")
}
if !strings.Contains(err.Error(), "unsupported import date") {
t.Fatalf("ParseImportDate() error = %v, want unsupported import date context", err)
}
}
func TestParseImportLine(t *testing.T) {
line := "Mon 06.01.2026: +8.00h lunch: +0.50h off: +1.00h"
parsed, err := ParseImportLine(line)
if err != nil {
t.Fatalf("ParseImportLine() error = %v", err)
}
if parsed.WorkHours != 8 {
t.Fatalf("WorkHours = %v, want 8", parsed.WorkHours)
}
if parsed.LunchHours != 0.5 {
t.Fatalf("LunchHours = %v, want 0.5", parsed.LunchHours)
}
if parsed.OffHours != 1 {
t.Fatalf("OffHours = %v, want 1", parsed.OffHours)
}
}
func TestImportReport(t *testing.T) {
dbDir := t.TempDir()
host := "host-a"
report := strings.NewReader("Mon 06.01.2026: +8.00h lunch: +0.50h off: +0.00h\n")
imported, err := ImportReport(dbDir, host, report)
if err != nil {
t.Fatalf("ImportReport() error = %v", err)
}
if imported != 2 {
t.Fatalf("imported = %d, want 2", imported)
}
db, err := LoadHost(dbDir, host)
if err != nil {
t.Fatalf("LoadHost() error = %v", err)
}
entries := db.Entries[host]
if len(entries) != 2 {
t.Fatalf("entries len = %d, want 2", len(entries))
}
if entries[0].What != "work" || entries[0].Value != 30600 {
t.Fatalf("work entry = %+v, want 8.5h in seconds", entries[0])
}
if entries[1].What != "lunch" || entries[1].Value != 1800 {
t.Fatalf("lunch entry = %+v, want 0.5h in seconds", entries[1])
}
}
|