github.com/argoproj/argo-cd/v3@v3.2.1/applicationset/services/pull_request/utils_test.go (about)

     1  package pull_request
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  
     9  	argoprojiov1alpha1 "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1"
    10  )
    11  
    12  func strp(s string) *string {
    13  	return &s
    14  }
    15  
    16  func TestFilterBranchMatchBadRegexp(t *testing.T) {
    17  	provider, _ := NewFakeService(
    18  		t.Context(),
    19  		[]*PullRequest{
    20  			{
    21  				Number:       1,
    22  				Title:        "PR branch1",
    23  				Branch:       "branch1",
    24  				TargetBranch: "master",
    25  				HeadSHA:      "089d92cbf9ff857a39e6feccd32798ca700fb958",
    26  				Author:       "name1",
    27  			},
    28  		},
    29  		nil,
    30  	)
    31  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{
    32  		{
    33  			BranchMatch: strp("("),
    34  		},
    35  	}
    36  	_, err := ListPullRequests(t.Context(), provider, filters)
    37  	require.Error(t, err)
    38  }
    39  
    40  func TestFilterBranchMatch(t *testing.T) {
    41  	provider, _ := NewFakeService(
    42  		t.Context(),
    43  		[]*PullRequest{
    44  			{
    45  				Number:       1,
    46  				Title:        "PR one",
    47  				Branch:       "one",
    48  				TargetBranch: "master",
    49  				HeadSHA:      "189d92cbf9ff857a39e6feccd32798ca700fb958",
    50  				Author:       "name1",
    51  			},
    52  			{
    53  				Number:       2,
    54  				Title:        "PR two",
    55  				Branch:       "two",
    56  				TargetBranch: "master",
    57  				HeadSHA:      "289d92cbf9ff857a39e6feccd32798ca700fb958",
    58  				Author:       "name2",
    59  			},
    60  			{
    61  				Number:       3,
    62  				Title:        "PR three",
    63  				Branch:       "three",
    64  				TargetBranch: "master",
    65  				HeadSHA:      "389d92cbf9ff857a39e6feccd32798ca700fb958",
    66  				Author:       "name3",
    67  			},
    68  			{
    69  				Number:       4,
    70  				Title:        "PR four",
    71  				Branch:       "four",
    72  				TargetBranch: "master",
    73  				HeadSHA:      "489d92cbf9ff857a39e6feccd32798ca700fb958",
    74  				Author:       "name4",
    75  			},
    76  		},
    77  		nil,
    78  	)
    79  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{
    80  		{
    81  			BranchMatch: strp("w"),
    82  		},
    83  	}
    84  	pullRequests, err := ListPullRequests(t.Context(), provider, filters)
    85  	require.NoError(t, err)
    86  	assert.Len(t, pullRequests, 1)
    87  	assert.Equal(t, "two", pullRequests[0].Branch)
    88  }
    89  
    90  func TestFilterTargetBranchMatch(t *testing.T) {
    91  	provider, _ := NewFakeService(
    92  		t.Context(),
    93  		[]*PullRequest{
    94  			{
    95  				Number:       1,
    96  				Title:        "PR one",
    97  				Branch:       "one",
    98  				TargetBranch: "master",
    99  				HeadSHA:      "189d92cbf9ff857a39e6feccd32798ca700fb958",
   100  				Author:       "name1",
   101  			},
   102  			{
   103  				Number:       2,
   104  				Title:        "PR two",
   105  				Branch:       "two",
   106  				TargetBranch: "branch1",
   107  				HeadSHA:      "289d92cbf9ff857a39e6feccd32798ca700fb958",
   108  				Author:       "name2",
   109  			},
   110  			{
   111  				Number:       3,
   112  				Title:        "PR three",
   113  				Branch:       "three",
   114  				TargetBranch: "branch2",
   115  				HeadSHA:      "389d92cbf9ff857a39e6feccd32798ca700fb958",
   116  				Author:       "name3",
   117  			},
   118  			{
   119  				Number:       4,
   120  				Title:        "PR four",
   121  				Branch:       "four",
   122  				TargetBranch: "branch3",
   123  				HeadSHA:      "489d92cbf9ff857a39e6feccd32798ca700fb958",
   124  				Author:       "name4",
   125  			},
   126  		},
   127  		nil,
   128  	)
   129  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{
   130  		{
   131  			TargetBranchMatch: strp("1"),
   132  		},
   133  	}
   134  	pullRequests, err := ListPullRequests(t.Context(), provider, filters)
   135  	require.NoError(t, err)
   136  	assert.Len(t, pullRequests, 1)
   137  	assert.Equal(t, "two", pullRequests[0].Branch)
   138  }
   139  
   140  func TestFilterTitleMatch(t *testing.T) {
   141  	provider, _ := NewFakeService(
   142  		t.Context(),
   143  		[]*PullRequest{
   144  			{
   145  				Number:       1,
   146  				Title:        "PR one - filter",
   147  				Branch:       "one",
   148  				TargetBranch: "master",
   149  				HeadSHA:      "189d92cbf9ff857a39e6feccd32798ca700fb958",
   150  				Author:       "name1",
   151  			},
   152  			{
   153  				Number:       2,
   154  				Title:        "PR two - ignore",
   155  				Branch:       "two",
   156  				TargetBranch: "branch1",
   157  				HeadSHA:      "289d92cbf9ff857a39e6feccd32798ca700fb958",
   158  				Author:       "name2",
   159  			},
   160  			{
   161  				Number:       3,
   162  				Title:        "[filter] PR three",
   163  				Branch:       "three",
   164  				TargetBranch: "branch2",
   165  				HeadSHA:      "389d92cbf9ff857a39e6feccd32798ca700fb958",
   166  				Author:       "name3",
   167  			},
   168  			{
   169  				Number:       4,
   170  				Title:        "[ignore] PR four",
   171  				Branch:       "four",
   172  				TargetBranch: "branch3",
   173  				HeadSHA:      "489d92cbf9ff857a39e6feccd32798ca700fb958",
   174  				Author:       "name4",
   175  			},
   176  		},
   177  		nil,
   178  	)
   179  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{
   180  		{
   181  			TitleMatch: strp("\\[filter]"),
   182  		},
   183  	}
   184  	pullRequests, err := ListPullRequests(t.Context(), provider, filters)
   185  	require.NoError(t, err)
   186  	assert.Len(t, pullRequests, 1)
   187  	assert.Equal(t, "three", pullRequests[0].Branch)
   188  }
   189  
   190  func TestMultiFilterOrWithTitle(t *testing.T) {
   191  	provider, _ := NewFakeService(
   192  		t.Context(),
   193  		[]*PullRequest{
   194  			{
   195  				Number:       1,
   196  				Title:        "PR one - filter",
   197  				Branch:       "one",
   198  				TargetBranch: "master",
   199  				HeadSHA:      "189d92cbf9ff857a39e6feccd32798ca700fb958",
   200  				Author:       "name1",
   201  			},
   202  			{
   203  				Number:       2,
   204  				Title:        "PR two - ignore",
   205  				Branch:       "two",
   206  				TargetBranch: "branch1",
   207  				HeadSHA:      "289d92cbf9ff857a39e6feccd32798ca700fb958",
   208  				Author:       "name2",
   209  			},
   210  			{
   211  				Number:       3,
   212  				Title:        "[filter] PR three",
   213  				Branch:       "three",
   214  				TargetBranch: "branch2",
   215  				HeadSHA:      "389d92cbf9ff857a39e6feccd32798ca700fb958",
   216  				Author:       "name3",
   217  			},
   218  			{
   219  				Number:       4,
   220  				Title:        "[ignore] PR four",
   221  				Branch:       "four",
   222  				TargetBranch: "branch3",
   223  				HeadSHA:      "489d92cbf9ff857a39e6feccd32798ca700fb958",
   224  				Author:       "name4",
   225  			},
   226  		},
   227  		nil,
   228  	)
   229  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{
   230  		{
   231  			TitleMatch: strp("\\[filter]"),
   232  		},
   233  		{
   234  			TitleMatch: strp("- filter"),
   235  		},
   236  	}
   237  	pullRequests, err := ListPullRequests(t.Context(), provider, filters)
   238  	require.NoError(t, err)
   239  	assert.Len(t, pullRequests, 2)
   240  	assert.Equal(t, "one", pullRequests[0].Branch)
   241  	assert.Equal(t, "three", pullRequests[1].Branch)
   242  }
   243  
   244  func TestMultiFilterOr(t *testing.T) {
   245  	provider, _ := NewFakeService(
   246  		t.Context(),
   247  		[]*PullRequest{
   248  			{
   249  				Number:       1,
   250  				Title:        "PR one",
   251  				Branch:       "one",
   252  				TargetBranch: "master",
   253  				HeadSHA:      "189d92cbf9ff857a39e6feccd32798ca700fb958",
   254  				Author:       "name1",
   255  			},
   256  			{
   257  				Number:       2,
   258  				Title:        "PR two",
   259  				Branch:       "two",
   260  				TargetBranch: "master",
   261  				HeadSHA:      "289d92cbf9ff857a39e6feccd32798ca700fb958",
   262  				Author:       "name2",
   263  			},
   264  			{
   265  				Number:       3,
   266  				Title:        "PR three",
   267  				Branch:       "three",
   268  				TargetBranch: "master",
   269  				HeadSHA:      "389d92cbf9ff857a39e6feccd32798ca700fb958",
   270  				Author:       "name3",
   271  			},
   272  			{
   273  				Number:       4,
   274  				Title:        "PR four",
   275  				Branch:       "four",
   276  				TargetBranch: "master",
   277  				HeadSHA:      "489d92cbf9ff857a39e6feccd32798ca700fb958",
   278  				Author:       "name4",
   279  			},
   280  		},
   281  		nil,
   282  	)
   283  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{
   284  		{
   285  			BranchMatch: strp("w"),
   286  		},
   287  		{
   288  			BranchMatch: strp("r"),
   289  		},
   290  	}
   291  	pullRequests, err := ListPullRequests(t.Context(), provider, filters)
   292  	require.NoError(t, err)
   293  	assert.Len(t, pullRequests, 3)
   294  	assert.Equal(t, "two", pullRequests[0].Branch)
   295  	assert.Equal(t, "three", pullRequests[1].Branch)
   296  	assert.Equal(t, "four", pullRequests[2].Branch)
   297  }
   298  
   299  func TestMultiFilterOrWithTargetBranchFilterOrWithTitleFilter(t *testing.T) {
   300  	provider, _ := NewFakeService(
   301  		t.Context(),
   302  		[]*PullRequest{
   303  			{
   304  				Number:       1,
   305  				Title:        "PR one",
   306  				Branch:       "one",
   307  				TargetBranch: "master",
   308  				HeadSHA:      "189d92cbf9ff857a39e6feccd32798ca700fb958",
   309  				Author:       "name1",
   310  			},
   311  			{
   312  				Number:       2,
   313  				Title:        "PR two",
   314  				Branch:       "two",
   315  				TargetBranch: "branch1",
   316  				HeadSHA:      "289d92cbf9ff857a39e6feccd32798ca700fb958",
   317  				Author:       "name2",
   318  			},
   319  			{
   320  				Number:       3,
   321  				Title:        "PR three",
   322  				Branch:       "three",
   323  				TargetBranch: "branch2",
   324  				HeadSHA:      "389d92cbf9ff857a39e6feccd32798ca700fb958",
   325  				Author:       "name3",
   326  			},
   327  			{
   328  				Number:       4,
   329  				Title:        "PR four",
   330  				Branch:       "four",
   331  				TargetBranch: "branch3",
   332  				HeadSHA:      "489d92cbf9ff857a39e6feccd32798ca700fb958",
   333  				Author:       "name4",
   334  			},
   335  			{
   336  				Number:       5,
   337  				Title:        "PR title is different than branch name",
   338  				Branch:       "five",
   339  				TargetBranch: "branch3",
   340  				HeadSHA:      "489d92cbf9ff857a39e6feccd32798ca700fb958",
   341  				Author:       "name5",
   342  			},
   343  		},
   344  		nil,
   345  	)
   346  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{
   347  		{
   348  			BranchMatch:       strp("w"),
   349  			TargetBranchMatch: strp("1"),
   350  		},
   351  		{
   352  			BranchMatch:       strp("r"),
   353  			TargetBranchMatch: strp("3"),
   354  		},
   355  		{
   356  			TitleMatch: strp("two"),
   357  		},
   358  		{
   359  			BranchMatch: strp("five"),
   360  			TitleMatch:  strp("PR title is different than branch name"),
   361  		},
   362  	}
   363  	pullRequests, err := ListPullRequests(t.Context(), provider, filters)
   364  	require.NoError(t, err)
   365  	assert.Len(t, pullRequests, 3)
   366  	assert.Equal(t, "two", pullRequests[0].Branch)
   367  	assert.Equal(t, "four", pullRequests[1].Branch)
   368  	assert.Equal(t, "five", pullRequests[2].Branch)
   369  	assert.Equal(t, "PR title is different than branch name", pullRequests[2].Title)
   370  }
   371  
   372  func TestNoFilters(t *testing.T) {
   373  	provider, _ := NewFakeService(
   374  		t.Context(),
   375  		[]*PullRequest{
   376  			{
   377  				Number:       1,
   378  				Title:        "PR one",
   379  				Branch:       "one",
   380  				TargetBranch: "master",
   381  				HeadSHA:      "189d92cbf9ff857a39e6feccd32798ca700fb958",
   382  				Author:       "name1",
   383  			},
   384  			{
   385  				Number:       2,
   386  				Title:        "PR two",
   387  				Branch:       "two",
   388  				TargetBranch: "master",
   389  				HeadSHA:      "289d92cbf9ff857a39e6feccd32798ca700fb958",
   390  				Author:       "name2",
   391  			},
   392  		},
   393  		nil,
   394  	)
   395  	filters := []argoprojiov1alpha1.PullRequestGeneratorFilter{}
   396  	repos, err := ListPullRequests(t.Context(), provider, filters)
   397  	require.NoError(t, err)
   398  	assert.Len(t, repos, 2)
   399  	assert.Equal(t, "one", repos[0].Branch)
   400  	assert.Equal(t, "two", repos[1].Branch)
   401  }