changes to placeholder identifier and (de)serialization

This commit is contained in:
Fredrik Teschke committed 2014-03-10 15:00:35 +01:00
1 parent 10f0b01576
commit 1ebed6373e
62 files changed
+812 -350

No files matched your search

@@ -10,6 +10,7 @@ Require-Bundle: org.mockito.mockito-core;bundle-version="1.9.5",
com.sap.sailing.domain.test,
org.hamcrest;bundle-version="1.1.0",
org.objenesis;bundle-version="1.3.0",
org.junit4;bundle-version="4.8.2"
org.junit4;bundle-version="4.8.2",
com.sap.sailing.domain.racelogtrackingadapter.testsupport;bundle-version="1.0.0"
Import-Package: com.sap.sailing.domain.persistence.impl,
com.sap.sailing.server.impl
@@ -0,0 +1,127 @@
package com.sap.sailing.server.gateway.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Collections;
import java.util.Date;
import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.impl.BoatClassImpl;
import com.sap.sailing.domain.base.impl.BoatImpl;
import com.sap.sailing.domain.base.impl.CompetitorImpl;
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.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.racelog.tracking.TypeBasedServiceFinder;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.tracking.DeviceCompetitorMappingEvent;
import com.sap.sailing.domain.racelog.tracking.DeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.PlaceHolderDeviceIdentifier;
import com.sap.sailing.domain.racelog.tracking.SmartphoneImeiIdentifier;
import com.sap.sailing.domain.racelog.tracking.test.mock.MockEmptyServiceFinder;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.impl.DeviceIdentifierJsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.RaceLogEventDeserializer;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.DeviceIdentifierJsonSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSerializer;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.PlaceHolderDeviceIdentifierJsonHandler;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.SmartphoneImeiJsonHandler;
public class RaceLogSerializationTest {
private JsonSerializer<RaceLogEvent> serializer;
private JsonDeserializer<RaceLogEvent> deserializer;
private final RaceLogEventAuthor author = new RaceLogEventAuthorImpl("test", 0);
private static final Competitor competitor = new CompetitorImpl("a", "b", null,
new TeamImpl("a", Collections.singletonList(new PersonImpl("a", new NationalityImpl("GER"), new Date(), "abc")), null),
new BoatImpl("a", new BoatClassImpl("a", true), "abc"));
@Before
public void setup() {
}
private void setup(JsonDeserializer<DeviceIdentifier> deviceDeserializer, JsonSerializer<DeviceIdentifier> deviceSerializer) {
JsonSerializer<Competitor> cSer = CompetitorJsonSerializer.create();
serializer = RaceLogEventSerializer.create(cSer, deviceSerializer);
deserializer = RaceLogEventDeserializer.create(DomainFactory.INSTANCE, deviceDeserializer);
}
private TimePoint t() {
return MillisecondsTimePoint.now();
}
@Test
public void testSerializationOfDeviceIdentifier() throws JsonDeserializationException {
setup(DeviceIdentifierJsonDeserializer.create(new SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE),
DeviceIdentifierJsonSerializer.create(new SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE));
DeviceIdentifier device = new SmartphoneImeiIdentifier("abc");
DeviceCompetitorMappingEvent event = RaceLogEventFactory.INSTANCE.createDeviceCompetitorMappingEvent(
t(), author, device, competitor, 0, t(), t());
JSONObject json = serializer.serialize(event);
RaceLogEvent deserialized = deserializer.deserialize(json);
assertTrue(deserialized instanceof DeviceCompetitorMappingEvent);
DeviceCompetitorMappingEvent deserializedMapping = (DeviceCompetitorMappingEvent) deserialized;
assertEquals(event.getDevice(), deserializedMapping.getDevice());
}
@Test
public void testSerializationOfDeviceIdentifierWithNoSerializer() throws JsonDeserializationException {
TypeBasedServiceFinder<DeviceIdentifierJsonHandler> onlyFallback = new MockEmptyServiceFinder<>();
onlyFallback.setFallbackService(new PlaceHolderDeviceIdentifierJsonHandler());
setup(new DeviceIdentifierJsonDeserializer(onlyFallback),
DeviceIdentifierJsonSerializer.create(new SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE));
DeviceIdentifier device = new SmartphoneImeiIdentifier("abc");
DeviceCompetitorMappingEvent event = RaceLogEventFactory.INSTANCE.createDeviceCompetitorMappingEvent(
t(), author, device, competitor, 0, t(), t());
JSONObject json = serializer.serialize(event);
RaceLogEvent deserialized = deserializer.deserialize(json);
assertTrue(deserialized instanceof DeviceCompetitorMappingEvent);
DeviceCompetitorMappingEvent deserializedMapping = (DeviceCompetitorMappingEvent) deserialized;
assertTrue(deserializedMapping.getDevice() instanceof PlaceHolderDeviceIdentifier);
assertEquals(event.getDevice().getStringRepresentation(), deserializedMapping.getDevice().getStringRepresentation());
assertEquals(event.getDevice().getIdentifierType(), deserializedMapping.getDevice().getIdentifierType());
}
@Test
public void testSerializationOfDeviceIdentifierWithNoDeserializer() throws JsonDeserializationException {
TypeBasedServiceFinder<DeviceIdentifierJsonHandler> onlyFallback = new MockEmptyServiceFinder<>();
onlyFallback.setFallbackService(new PlaceHolderDeviceIdentifierJsonHandler());
setup(DeviceIdentifierJsonDeserializer.create(new SmartphoneImeiJsonHandler(), SmartphoneImeiIdentifier.TYPE),
new DeviceIdentifierJsonSerializer(onlyFallback));
DeviceIdentifier device = new SmartphoneImeiIdentifier("abc");
DeviceCompetitorMappingEvent event = RaceLogEventFactory.INSTANCE.createDeviceCompetitorMappingEvent(
t(), author, device, competitor, 0, t(), t());
JSONObject json = serializer.serialize(event);
RaceLogEvent deserialized = deserializer.deserialize(json);
assertTrue(deserialized instanceof DeviceCompetitorMappingEvent);
DeviceCompetitorMappingEvent deserializedMapping = (DeviceCompetitorMappingEvent) deserialized;
assertTrue(deserializedMapping.getDevice() instanceof PlaceHolderDeviceIdentifier);
assertEquals(event.getDevice().getStringRepresentation(), deserializedMapping.getDevice().getStringRepresentation());
assertEquals(event.getDevice().getIdentifierType(), deserializedMapping.getDevice().getIdentifierType());
}
}