torsdag 27 januari 2011

Grails functional testing json rest services

As stated here: there is no simple way to parse out json/xml responses when you´re testing a rest web service with the Grails functional testing plugin.
And it isn't really clear (to me at least) how you can post json data in the request.
Here is an example how I managed to do it. To parse the response I used dozer:

import grails.converters.JSON

@Grab(group='net.sf.dozer', module='dozer', version='5.0')
import org.dozer.DozerBeanMapper

class MyLittlePogo{
def name
def status
}

class TempFunctionalTests extends functionaltestplugin.FunctionalTestCase {

def dozerBeanMapper = new DozerBeanMapper()

public void testPostContactSettings() throws Exception {
post("/api/rest/currentuser/contactsettings") {
headers.put("Content-Type", "application/json;charset=UTF-8")
body {
"""${new JSON(
new MyLittlePogo(
name: "aname",
status: "INSTALLED"))}"""
}
}

// Convert the response to an instance of MyLittlePogo
def responseText = new String(response.responseData_.body_)
def jsonObj = JSON.parse(responseText)
MyLittlePogo myLittlePogo = dozerBeanMapper.map( jsonObj, MyLittlePogo )

assertStatus 200
assertNotNull myLittlePogo
}
}

fredag 7 januari 2011

Grails and nonProxyHosts

When you´re working with Grails behind a proxy you might not be able to download dependencies.
This can be solved if you run add-proxy followed by set-proxy. In my application I have some soap clients, which fails when run through a proxy.
I need my soap call to go to the server directly, not going through the proxy.
This can be acheived by editing BuildConfig.groovy:

System.properties.put("http.nonProxyHosts", "company.host1.se|company.host2.se")