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}