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  }