add competitor resource to REST API

This commit is contained in:
Fredrik Teschke committed 2014-12-11 12:49:25 +01:00
1 parent 0929262243
commit cdccf25113
2 files changed
+103

No files matched your search

@@ -0,0 +1,60 @@
package com.sap.sailing.server.gateway.test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import java.util.Collections;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.DynamicBoat;
import com.sap.sailing.domain.base.impl.DynamicTeam;
import com.sap.sailing.domain.base.impl.NationalityImpl;
import com.sap.sailing.domain.base.impl.PersonImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
import com.sap.sailing.server.gateway.jaxrs.api.CompetitorsResource;
import com.sap.sailing.server.impl.RacingEventServiceImpl;
public class CompetitorsJsonExportTest {
private final String name = "Heiko KRÖGER";
private final String id = "af855a56-9726-4a9c-a77e-da955bd289be";
private final String boatClassName = "49er";
private final String sailID = "GER 1";
private final String nationality = "GER";
private final @Spy CompetitorsResource competitorsResource = new CompetitorsResource();
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
RacingEventService service = new RacingEventServiceImpl();
Mockito.doReturn(service).when(competitorsResource).getService();
DynamicTeam team = new TeamImpl(null, Collections.singleton(new PersonImpl(null, new NationalityImpl(nationality), null, null)), null);
DynamicBoat boat = new BoatImpl(null, new BoatClassImpl(boatClassName, false), sailID);
service.getBaseDomainFactory().getOrCreateCompetitor(id, name, null, team, boat);
}
@Test
public void testExportRegattasAsJson() throws Exception {
String jsonString = competitorsResource.getCompetitor(id).getEntity().toString();
JSONObject json = Helpers.toJSONObjectSafe(JSONValue.parse(jsonString));
assertThat("id is correct", json.get("id"), equalTo(id));
assertThat("name is correct", json.get("name"), equalTo(name));
assertThat("boatClass is correct", json.get("boatClassName"), equalTo(boatClassName));
assertThat("sailID is correct", json.get("sailID"), equalTo(sailID));
assertThat("nationality is correct", json.get("nationality"), equalTo(nationality));
}
}
@@ -0,0 +1,43 @@
package com.sap.sailing.server.gateway.jaxrs.api;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
@Path("/v1/competitors")
public class CompetitorsResource extends AbstractSailingServerResource {
@GET
@Produces("application/json;charset=UTF-8")
@Path("{competitorId}")
public Response getCompetitor(@PathParam("competitorId") String competitorIdAsString) {
Response response;
Competitor competitor = getService().getCompetitorStore().getExistingCompetitorByIdAsString(
competitorIdAsString);
if (competitor == null) {
response = Response.status(Status.NOT_FOUND)
.entity("Could not find a competitor with id '" + competitorIdAsString + "'.").type(MediaType.TEXT_PLAIN)
.build();
} else {
//see http://wiki.sapsailing.com/wiki/tracking-app-api-v1-draft#Competitor-Information
JSONObject json = new JSONObject();
json.put("id", competitorIdAsString);
json.put("name", competitor.getName());
json.put("sailID", competitor.getBoat().getSailID());
json.put("nationality", competitor.getTeam().getNationality().getThreeLetterIOCAcronym());
json.put("boatClassName", competitor.getBoat().getBoatClass().getName());
String jsonString = json.toJSONString();
response = Response.ok(jsonString, MediaType.APPLICATION_JSON).build();
}
return response;
}
}