main
1package gitlab
2
3import (
4 "bufio"
5 "os"
6 "strings"
7 "testing"
8 "time"
9
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12 "github.com/xlgmokha/x/pkg/x"
13 "gitlab.com/mokhax/stanuki/pkg/gitlab"
14)
15
16func TestIssue(t *testing.T) {
17 t.Run("FromIssues", func(t *testing.T) {
18 t.Run("parses the array of issues from IO", func(t *testing.T) {
19 body := strings.NewReader(`[{"ID":1,"title":"Issue Title"}]`)
20
21 results, err := gitlab.FromIssues(body)
22
23 require.NoError(t, err)
24 require.Equal(t, 1, len(results))
25 assert.Equal(t, 1, results[0].ID)
26 assert.Equal(t, "Issue Title", results[0].Title)
27 })
28 })
29
30 t.Run("From", func(t *testing.T) {
31 t.Run("parses each field", func(t *testing.T) {
32 file, err := os.Open("../../test/data/issues.json")
33 require.NoError(t, err)
34
35 reader := bufio.NewReader(file)
36 results, err := gitlab.FromIssues(reader)
37 require.NoError(t, err)
38
39 assert.Len(t, results, 20)
40
41 result := results[0]
42
43 assert.Equal(t, 146760799, result.ID)
44 assert.Equal(t, 6375, result.IID)
45 assert.Equal(t, 40549124, result.ProjectID)
46 assert.Contains(t, result.Title, "`gitlab-org/gitlab` broken `master` with rspec unit")
47 assert.Contains(t, result.Description, "## How to close this incident\n\n- Follow the steps in the")
48 assert.Equal(t, gitlab.IssueClosed, result.State)
49 assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:14.548Z")), result.CreatedAt)
50 assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T18:14:37.830Z")), result.UpdatedAt)
51 assert.Equal(t, x.Must(time.Parse(time.RFC3339Nano, "2024-05-18T17:39:16.837Z")), result.ClosedAt)
52
53 t.Run("closed_by", func(t *testing.T) {
54 user := result.ClosedBy
55 assert.Equal(t, 1786152, user.ID)
56 assert.Equal(t, "gitlab-bot", user.Username)
57 assert.Equal(t, gitlab.UserActive, user.State)
58 assert.Equal(t, false, user.Locked)
59 assert.Equal(t, "https://gitlab.com/uploads/-/system/user/avatar/1786152/avatar.png", user.AvatarUrl)
60 assert.Equal(t, "https://gitlab.com/gitlab-bot", user.WebUrl)
61 })
62
63 assert.ElementsMatch(t, []string{
64 "Engineering Productivity",
65 "master-broken::job-timeout",
66 "master:broken",
67 }, result.Labels)
68
69 assert.Nil(t, result.Milestone)
70 assert.Empty(t, result.Assignees)
71
72 assert.Equal(t, 1786152, result.Author.ID)
73 assert.Equal(t, gitlab.IssueTypeIncident, result.Type)
74 assert.Nil(t, result.Assignee)
75 assert.Equal(t, 4, result.UserNotesCount)
76 assert.Equal(t, 0, result.MergeRequestsCount)
77 assert.Equal(t, 0, result.Upvotes)
78 assert.Equal(t, 0, result.Downvotes)
79 assert.Nil(t, result.DueDate)
80 assert.False(t, result.Confidential)
81 assert.Nil(t, result.DiscussionLocked)
82 assert.Equal(t, "https://gitlab.com/gitlab-org/quality/engineering-productivity/master-broken-incidents/-/issues/6375", result.WebUrl)
83
84 // t.Run("time_stats", func(t *testing.T) {
85 // stats := result.TimeStatistics
86 // assert.Equal(t, 0, stats.TimeEstimate)
87 // assert.Equal(t, 0, stats.TotalTimeSpent)
88 // assert.Nil(t, stats.HumanTimeEstimate)
89 // assert.Nil(t, stats.HumanTimeSpent)
90 // })
91
92 // t.Run("task_completion_status", func(t *testing.T) {
93 // status := result.TaskCompletionStatus
94 // assert.Equal(t, 0, status.Count)
95 // assert.Equal(t, 0, status.CompletedCount)
96 // })
97
98 assert.Equal(t, 0, result.BlockingIssuesCount)
99 assert.True(t, result.HasTasks)
100 assert.Equal(t, "0 of 0 checklist items completed", result.TaskStatus)
101 })
102 })
103}