1

I have written this simple service for doing subrequest via HTTPBuilder, to get instance of class representing obtained page for further use:

package cmspage

import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.GET
import static groovyx.net.http.ContentType.HTML

class CmsPageService {
    static transactional = false
    final String SUBREQUEST_HOST = "www.mydomainforsubrequest.com"

    CmsPage getCmsPageInstance(Object request) {
        String host = request.getServerName()
        String url = request.getRequestURI()
        HashMap queryMap = this.queryStringToMap(request.getQueryString())
        return this.subRequest(host, url, queryMap)
    }

    CmsPage getCmsPageInstance(String host, String url, String queryString = null) {
        HashMap queryMap = queryStringToMap(queryString)
        return this.subRequest(host, url, queryMap)
    }

    private CmsPage subRequest(String host, String url, HashMap queryMap = null) {
        CmsPage cmsPageInstance = new CmsPage()
        HTTPBuilder http = new HTTPBuilder()
        http.request("http://" + SUBREQUEST_HOST, GET, HTML) { req ->
            uri.path = url
            uri.query = queryMap
            headers.'X-Original-Host' = 'www.mydomain.com'
            response.success = { resp, html ->
                cmsPageInstance.responseStatusCode = resp.status
                if (resp.status < 400) {
                    cmsPageInstance.html = html
                }
            }
            response.failure = { resp ->
                cmsPageInstance.responseStatusCode = resp.status
                return null
            }
        }
        return cmsPageInstance
    }

    private HashMap queryStringToMap(String queryString) {
        if (queryString) {
            queryString = queryString.replace("?", "")
            String[] splitToParameters = queryString.split("&")
            HashMap queryMap = new HashMap()
            splitToParameters.each {
                String[] split = it.split("=")
                for (int i = 0; i < split.length; i += 2) {
                    queryMap.put(split[i], split[i + 1])
                }
            }
            return queryMap
        } else return null
    }
}

Now I need to write unit test for this service. I would like to use some simple html document to test it instead of testing some "live" site. But I do not know how? Can anybody help me?

dusty
  • 189
  • 1
  • 2
  • 12

1 Answers1

1

Jadler should suite you well. Check its documentation and this post on basic usage.

Community
  • 1
  • 1
kaskelotti
  • 4,709
  • 9
  • 45
  • 72