package org.activityinfo.server.endpoint.rest; import com.google.common.collect.Lists; import org.activityinfo.fixtures.InjectionSupport; import org.activityinfo.server.command.CommandTestCase2; import org.activityinfo.server.database.OnDataSet; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.ArrayNode; import org.junit.Test; import org.junit.runner.RunWith; import java.io.IOException; import java.util.List; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @RunWith(InjectionSupport.class) @OnDataSet("/dbunit/sites-simple1.db.xml") public class SitesResourcesTest extends CommandTestCase2 { private static class QueryParameters { private final List<Integer> activityIds = Lists.newArrayList(); private final List<Integer> databaseIds = Lists.newArrayList(); private final List<Integer> indicatorIds = Lists.newArrayList(); private final List<Integer> partnerIds = Lists.newArrayList(); private final List<Integer> attributeIds = Lists.newArrayList(); private final List<Integer> locationIds = Lists.newArrayList(); private String format = null; } @Test public void indicatorsArePresent() throws IOException { QueryParameters parameters = new QueryParameters(); parameters.databaseIds.add(2); String json = query(parameters); System.out.println(json); ObjectMapper mapper = new ObjectMapper(); JsonFactory factory = mapper.getJsonFactory(); JsonParser jp = factory.createJsonParser(json); ArrayNode array = (ArrayNode) mapper.readTree(jp); assertThat(array.size(), equalTo(3)); JsonNode site6 = getSiteById(array, 6); assertThat(site6.path("id").asInt(), equalTo(6)); assertThat(site6.path("activity").asInt(), equalTo(4)); double indicatorValue = site6.path("indicatorValues").path("6").asDouble(); assertThat(indicatorValue, equalTo(70d)); } @Test public void filterByPartner() throws IOException { final int partnerId = 2; QueryParameters parameters = new QueryParameters(); parameters.partnerIds.add(partnerId); String json = query(parameters); System.out.println(json); final ArrayNode jsonNode = (ArrayNode) Jackson.createJsonMapper().readTree(json); assertEquals(jsonNode.get(0).path("partner").path("id").asInt(), partnerId); } public String query(QueryParameters parameters) throws IOException { return new SitesResources(getDispatcherSync()).query( parameters.activityIds, parameters.databaseIds, parameters.indicatorIds, parameters.partnerIds, parameters.attributeIds, parameters.locationIds, parameters.format ); } protected JsonNode getSiteById(ArrayNode array, int siteId) { for (JsonNode node : array) { if (node.get("id").asInt() == siteId) { return node; } } throw new AssertionError("No site json object with id " + siteId); } }