Skip to content

Commit 587b103

Browse files
committed
feat(repo): add repo struct and tests
1 parent 1d0b524 commit 587b103

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

internal/github/repo.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package github
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"strings"
7+
)
8+
9+
type Repo struct {
10+
Owner string `json:"owner"`
11+
Repo string `json:"repo"`
12+
}
13+
14+
var ErrInvalidRepository = errors.New("invalid repository")
15+
16+
func ParseRepo(s string) (Repo, error) {
17+
parts := strings.Split(s, "/")
18+
if len(parts) != 2 || parts[0] == "" || parts[1] == "" {
19+
return Repo{}, fmt.Errorf("%w: %s", ErrInvalidRepository, s)
20+
}
21+
22+
return Repo{
23+
Owner: parts[0],
24+
Repo: parts[1],
25+
}, nil
26+
}
27+
28+
func (r Repo) String() string {
29+
return fmt.Sprintf("%s/%s", r.Owner, r.Repo)
30+
}
31+
32+
func (r Repo) PullsEndpoint() string {
33+
return fmt.Sprintf("repos/%s/%s/pulls?state=open", r.Owner, r.Repo)
34+
}

internal/github/repo_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package github
2+
3+
import (
4+
"errors"
5+
"testing"
6+
)
7+
8+
func TestParseRepo(t *testing.T) {
9+
t.Parallel()
10+
11+
tests := []struct {
12+
repo string
13+
err error
14+
want Repo
15+
}{
16+
{
17+
err: ErrInvalidRepository,
18+
},
19+
{
20+
repo: "owner",
21+
err: ErrInvalidRepository,
22+
},
23+
{
24+
repo: "/repo",
25+
err: ErrInvalidRepository,
26+
},
27+
{
28+
repo: "/",
29+
err: ErrInvalidRepository,
30+
},
31+
32+
{
33+
repo: "owner/repo",
34+
want: Repo{Owner: "owner", Repo: "repo"},
35+
},
36+
}
37+
38+
for _, test := range tests {
39+
t.Run("", func(t *testing.T) {
40+
t.Parallel()
41+
42+
got, err := ParseRepo(test.repo)
43+
if !errors.Is(err, test.err) {
44+
t.Errorf("want %q, got %q", test.err, err)
45+
}
46+
47+
if got.Owner != test.want.Owner {
48+
t.Errorf("want owner %s, got %s", test.want.Owner, got.Owner)
49+
}
50+
51+
if got.Repo != test.want.Repo {
52+
t.Errorf("want owner %s, got %s", test.want.Repo, got.Repo)
53+
}
54+
})
55+
}
56+
}

0 commit comments

Comments
 (0)