github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/test/groovy/com/sap/piper/cm/StepHelpersTest.groovy (about)

     1  package com.sap.piper.cm
     2  
     3  import org.junit.Before
     4  import org.junit.Rule
     5  import org.junit.Test
     6  import org.junit.rules.RuleChain
     7  
     8  import util.BasePiperTest
     9  import util.JenkinsLoggingRule
    10  import util.Rules
    11  
    12  class StepHelpersTest extends BasePiperTest {
    13  
    14      // Configuration is not checked by the tests here.
    15      // We simply assume it fits. It is the duty of the
    16      // step related tests to ensure the configuration is valid.
    17      def params = [changeManagement:
    18          [git: [
    19                  from: 'HEAD~1',
    20                  to: 'HEAD',
    21                  format: '%b'
    22              ],
    23              changeDocumentLabel: "ChangeDocument:",
    24              transportRequestLabel: "TransportRequest:",
    25          ]
    26      ]
    27  
    28      private Map getChangeDocumentIdReceivedParameters = [:]
    29      private Map getTransportRequestIdReceivedParameters = [:]
    30  
    31      @Before
    32      public void setup() {
    33          getChangeDocumentIdReceivedParameters.clear()
    34          getTransportRequestIdReceivedParameters.clear()
    35      }
    36  
    37      JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
    38  
    39      @Rule
    40      public RuleChain rules = Rules.getCommonRules(this)
    41                                    .around(loggingRule)
    42  
    43      private ChangeManagement cm = new ChangeManagement(nullScript) {
    44  
    45          String getTransportRequestId(
    46                  String from,
    47                  String to,
    48                  String label,
    49                  String format
    50          ) {
    51              getTransportRequestIdReceivedParameters['from'] = from
    52              getTransportRequestIdReceivedParameters['to'] = to
    53              getTransportRequestIdReceivedParameters['label'] = label
    54              getTransportRequestIdReceivedParameters['format'] = format
    55              return '097'
    56          }
    57  
    58          String getChangeDocumentId(
    59                  String from,
    60                  String to,
    61                  String label,
    62                  String format
    63          ) {
    64              getChangeDocumentIdReceivedParameters['from'] = from
    65              getChangeDocumentIdReceivedParameters['to'] = to
    66              getChangeDocumentIdReceivedParameters['label'] = label
    67              getChangeDocumentIdReceivedParameters['format'] = format
    68              return '001'
    69          }
    70      }
    71  
    72      @Test
    73      public void transportRequestIdViaCommitHistoryTest() {
    74  
    75          def transportRequestId = StepHelpers.getTransportRequestId(cm, nullScript, params)
    76  
    77          assert transportRequestId == '097'
    78          assert getTransportRequestIdReceivedParameters ==
    79          [
    80              from: 'HEAD~1',
    81              to: 'HEAD',
    82              label: 'TransportRequest:',
    83              format: '%b'
    84          ]
    85  
    86          // We cache the value. Otherwise we have to retrieve it each time from the
    87          // commit history.
    88          assert nullScript.commonPipelineEnvironment.getValue('transportRequestId') == '097'
    89      }
    90  
    91      public void changeDocumentIdViaCommitHistoryTest() {
    92  
    93          def changeDocumentId = StepHelpers.getChangeDocumentId(cm, nullScript, params)
    94  
    95          assert changeDocumentId == '001'
    96          assert getChangeDocumentIdReceivedParameters ==
    97          [
    98              from: 'HEAD~1',
    99              to: 'HEAD',
   100              label: 'ChangeDocument:',
   101              format: '%b'
   102          ]
   103  
   104          // We cache the value. Otherwise we have to retrieve it each time from the
   105          // commit history.
   106          assert nullScript.commonPipelineEnvironment.getChangeDocumentId() == '001'
   107      }
   108  
   109      @Test
   110      public void transportRequestIdViaCommonPipelineEnvironmentTest() {
   111  
   112          nullScript.commonPipelineEnvironment.setValue('transportRequestId', '098')
   113          def transportRequestId = StepHelpers.getTransportRequestId(cm, nullScript, params)
   114  
   115          assert transportRequestId == '098'
   116  
   117          // getTransportRequestId gets not called on ChangeManagement util class
   118          // in this case.
   119          assert getTransportRequestIdReceivedParameters == [:]
   120      }
   121  
   122      @Test
   123      public void transportRequestIdViaParametersTest() {
   124  
   125          params << [transportRequestId: '099']
   126  
   127          def transportRequestId = StepHelpers.getTransportRequestId(cm, nullScript, params)
   128  
   129          assert transportRequestId == '099'
   130  
   131          // In case we get the transport request id via parameters we do not cache it
   132          // Caller knows the transport request id anyway. So the caller can provide it with
   133          // each call.
   134          assert nullScript.commonPipelineEnvironment.getValue('transportRequestId') == null
   135  
   136          // getTransportRequestId gets not called on ChangeManagement util class
   137          // in this case.
   138          assert getTransportRequestIdReceivedParameters == [:]
   139      }
   140  
   141      @Test
   142      public void transportRequestIdNotProvidedTest() {
   143  
   144          loggingRule.expect('Cannot retrieve transportRequestId from commit history')
   145  
   146          def cm = new ChangeManagement(nullScript) {
   147          String getTransportRequestId(
   148                  String from,
   149                  String to,
   150                  String label,
   151                  String format
   152          )   {
   153                  throw new ChangeManagementException('Cannot retrieve transport request id')
   154              }
   155          }
   156  
   157          def transportRequestId = StepHelpers.getTransportRequestId(cm, nullScript, params)
   158          assert transportRequestId == null
   159      }
   160  
   161      @Test
   162      public void changeDocumentIdViaCommonPipelineEnvironmentTest() {
   163  
   164          nullScript.commonPipelineEnvironment.setChangeDocumentId('002')
   165          def transportRequestId = StepHelpers.getChangeDocumentId(cm, nullScript, params)
   166  
   167          assert transportRequestId == '002'
   168  
   169          // getChangeDocumentId gets not called on ChangeManagement util class
   170          // in this case.
   171          assert getChangeDocumentIdReceivedParameters == [:]
   172      }
   173  
   174      @Test
   175      public void changeDocumentIdViaParametersTest() {
   176  
   177          params << [changeDocumentId: '003']
   178  
   179          def transportRequestId = StepHelpers.getChangeDocumentId(cm, nullScript, params)
   180  
   181          assert transportRequestId == '003'
   182  
   183          // In case we get the change document id via parameters we do not cache it
   184          // Caller knows the change document id anyway. So the caller can provide it with
   185          // each call.
   186          assert nullScript.commonPipelineEnvironment.getChangeDocumentId() == null
   187  
   188          // getChangeDocumentId gets not called on ChangeManagement util class
   189          // in this case.
   190          assert getChangeDocumentIdReceivedParameters == [:]
   191      }
   192  
   193      @Test
   194      public void changeDocumentIdNotProvidedTest() {
   195  
   196          loggingRule.expect('[WARN] Cannot retrieve changeDocumentId from commit history')
   197  
   198          def cm = new ChangeManagement(nullScript) {
   199              String getChangeDocumentId(
   200                      String from,
   201                      String to,
   202                      String label,
   203                      String format
   204              ) {
   205                  throw new ChangeManagementException('Cannot retrieve change document ids')
   206              }
   207          }
   208  
   209          def changeDocumentId = StepHelpers.getChangeDocumentId(cm, nullScript, params)
   210  
   211          assert changeDocumentId == null
   212      }
   213  
   214      @Test
   215      public void reqidViaConfigTest() {
   216  
   217          nullScript.commonPipelineEnvironment.setValue('transportRequestId', 'unused')
   218  
   219          def calledWithParameters = null
   220  
   221          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   222              {
   223                  params, stepName, metaData, creds ->
   224                      if(stepName.equals("transportRequestReqIDFromGit")) {
   225                          calledWithParameters = params
   226                      }
   227              }
   228          )
   229  
   230          def transportRequestId = StepHelpers.getTransportRequestId(nullScript, [transportRequestId: '100'])
   231  
   232          assert transportRequestId == '100'
   233          assert calledWithParameters == null
   234      }
   235  
   236      @Test
   237      public void reqidViaCommonPipelineEnvironmentTest() {
   238  
   239          nullScript.commonPipelineEnvironment.setValue('transportRequestId', '200')
   240  
   241          def calledWithParameters = null
   242  
   243          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   244              {
   245                  params, stepName, metaData, creds ->
   246                      if(stepName.equals("transportRequestReqIDFromGit")) {
   247                          calledWithParameters = params
   248                      }
   249              }
   250          )
   251  
   252          def transportRequestId = StepHelpers.getTransportRequestId(nullScript, params)
   253  
   254          assert transportRequestId == '200'
   255          assert calledWithParameters == null
   256      }
   257  
   258      @Test
   259      public void reqidViaCommitHistoryTest() {
   260  
   261          def calledWithParameters = null
   262  
   263          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   264              {
   265                  params, stepName, metaData, creds ->
   266                      if(stepName.equals("transportRequestReqIDFromGit")) {
   267                          nullScript.commonPipelineEnvironment.setValue('transportRequestId', '300')
   268                      }
   269              }
   270          )
   271  
   272          def transportRequestId = StepHelpers.getTransportRequestId(nullScript, params)
   273  
   274          assert transportRequestId == '300'
   275          assert nullScript.commonPipelineEnvironment.getValue('transportRequestId') == '300'
   276      }
   277  
   278      @Test
   279      public void reqidNotProvidedTest() {
   280  
   281          def calledWithParameters = null
   282  
   283          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   284              {
   285                  params, stepName, metaData, creds ->
   286                      if(stepName.equals("transportRequestReqIDFromGit")) {
   287                          calledWithParameters = params
   288                      }
   289              }
   290          )
   291  
   292          loggingRule.expect('[INFO] Retrieving transportRequestId from commit history')
   293          loggingRule.expect('[WARN] Cannot retrieve transportRequestId from commit history')
   294  
   295          def transportRequestId = StepHelpers.getTransportRequestId(nullScript, params)
   296  
   297          assert transportRequestId == null
   298          assert calledWithParameters != null
   299      }
   300  
   301      @Test
   302      public void docidViaConfigTest() {
   303  
   304          nullScript.commonPipelineEnvironment.setValue('changeDocumentId', 'unused')
   305  
   306          def calledWithParameters = null
   307  
   308          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   309              {
   310                  params, stepName, metaData, creds ->
   311                      if(stepName.equals("transportRequestDocIDFromGit")) {
   312                          calledWithParameters = params
   313                      }
   314              }
   315          )
   316  
   317          def changeDocumentId = StepHelpers.getChangeDocumentId(nullScript, [changeDocumentId: '100'])
   318  
   319          assert changeDocumentId == '100'
   320          assert calledWithParameters == null
   321      }
   322  
   323      @Test
   324      public void docidViaCommonPipelineEnvironmentTest() {
   325  
   326          nullScript.commonPipelineEnvironment.setValue('changeDocumentId', '200')
   327  
   328          def calledWithParameters = null
   329  
   330          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   331              {
   332                  params, stepName, metaData, creds ->
   333                      if(stepName.equals("transportRequestDocIDFromGit")) {
   334                          calledWithParameters = params
   335                      }
   336              }
   337          )
   338  
   339          def changeDocumentId = StepHelpers.getChangeDocumentId(nullScript, params)
   340  
   341          assert changeDocumentId == '200'
   342          assert calledWithParameters == null
   343      }
   344  
   345      @Test
   346      public void docidViaCommitHistoryTest() {
   347  
   348          def calledWithParameters = null
   349  
   350          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   351              {
   352                  params, stepName, metaData, creds ->
   353                      if(stepName.equals("transportRequestDocIDFromGit")) {
   354                          nullScript.commonPipelineEnvironment.setValue('changeDocumentId', '300')
   355                      }
   356              }
   357          )
   358  
   359          def changeDocumentId = StepHelpers.getChangeDocumentId(nullScript, params)
   360  
   361          assert changeDocumentId == '300'
   362          assert nullScript.commonPipelineEnvironment.getValue('changeDocumentId') == '300'
   363      }
   364  
   365      @Test
   366      public void docidNotProvidedTest() {
   367  
   368          def calledWithParameters = null
   369  
   370          helper.registerAllowedMethod( 'piperExecuteBin', [Map, String, String, List],
   371              {
   372                  params, stepName, metaData, creds ->
   373                      if(stepName.equals("transportRequestDocIDFromGit")) {
   374                          calledWithParameters = params
   375                      }
   376              }
   377          )
   378  
   379          loggingRule.expect('[INFO] Retrieving changeDocumentId from commit history')
   380          loggingRule.expect('[WARN] Cannot retrieve changeDocumentId from commit history')
   381  
   382          def changeDocumentId = StepHelpers.getChangeDocumentId(nullScript, params)
   383  
   384          assert changeDocumentId == null
   385          assert calledWithParameters != null
   386      }
   387  }