Commit b55760a

mo khan <mo@mokhan.ca>
2024-05-18 18:20:35
refactor: extract func to parse issues
1 parent 41fe3a6
Changed files (3)
cmd/stanuki/main.go
@@ -7,7 +7,6 @@ import (
 	"net/http"
 
 	"github.com/xlgmokha/x/pkg/env"
-	"github.com/xlgmokha/x/pkg/serde"
 	"github.com/xlgmokha/x/pkg/x"
 	"gitlab.com/mokhax/stanuki/pkg/gitlab"
 )
@@ -22,7 +21,7 @@ func main() {
 	if env.Fetch("DUMP", "") != "" {
 		fmt.Println(string(x.Must(io.ReadAll(response.Body))))
 	} else {
-		issues := x.Must(serde.From[[]gitlab.Issue](response.Body, serde.JSON))
+		issues := x.Must(gitlab.FromIssues(response.Body))
 		for _, issue := range issues {
 			fmt.Printf("%v: %v\n", issue.ID, issue.Title)
 		}
pkg/gitlab/issue.go
@@ -1,5 +1,11 @@
 package gitlab
 
+import (
+	"io"
+
+	"github.com/xlgmokha/x/pkg/serde"
+)
+
 type Issue struct {
 	ID          int    `json:"id"`
 	IID         int    `json:"iid"`
@@ -7,3 +13,7 @@ type Issue struct {
 	Title       string `json:"title"`
 	Description string `json:"description"`
 }
+
+func FromIssues(r io.Reader) ([]Issue, error) {
+	return serde.From[[]Issue](r, serde.JSON)
+}
pkg/gitlab/issue_test.go
@@ -1,15 +1,24 @@
 package gitlab
 
 import (
+	"strings"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
 )
 
 func TestIssue(t *testing.T) {
 	t.Run("ParseIssues", func(t *testing.T) {
 		t.Run("parses the array of issues from IO", func(t *testing.T) {
-			assert.Equal(t, false, true)
+			body := strings.NewReader(`[{"ID":1,"title":"Issue Title"}]`)
+
+			results, err := FromIssues(body)
+
+			require.NoError(t, err)
+			require.Equal(t, 1, len(results))
+			assert.Equal(t, 1, results[0].ID)
+			assert.Equal(t, "Issue Title", results[0].Title)
 		})
 	})
 }