This class, to begin with, will have a generic, public httpRequest method:

/**
 * Provides Jenkins functionality required by the other utility classes.
 */
//Info: This class helps to reduce the Jenkins plug-in specific code clutter in 
the utility classes.
// All the Jenkins-specific code should be present in this(and more, if 
required) classes.
final class JenkinsUtil {

    private def script

    public JenkinsUtil(def script) {
        this.script = script
    }

    /**
     *
     * @param link
     * @param parameters Refer the httpRequest plug-in <a 
href="https://jenkins.io/doc/pipeline/steps/http_request/";>documentation</a> 
for acceptable parameters.
     * @return
     */
    public def initiateHttpRequest(String link, Map<String, Object> parameters) 
{

        //Remove
        script.println "Link: ${link}, parameters: ${parameters}"

        String validationErrorMessage = 
validateHttpRequestParameters(parameters)

        if(validationErrorMessage != null && !validationErrorMessage.isEmpty()){
            script.println "Validation error in httpRequest 
${validationErrorMessage}"
            return validationErrorMessage
        }

        String parametersString = 
getAppendedParametersForHttpRequest(parameters)

        script.httpRequest url: link,
                parametersString
    }

    private String validateHttpRequestParameters(Map<String,Object>parameters){

        if(parameters == null || parameters.isEmpty()){
            return "Parameters for the httpRequest cannot be null/empty."
        }

        //TODO:If the parameters contain anything other than the keys mentioned 
in the official documentation, return

        //TODO:If the values for any of the parameter keys deviate from what 
the acceptable values as per the official documentation are, return
    }

    private String getAppendedParametersForHttpRequest(Map<String, String> 
parameters){

        StringBuffer parametersSb = new StringBuffer()

        parameters.each{
            key, value -> parametersSb << key+":"+value+","
        }

        parametersSb.deleteCharAt(parametersSb.length()-1)

        //Remove
        script.println "parameters are ${parametersSb.toString()}"
        return parametersSb.toString()
    }
}

Suppose, I try to write a unit test for the above class:

import spock.lang.Specification

class JenkinsUtilTest extends Specification {

def "InitiateHttpRequest"() {

given:
        JenkinsUtil jenkinsUtil = new JenkinsUtil(/*How to create a script 
instance*/)
        String url = "https://ci.prod-jenkins.com/cjoc/";
        Map<String,Object>parameters = new  HashMap<>()
        parameters.put("ignoreSslErrors",true)

        when:
        def response = jenkinsUtil.initiateHttpRequest(url,parameters)

        then:
        response.contains("401")
    }
}

}
}

Questions:

   1. How do I create a script instance to pass to the JenkinsUtil(Maybe, a 
   Expando or Script instance)
   2. Is there a way(say, by including some Jenkins dependencies in 
   build.gradle) to simulate the 'script.httpRequest' call i.e simulate the 
   Jenkins httpRequest plugin
   3. Is it correct to even think of unit-testing such a class
   4. Is it correct to even think of creating such a class
   

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/04b3f980-b59a-4b8a-86cd-7b55cf54ccea%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to