github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/scripts/internal/workflow-helpers/workflow_test.go (about)

     1  package workflow_helpers
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/blang/semver"
     8  	"github.com/google/go-github/v45/github"
     9  	"github.com/thoas/go-funk"
    10  )
    11  
    12  func Test_issueWithVersionAssert(t *testing.T) {
    13  	type args struct {
    14  		issues           []*github.Issue
    15  		assertion        Assertion
    16  		versionToCompare semver.Version
    17  	}
    18  	tests := []struct {
    19  		name string
    20  		args args
    21  		want []int
    22  	}{
    23  		{
    24  			name: "no version",
    25  			args: args{
    26  				issues: []*github.Issue{
    27  					{
    28  						Title:  github.String("this is a commit message"),
    29  						Number: github.Int(1),
    30  					},
    31  				},
    32  				assertion:        AssertLT,
    33  				versionToCompare: semver.MustParse("1.2.3"),
    34  			},
    35  			want: []int{},
    36  		},
    37  		{
    38  			name: "Only higher versions when asserting LT",
    39  			args: args{
    40  				issues: funk.Shuffle([]*github.Issue{
    41  					{
    42  						Title:  github.String(VersionedPRPrefix + "1.2.4"),
    43  						Number: github.Int(1),
    44  					},
    45  					{
    46  						Title:  github.String(VersionedPRPrefix + "2.3.4"),
    47  						Number: github.Int(2),
    48  					},
    49  				}).([]*github.Issue),
    50  				assertion:        AssertLT,
    51  				versionToCompare: semver.MustParse("1.2.3"),
    52  			},
    53  			want: []int{},
    54  		},
    55  		{
    56  			name: "Don't include version being compared with LT",
    57  			args: args{
    58  				issues: funk.Shuffle([]*github.Issue{
    59  					{
    60  						Title:  github.String(VersionedPRPrefix + "1.2.2"),
    61  						Number: github.Int(1),
    62  					},
    63  					{
    64  						Title:  github.String(VersionedPRPrefix + "1.2.3"),
    65  						Number: github.Int(2),
    66  					},
    67  				}).([]*github.Issue),
    68  				assertion:        AssertLT,
    69  				versionToCompare: semver.MustParse("1.2.3"),
    70  			},
    71  			want: []int{1},
    72  		},
    73  		{
    74  			name: "Matching version when asserting LT",
    75  			args: args{
    76  				issues: funk.Shuffle([]*github.Issue{
    77  					{
    78  						Title:  github.String(VersionedPRPrefix + "1.2.2"),
    79  						Number: github.Int(1),
    80  					},
    81  					{
    82  						Title:  github.String(VersionedPRPrefix + "2.3.4"),
    83  						Number: github.Int(2),
    84  					},
    85  				}).([]*github.Issue),
    86  				assertion:        AssertLT,
    87  				versionToCompare: semver.MustParse("1.2.3"),
    88  			},
    89  			want: []int{1},
    90  		},
    91  		{
    92  			name: "Multiple matching version when asserting LT",
    93  			args: args{
    94  				issues: funk.Shuffle([]*github.Issue{
    95  					{
    96  						Title:  github.String(VersionedPRPrefix + "1.2.2"),
    97  						Number: github.Int(1),
    98  					},
    99  					{
   100  						Title:  github.String(VersionedPRPrefix + "2.3.4"),
   101  						Number: github.Int(2),
   102  					},
   103  					{
   104  						Title:  github.String(VersionedPRPrefix + "1.0.0"),
   105  						Number: github.Int(3),
   106  					},
   107  				}).([]*github.Issue),
   108  				assertion:        AssertLT,
   109  				versionToCompare: semver.MustParse("1.2.3"),
   110  			},
   111  			want: []int{1, 3}, // Should be ordered by closest matching
   112  		},
   113  		{
   114  			name: "Only lower versions when asserting GT",
   115  			args: args{
   116  				issues: funk.Shuffle([]*github.Issue{
   117  					{
   118  						Title:  github.String(VersionedPRPrefix + "1.2.1"),
   119  						Number: github.Int(1),
   120  					},
   121  					{
   122  						Title:  github.String(VersionedPRPrefix + "0.1.2"),
   123  						Number: github.Int(2),
   124  					},
   125  				}).([]*github.Issue),
   126  				assertion:        AssertGT,
   127  				versionToCompare: semver.MustParse("1.2.3"),
   128  			},
   129  			want: []int{},
   130  		},
   131  		{
   132  			name: "Matching version when asserting GT",
   133  			args: args{
   134  				issues: funk.Shuffle([]*github.Issue{
   135  					{
   136  						Title:  github.String(VersionedPRPrefix + "1.2.2"),
   137  						Number: github.Int(1),
   138  					},
   139  					{
   140  						Title:  github.String(VersionedPRPrefix + "2.3.4"),
   141  						Number: github.Int(2),
   142  					},
   143  				}).([]*github.Issue),
   144  				assertion:        AssertGT,
   145  				versionToCompare: semver.MustParse("1.2.3"),
   146  			},
   147  			want: []int{2},
   148  		},
   149  		{
   150  			name: "Don't include version being compared with GT",
   151  			args: args{
   152  				issues: funk.Shuffle([]*github.Issue{
   153  					{
   154  						Title:  github.String(VersionedPRPrefix + "1.2.4"),
   155  						Number: github.Int(1),
   156  					},
   157  					{
   158  						Title:  github.String(VersionedPRPrefix + "1.2.3"),
   159  						Number: github.Int(2),
   160  					},
   161  				}).([]*github.Issue),
   162  				assertion:        AssertGT,
   163  				versionToCompare: semver.MustParse("1.2.3"),
   164  			},
   165  			want: []int{1},
   166  		},
   167  		{
   168  			name: "Multiple matching version when asserting GT",
   169  			args: args{
   170  				issues: funk.Shuffle([]*github.Issue{
   171  					{
   172  						Title:  github.String(VersionedPRPrefix + "1.2.2"),
   173  						Number: github.Int(1),
   174  					},
   175  					{
   176  						Title:  github.String(VersionedPRPrefix + "5.4.3"),
   177  						Number: github.Int(2),
   178  					},
   179  					{
   180  						Title:  github.String(VersionedPRPrefix + "2.3.4"),
   181  						Number: github.Int(3),
   182  					},
   183  				}).([]*github.Issue),
   184  				assertion:        AssertGT,
   185  				versionToCompare: semver.MustParse("1.2.3"),
   186  			},
   187  			want: []int{3, 2}, // Should be ordered by closest matching
   188  		},
   189  	}
   190  	for _, tt := range tests {
   191  		t.Run(tt.name, func(t *testing.T) {
   192  			got := issuesWithVersionAssert(tt.args.issues, tt.args.assertion, tt.args.versionToCompare)
   193  			gotN := []int{}
   194  			for _, v := range got {
   195  				gotN = append(gotN, v.GetNumber())
   196  			}
   197  			if !reflect.DeepEqual(gotN, tt.want) {
   198  				t.Errorf("issueWithVersionLT() = %v, want %v", gotN, tt.want)
   199  			}
   200  		})
   201  	}
   202  }