github.com/zppinho/prow@v0.0.0-20240510014325-1738badeb017/pkg/plugins/testfreeze/testfreeze_test.go (about)

     1  /*
     2  Copyright 2022 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package testfreeze
    18  
    19  import (
    20  	"errors"
    21  	"testing"
    22  
    23  	"github.com/sirupsen/logrus"
    24  	"github.com/stretchr/testify/assert"
    25  
    26  	"sigs.k8s.io/prow/pkg/github"
    27  	"sigs.k8s.io/prow/pkg/plugins/testfreeze/checker"
    28  	"sigs.k8s.io/prow/pkg/plugins/testfreeze/testfreezefakes"
    29  )
    30  
    31  var errTest = errors.New("")
    32  
    33  func TestHandle(t *testing.T) {
    34  	t.Parallel()
    35  
    36  	for _, tc := range []struct {
    37  		name              string
    38  		action            github.PullRequestEventAction
    39  		org, repo, branch string
    40  		prepare           func(*testfreezefakes.FakeVerifier)
    41  		assert            func(*testfreezefakes.FakeVerifier, error)
    42  	}{
    43  		{
    44  			name:   "success in test freeze",
    45  			action: github.PullRequestActionOpened,
    46  			org:    defaultKubernetesRepoAndOrg,
    47  			repo:   defaultKubernetesRepoAndOrg,
    48  			branch: defaultKubernetesBranch,
    49  			prepare: func(mock *testfreezefakes.FakeVerifier) {
    50  				mock.CheckInTestFreezeReturns(&checker.Result{
    51  					InTestFreeze:    true,
    52  					Tag:             "v1.23.0",
    53  					Branch:          "release-1.23",
    54  					LastFastForward: "Wed May  4 16:15:37 CEST 2022",
    55  				}, nil)
    56  			},
    57  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
    58  				assert.Nil(t, err)
    59  				assert.Equal(t, 1, mock.CreateCommentCallCount())
    60  				_, _, _, _, comment := mock.CreateCommentArgsForCall(0)
    61  				assert.Contains(t, comment, "Please note that we're already")
    62  				assert.Contains(t, comment, "for the `release-1.23` branch")
    63  				assert.Contains(t, comment, "Fast forwards are scheduled to happen every 6 hours, whereas the most recent run was: Wed May  4 16:15:37 CEST 2022")
    64  			},
    65  		},
    66  		{
    67  			name:   "success not in test freeze",
    68  			action: github.PullRequestActionOpened,
    69  			org:    defaultKubernetesRepoAndOrg,
    70  			repo:   defaultKubernetesRepoAndOrg,
    71  			branch: defaultKubernetesBranch,
    72  			prepare: func(mock *testfreezefakes.FakeVerifier) {
    73  				mock.CheckInTestFreezeReturns(&checker.Result{}, nil)
    74  			},
    75  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
    76  				assert.Nil(t, err)
    77  				assert.Equal(t, 0, mock.CreateCommentCallCount())
    78  			},
    79  		},
    80  		{
    81  			name:    "success filtered action",
    82  			action:  github.PullRequestActionClosed,
    83  			org:     defaultKubernetesRepoAndOrg,
    84  			repo:    defaultKubernetesRepoAndOrg,
    85  			branch:  defaultKubernetesBranch,
    86  			prepare: func(mock *testfreezefakes.FakeVerifier) {},
    87  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
    88  				assert.Zero(t, mock.CreateCommentCallCount())
    89  				assert.Nil(t, err)
    90  			},
    91  		},
    92  		{
    93  			name:    "success filtered org",
    94  			action:  github.PullRequestActionOpened,
    95  			org:     "invalid",
    96  			repo:    defaultKubernetesRepoAndOrg,
    97  			branch:  defaultKubernetesBranch,
    98  			prepare: func(mock *testfreezefakes.FakeVerifier) {},
    99  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
   100  				assert.Zero(t, mock.CreateCommentCallCount())
   101  				assert.Nil(t, err)
   102  			},
   103  		},
   104  		{
   105  			name:    "success filtered repo",
   106  			action:  github.PullRequestActionOpened,
   107  			org:     defaultKubernetesRepoAndOrg,
   108  			repo:    "invalid",
   109  			branch:  defaultKubernetesBranch,
   110  			prepare: func(mock *testfreezefakes.FakeVerifier) {},
   111  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
   112  				assert.Zero(t, mock.CreateCommentCallCount())
   113  				assert.Nil(t, err)
   114  			},
   115  		},
   116  		{
   117  			name:    "success filtered branch",
   118  			action:  github.PullRequestActionOpened,
   119  			org:     defaultKubernetesRepoAndOrg,
   120  			repo:    defaultKubernetesRepoAndOrg,
   121  			branch:  "invalid",
   122  			prepare: func(mock *testfreezefakes.FakeVerifier) {},
   123  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
   124  				assert.Zero(t, mock.CreateCommentCallCount())
   125  				assert.Nil(t, err)
   126  			},
   127  		},
   128  		{
   129  			name:   "error CheckInTestFreeze",
   130  			action: github.PullRequestActionOpened,
   131  			org:    defaultKubernetesRepoAndOrg,
   132  			repo:   defaultKubernetesRepoAndOrg,
   133  			branch: defaultKubernetesBranch,
   134  			prepare: func(mock *testfreezefakes.FakeVerifier) {
   135  				mock.CheckInTestFreezeReturns(nil, errTest)
   136  			},
   137  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
   138  				assert.NotNil(t, err)
   139  			},
   140  		},
   141  		{
   142  			name:   "error CreateComment",
   143  			action: github.PullRequestActionOpened,
   144  			org:    defaultKubernetesRepoAndOrg,
   145  			repo:   defaultKubernetesRepoAndOrg,
   146  			branch: defaultKubernetesBranch,
   147  			prepare: func(mock *testfreezefakes.FakeVerifier) {
   148  				mock.CheckInTestFreezeReturns(&checker.Result{
   149  					InTestFreeze: true,
   150  				}, nil)
   151  				mock.CreateCommentReturns(errTest)
   152  			},
   153  			assert: func(mock *testfreezefakes.FakeVerifier, err error) {
   154  				assert.NotNil(t, err)
   155  			},
   156  		},
   157  	} {
   158  		t.Run(tc.name, func(t *testing.T) {
   159  			mock := &testfreezefakes.FakeVerifier{}
   160  			tc.prepare(mock)
   161  
   162  			sut := newHandler()
   163  			sut.verifier = mock
   164  
   165  			entry := logrus.NewEntry(logrus.StandardLogger())
   166  			err := sut.handle(entry, nil, tc.action, 0, tc.org, tc.repo, tc.branch)
   167  			tc.assert(mock, err)
   168  		})
   169  	}
   170  }