all repos

mugit @ main

🐮 git server that your cow will love

mugit/internal/handlers/handlers_test.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
test: add missing tests (#5)..., 2 months ago
1
package handlers
2
3
import (
4
	"testing"
5
6
	"olexsmir.xyz/x/is"
7
)
8
9
func TestBreadcrumbs(t *testing.T) {
10
	tests := []struct {
11
		name string
12
		path string
13
		want []Breadcrumb
14
	}{
15
		{name: "empty path", path: "", want: nil},
16
		{
17
			name: "single segment",
18
			path: "src",
19
			want: []Breadcrumb{{Name: "src", Path: "src", IsLast: true}},
20
		},
21
		{
22
			name: "two segments",
23
			path: "src/main",
24
			want: []Breadcrumb{
25
				{Name: "src", Path: "src", IsLast: false},
26
				{Name: "main", Path: "src/main", IsLast: true},
27
			},
28
		},
29
		{
30
			name: "deep nesting",
31
			path: "src/internal/handlers/repo.go",
32
			want: []Breadcrumb{
33
				{Name: "src", Path: "src", IsLast: false},
34
				{Name: "internal", Path: "src/internal", IsLast: false},
35
				{Name: "handlers", Path: "src/internal/handlers", IsLast: false},
36
				{Name: "repo.go", Path: "src/internal/handlers/repo.go", IsLast: true},
37
			},
38
		},
39
	}
40
41
	for _, tt := range tests {
42
		t.Run(tt.name, func(t *testing.T) {
43
			is.Equal(t, Breadcrumbs(tt.path), tt.want)
44
		})
45
	}
46
}
47
48
func TestParseRef(t *testing.T) {
49
	tests := []struct {
50
		name  string
51
		input string
52
		want  string
53
	}{
54
		{name: "simple ref", input: "main", want: "main"},
55
		{name: "url encoded slash", input: "feature%2Fnew-thing", want: "feature/new-thing"},
56
		{name: "url encoded spaces", input: "my%20branch", want: "my branch"},
57
		{name: "already decoded", input: "refs/heads/main", want: "refs/heads/main"},
58
		{name: "version tag", input: "v1.2.3", want: "v1.2.3"},
59
		{name: "hash", input: "abc123def", want: "abc123def"},
60
	}
61
62
	h := handlers{}
63
	for _, tt := range tests {
64
		t.Run(tt.name, func(t *testing.T) {
65
			is.Equal(t, h.parseRef(tt.input), tt.want)
66
		})
67
	}
68
}
69
70
func TestTemplate_CommitSummary(t *testing.T) {
71
	tests := []struct {
72
		name  string
73
		input string
74
		want  string
75
	}{
76
		{name: "empty string", input: "", want: ""},
77
		{name: "single line", input: "Fix bug in handler", want: "Fix bug in handler"},
78
		{name: "trailing newline only", input: "Fix bug\n", want: "Fix bug"},
79
		{
80
			name:  "no blank line separator (malformed)",
81
			input: "Fix bug\nMore details",
82
			want:  "Fix bug...",
83
		},
84
		{
85
			name:  "proper body with blank line",
86
			input: "Fix bug\n\nMore details here",
87
			want:  "Fix bug...",
88
		},
89
		{
90
			name:  "multiple body paragraphs",
91
			input: "Fix bug\n\nMore details\n\nEven more",
92
			want:  "Fix bug...",
93
		},
94
		{
95
			name:  "trailing blank lines only",
96
			input: "Fix bug\n\n",
97
			want:  "Fix bug",
98
		},
99
		{
100
			name:  "with CRLF no body",
101
			input: "Fix bug\r\n",
102
			want:  "Fix bug",
103
		},
104
		{
105
			name:  "with CRLF and body",
106
			input: "Fix bug\r\n\r\nMore details",
107
			want:  "Fix bug...",
108
		},
109
	}
110
111
	for _, tt := range tests {
112
		t.Run(tt.name, func(t *testing.T) {
113
			is.Equal(t, commitSummary(tt.input), tt.want)
114
		})
115
	}
116
}