summaryrefslogtreecommitdiff
path: root/pkg/gitlab/issue_test.go
blob: 61f2fcd9064d3a8eaaa9b669604cd449e1fdcac2 (plain)
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
package gitlab

import (
	"bufio"
	"os"
	"strings"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"github.com/xlgmokha/x/pkg/x"
)

func TestIssue(t *testing.T) {
	t.Run("FromIssues", func(t *testing.T) {
		t.Run("parses the array of issues from IO", func(t *testing.T) {
			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)
		})
	})

	t.Run("From", func(t *testing.T) {
		t.Run("parses each field", func(t *testing.T) {
			file, err := os.Open("../../test/data/issues.json")
			require.NoError(t, err)

			reader := bufio.NewReader(file)
			results, err := FromIssues(reader)
			require.NoError(t, err)

			assert.Len(t, results, 20)

			result := results[0]

			assert.Equal(t, 146760799, result.ID)
			assert.Equal(t, 6375, result.IID)
			assert.Equal(t, 40549124, result.ProjectID)
			assert.Contains(t, result.Title, "`gitlab-org/gitlab` broken `master` with rspec unit")
			assert.Contains(t, result.Description, "## How to close this incident\n\n- Follow the steps in the")
			assert.Equal(t, IssueStateClosed, result.State)
			assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:14.548Z")), result.CreatedAt)
			assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T18:14:37.830Z")), result.UpdatedAt)
			assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:16.837Z")), result.ClosedAt)

			t.Run("closed_by", func(t *testing.T) {
				user := result.ClosedBy
				assert.Equal(t, 1786152, user.ID)
				assert.Equal(t, "gitlab-bot", user.Username)
				assert.Equal(t, UserStateActive, user.State)
				assert.Equal(t, false, user.Locked)
				assert.Equal(t, "https://gitlab.com/uploads/-/system/user/avatar/1786152/avatar.png", user.AvatarUrl)
				assert.Equal(t, "https://gitlab.com/gitlab-bot", user.WebUrl)
			})

			assert.ElementsMatch(t, []string{
				"Engineering Productivity",
				"master-broken::job-timeout",
				"master:broken",
			}, result.Labels)
		})
	})
}