github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/scripts/internal/workflow-helpers/jira_test.go (about) 1 package workflow_helpers 2 3 import ( 4 "testing" 5 6 "github.com/ActiveState/cli/internal/errs" 7 "github.com/andygrunwald/go-jira" 8 "github.com/blang/semver" 9 "github.com/stretchr/testify/require" 10 "github.com/thoas/go-funk" 11 ) 12 13 func TestFetchJiraIDsInCommits(t *testing.T) { 14 t.Skip("For debugging purposes, comment this line out if you want to test this locally") 15 16 tests := []struct { 17 name string 18 commitRange []string 19 wantFound []string 20 }{ 21 { 22 "Find DX-946 - small range", 23 []string{"98543a901b11c36c5255b9ffb748259789918644", "69bbdf1466135094efe0ef77108eae9953d76ac3"}, 24 []string{"DX-946"}, 25 }, 26 { 27 "Find DX-946 - large range", 28 []string{"5d6e103384849ad2cb6f604da84c4dc9f2245c31", "c07df2b7df591bf2c84306bb79f9a57f9cd9aaa4"}, 29 []string{"DX-946"}, 30 }, 31 } 32 for _, tt := range tests { 33 t.Run(tt.name, func(t *testing.T) { 34 commits, err := FetchCommitsByShaRange(InitGHClient(), tt.commitRange[0], tt.commitRange[1]) 35 if err != nil { 36 t.Errorf("FetchCommitsByShaRange() error = %v", err) 37 return 38 } 39 gotFound := FetchJiraIDsInCommits(commits) 40 for _, want := range tt.wantFound { 41 if !funk.Contains(gotFound, want) { 42 t.Errorf("FetchJiraIDsInCommits() did not include %s, got: %v", want, gotFound) 43 } 44 } 45 }) 46 } 47 } 48 49 func TestFetchAvailableVersions(t *testing.T) { 50 client, err := InitJiraClient() 51 require.NoError(t, err) 52 53 versions, err := FetchAvailableVersions(client) 54 require.NoError(t, err) 55 56 if len(versions) == 0 { 57 t.Fatal("No versions found") 58 } 59 60 emptySemver := semver.Version{} 61 for _, v := range versions { 62 if emptySemver.EQ(v.Version) { 63 t.Errorf("Empty version found: %#v", v) 64 } 65 } 66 } 67 68 func TestParseTargetFixVersion(t *testing.T) { 69 getIssue := func(fixVersion, desc string) *jira.Issue { 70 return &jira.Issue{ 71 Fields: &jira.IssueFields{ 72 FixVersions: []*jira.FixVersion{ 73 { 74 Name: fixVersion, 75 Description: desc, 76 }, 77 }, 78 }, 79 } 80 } 81 82 type args struct { 83 issue *jira.Issue 84 availableVersions []Version 85 } 86 tests := []struct { 87 name string 88 args args 89 want semver.Version 90 wantErr bool 91 }{ 92 { 93 name: "Next Feasible", 94 args: args{ 95 getIssue("Next Feasible", "v1.2.5-RC1 -- bogus."), 96 []Version{ 97 {semver.Version{Major: 1, Minor: 2, Patch: 3}, ""}, 98 {semver.Version{Major: 2, Minor: 3, Patch: 4}, ""}, 99 {semver.Version{Major: 1, Minor: 2, Patch: 5, Pre: []semver.PRVersion{{VersionStr: "RC1"}}}, ""}, 100 }, 101 }, 102 want: semver.Version{Major: 1, Minor: 2, Patch: 5, Pre: []semver.PRVersion{{VersionStr: "RC1"}}}, 103 }, 104 { 105 name: "Next Unscheduled", 106 args: args{ 107 getIssue("Next Unscheduled", ""), 108 []Version{ 109 {semver.Version{Major: 1, Minor: 2, Patch: 3}, ""}, 110 {semver.Version{Major: 2, Minor: 3, Patch: 4}, ""}, 111 {semver.Version{Major: 1, Minor: 2, Patch: 5}, ""}, 112 }, 113 }, 114 want: VersionMaster, 115 }, 116 { 117 name: "Custom Version", 118 args: args{ 119 getIssue("1.2.3", ""), 120 []Version{}, 121 }, 122 want: semver.Version{Major: 1, Minor: 2, Patch: 3}, 123 }, 124 } 125 for _, tt := range tests { 126 t.Run(tt.name, func(t *testing.T) { 127 got, _, err := ParseTargetFixVersion(tt.args.issue, tt.args.availableVersions) 128 if (err != nil) != tt.wantErr { 129 t.Errorf("ParseTargetFixVersion() error = %v, wantErr %v", err, tt.wantErr) 130 } 131 if !got.EQ(tt.want) { 132 t.Errorf("ParseTargetFixVersion() got = %v, want %v", got, tt.want) 133 } 134 }) 135 } 136 } 137 138 func TestJqlUnpaged(t *testing.T) { 139 t.Skip("For debugging purposes, comment this line out if you want to test this locally") 140 141 client, err := InitJiraClient() 142 require.NoError(t, err) 143 144 issues, err := JqlUnpaged(client, "project = DX AND status=Done ORDER BY created") 145 require.NoError(t, err, errs.JoinMessage(err)) 146 require.Greater(t, len(issues), 0) 147 } 148 149 func TestUpdateJiraStatus(t *testing.T) { 150 t.Skip("For debugging purposes, comment this line out if you want to test this locally -- THIS WILL MAKE CHANGES TO THE TARGET ISSUE") 151 c, err := InitJiraClient() 152 require.NoError(t, err) 153 type args struct { 154 client *jira.Client 155 issue *jira.Issue 156 statusName string 157 } 158 tests := []struct { 159 name string 160 args args 161 wantErr bool 162 }{ 163 { 164 "foo", 165 args{ 166 c, 167 &jira.Issue{ 168 ID: "33792", 169 Key: "DX-1584", 170 }, 171 "In Progress", 172 }, 173 false, 174 }, 175 } 176 for _, tt := range tests { 177 t.Run(tt.name, func(t *testing.T) { 178 if err := UpdateJiraStatus(tt.args.client, tt.args.issue, tt.args.statusName); (err != nil) != tt.wantErr { 179 t.Errorf("UpdateJiraStatus() error = %s, wantErr %v", errs.JoinMessage(err), tt.wantErr) 180 } 181 }) 182 } 183 }