=== modified file 'dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/FredSpringWebTest.java' --- dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/FredSpringWebTest.java 2013-03-07 09:24:35 +0000 +++ dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/FredSpringWebTest.java 2013-03-07 15:41:40 +0000 @@ -27,7 +27,9 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.codehaus.jackson.map.ObjectMapper; import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.web.webapi.v1.utils.ObjectMapperFactoryBean; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -46,6 +48,8 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.filter.CharacterEncodingFilter; +import org.springframework.web.filter.ShallowEtagHeaderFilter; import java.lang.reflect.Method; import java.util.ArrayList; @@ -72,6 +76,8 @@ protected MockMvc mvc; + protected ObjectMapper objectMapper; + public MockHttpSession getSession( String... authorities ) { SecurityContextHolder.getContext().setAuthentication( getPrincipal( authorities ) ); @@ -107,8 +113,14 @@ @Before public void setup() throws Exception { + objectMapper = new ObjectMapperFactoryBean().getObject(); + + CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); + characterEncodingFilter.setEncoding( "UTF-8" ); + characterEncodingFilter.setForceEncoding( true ); + mvc = MockMvcBuilders.webAppContextSetup( wac ) - .addFilter( filterChainProxy ) + .addFilters( characterEncodingFilter, new ShallowEtagHeaderFilter(), filterChainProxy ) .build(); executeStartupRoutines(); === modified file 'dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/domain/Facility.java' --- dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/domain/Facility.java 2013-03-04 12:07:19 +0000 +++ dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/domain/Facility.java 2013-03-07 15:41:40 +0000 @@ -54,8 +54,7 @@ private String name; // Active = true/false indicates whether the facility is active or not - @NotNull - private Boolean active; + private Boolean active = true; // URL link to the unique ID API resource for the facility private String url; @@ -81,6 +80,24 @@ { } + public Facility( String name ) + { + this.name = name; + } + + public Facility( String name, Boolean active ) + { + this.name = name; + this.active = active; + } + + public Facility( String name, Boolean active, List coordinates ) + { + this.name = name; + this.active = active; + this.coordinates = coordinates; + } + public String getId() { return id; === modified file 'dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/utils/GeoUtils.java' --- dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/utils/GeoUtils.java 2013-03-05 05:20:25 +0000 +++ dhis-2/dhis-web/dhis-web-api-fred/src/main/java/org/hisp/dhis/web/webapi/v1/utils/GeoUtils.java 2013-03-07 15:41:40 +0000 @@ -75,12 +75,12 @@ { List list = new ObjectMapper().readValue( coordinatesString, List.class ); - if ( from == CoordinateOrder.COORDINATE_LATLNG ) + if ( !list.isEmpty() && from == CoordinateOrder.COORDINATE_LATLNG ) { coordinates.lat = convertToDouble( list.get( 0 ) ); coordinates.lng = convertToDouble( list.get( 1 ) ); } - else if ( from == CoordinateOrder.COORDINATE_LNGLAT ) + else if ( !list.isEmpty() && from == CoordinateOrder.COORDINATE_LNGLAT ) { coordinates.lat = convertToDouble( list.get( 1 ) ); coordinates.lng = convertToDouble( list.get( 0 ) ); === modified file 'dhis-2/dhis-web/dhis-web-api-fred/src/test/java/org/hisp/dhis/web/webapi/v1/controller/FacilityControllerTest.java' --- dhis-2/dhis-web/dhis-web-api-fred/src/test/java/org/hisp/dhis/web/webapi/v1/controller/FacilityControllerTest.java 2013-03-07 12:59:06 +0000 +++ dhis-2/dhis-web/dhis-web-api-fred/src/test/java/org/hisp/dhis/web/webapi/v1/controller/FacilityControllerTest.java 2013-03-07 15:41:40 +0000 @@ -27,9 +27,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hamcrest.Matchers; import org.hisp.dhis.common.IdentifiableObjectManager; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.web.FredSpringWebTest; +import org.hisp.dhis.web.webapi.v1.domain.Facility; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -121,6 +123,20 @@ mvc.perform( get( "/v1/facilities/" + organisationUnit.getUid() ).session( session ).accept( MediaType.APPLICATION_JSON ) ) .andExpect( content().contentType( MediaType.APPLICATION_JSON ) ) .andExpect( jsonPath( "$.name" ).value( "OrgUnitA" ) ) + .andExpect( header().string( "ETag", Matchers.notNullValue() ) ) + .andExpect( status().isOk() ); + } + + @Test + public void testGetFacilityVerifyPresenceOfETag() throws Exception + { + OrganisationUnit organisationUnit = createOrganisationUnit( 'A' ); + manager.save( organisationUnit ); + + MockHttpSession session = getSession( "ALL" ); + + mvc.perform( get( "/v1/facilities/" + organisationUnit.getUid() ).session( session ).accept( MediaType.APPLICATION_JSON ) ) + .andExpect( header().string( "ETag", Matchers.notNullValue() ) ) .andExpect( status().isOk() ); } @@ -146,4 +162,33 @@ mvc.perform( put( "/v1/facilities/abc123" ).content( "{}" ).session( session ).contentType( MediaType.APPLICATION_JSON ) ) .andExpect( status().isNotFound() ); } + + @Test + public void testPostName() throws Exception + { + MockHttpSession session = getSession( "ALL" ); + + Facility facility = new Facility( "FacilityA" ); + + mvc.perform( post( "/v1/facilities" ).content( objectMapper.writeValueAsString( facility ) ) + .session( session ).contentType( MediaType.APPLICATION_JSON ) ) + .andExpect( content().contentType( MediaType.APPLICATION_JSON ) ) + .andExpect( jsonPath( "$.name" ).value( "FacilityA" ) ) + .andExpect( status().isCreated() ); + } + + @Test + public void testPostNameActive() throws Exception + { + MockHttpSession session = getSession( "ALL" ); + + Facility facility = new Facility( "FacilityA", false ); + + mvc.perform( post( "/v1/facilities" ).content( objectMapper.writeValueAsString( facility ) ) + .session( session ).contentType( MediaType.APPLICATION_JSON ) ) + .andExpect( content().contentType( MediaType.APPLICATION_JSON ) ) + .andExpect( jsonPath( "$.name" ).value( "FacilityA" ) ) + .andExpect( jsonPath( "$.active" ).value( false ) ) + .andExpect( status().isCreated() ); + } }