package com.bitmonlab.osiris.api.map.assemblers;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import com.bitmonlab.osiris.api.core.map.assemblers.PolygonAssemblerImpl;
import com.bitmonlab.osiris.api.core.map.transferobject.LineStringDTO;
import com.bitmonlab.osiris.api.core.map.transferobject.PolygonDTO;
import com.bitmonlab.osiris.commons.map.model.geojson.LineString;
import com.bitmonlab.osiris.commons.map.model.geojson.Polygon;
import com.bitmonlab.osiris.core.assembler.Assembler;
import com.bitmonlab.osiris.core.assembler.AssemblyException;
@RunWith(MockitoJUnitRunner.class)
public class PolygonAssemblerTest {
@InjectMocks
private PolygonAssemblerImpl polygonAssemblerImpl;
@Mock
private PolygonDTO polygonDTO;
@Mock
private LineStringDTO lineStringDTO1;
@Mock
private LineStringDTO lineStringDTO2;
@Mock
private Assembler<LineStringDTO,LineString> lineStringAssembler;
@Mock
private LineString lineString1;
@Mock
private LineString lineString2;
@Mock
private List<List<Double>> coordinatesLineString1;
@Mock
private List<List<Double>> coordinatesLineString2;
@Mock
private Polygon polygon1;
@Mock
private Polygon polygon2;
@Mock
private List<List<Double>> coordinates1;
@Mock
private List<List<Double>> coordinates2;
@Test
public void transformPolygonDTOtoPolygon() throws AssemblyException{
Collection<LineStringDTO> collectionLineStringDTO=new ArrayList<LineStringDTO>();
collectionLineStringDTO.add(lineStringDTO1);
collectionLineStringDTO.add(lineStringDTO2);
//Fixture
Mockito.when(polygonDTO.getCollectionLineStringDTO()).thenReturn(collectionLineStringDTO);
Mockito.when(lineStringAssembler.createDomainObject(lineStringDTO1)).thenReturn(lineString1);
Mockito.when(lineString1.getCoordinates()).thenReturn(coordinatesLineString1);
Mockito.when(lineStringAssembler.createDomainObject(lineStringDTO2)).thenReturn(lineString2);
Mockito.when(lineString2.getCoordinates()).thenReturn(coordinatesLineString2);
//Experimentation
Polygon polygonResponse = polygonAssemblerImpl.createDomainObject(polygonDTO);
//Expectations
Collection<List<List<Double>>> collectionLineString=polygonResponse.getCoordinates();
assertEquals("Polygon response must have two lineString", collectionLineString.size(), 2);
Iterator<List<List<Double>>> iteratorPolygon = collectionLineString.iterator();
List<List<Double>> lineString1Response=iteratorPolygon.next();
assertEquals("LineString1 must be the same", coordinatesLineString1, lineString1Response);
List<List<Double>> lineString2Response=iteratorPolygon.next();
assertEquals("LineString2 must be the same", coordinatesLineString2, lineString2Response);
}
@Test
public void transformPolygonToPolygonDTO() throws AssemblyException{
Collection<List<List<Double>>> collectionCoordinates=new ArrayList<List<List<Double>>>();
collectionCoordinates.add(coordinates1);
collectionCoordinates.add(coordinates2);
LineString lineString1=new LineString();
lineString1.setCoordinates(coordinates1);
LineString lineString2=new LineString();
lineString2.setCoordinates(coordinates2);
//Fixture
Mockito.when(polygon1.getCoordinates()).thenReturn(collectionCoordinates);
Mockito.when(lineStringAssembler.createDataTransferObject(lineString1)).thenReturn(lineStringDTO1);
Mockito.when(lineStringAssembler.createDataTransferObject(lineString2)).thenReturn(lineStringDTO2);
//Experimentation
PolygonDTO polygonDTOResponse=polygonAssemblerImpl.createDataTransferObject(polygon1);
//Expectations
Collection<LineStringDTO> collectionLineStringDTO=polygonDTOResponse.getCollectionLineStringDTO();
assertEquals("PolygonDTO response must have two lineStringDTO", collectionLineStringDTO.size(), 2);
Iterator<LineStringDTO> iterator=collectionLineStringDTO.iterator();
LineStringDTO lineStringDTO1Response=iterator.next();
assertEquals("LineStringDTO1 must be the same", lineStringDTO1Response, lineStringDTO1);
LineStringDTO lineStringDTO2Response=iterator.next();
assertEquals("LineStringDTO2 must be the same", lineStringDTO2Response, lineStringDTO2);
}
@Test
public void transformCollectionLineStringsToCollectionLineStringsDTO() throws AssemblyException{
Collection<Polygon> polygons=new ArrayList<Polygon>();
polygons.add(polygon1);
polygons.add(polygon2);
Collection<List<List<Double>>> collectionCoordinates1=new ArrayList<List<List<Double>>>();
collectionCoordinates1.add(coordinates1);
LineString lineString1=new LineString();
lineString1.setCoordinates(coordinates1);
Collection<List<List<Double>>> collectionCoordinates2=new ArrayList<List<List<Double>>>();
collectionCoordinates2.add(coordinates2);
LineString lineString2=new LineString();
lineString2.setCoordinates(coordinates2);
//Fixture
Mockito.when(polygon1.getCoordinates()).thenReturn(collectionCoordinates1);
Mockito.when(lineStringAssembler.createDataTransferObject(lineString1)).thenReturn(lineStringDTO1);
Mockito.when(polygon2.getCoordinates()).thenReturn(collectionCoordinates2);
Mockito.when(lineStringAssembler.createDataTransferObject(lineString2)).thenReturn(lineStringDTO2);
//Experimentation
Collection<PolygonDTO> response=polygonAssemblerImpl.createDataTransferObjects(polygons);
//Expectations
assertEquals("CollectionPolygonDTO response must have two polygonDTO", response.size(), 2);
Iterator<PolygonDTO> iteratorCollectionPolygonDTO=response.iterator();
PolygonDTO polygonDTOResponse1=iteratorCollectionPolygonDTO.next();
Collection<LineStringDTO> collectionLineStringDTO1Response=polygonDTOResponse1.getCollectionLineStringDTO();
assertEquals("CollectionLineStringDTO1Response must have a pointDTO", collectionLineStringDTO1Response.size(), 1);
Iterator<LineStringDTO> iteratorLineStringDTO1Response=collectionLineStringDTO1Response.iterator();
LineStringDTO lineStringDTO1Response=iteratorLineStringDTO1Response.next();
assertEquals("LineStringDTO1 must be the same", lineStringDTO1Response, lineStringDTO1);
PolygonDTO polygonDTOResponse2=iteratorCollectionPolygonDTO.next();
Collection<LineStringDTO> collectionLineStringDTO2Response=polygonDTOResponse2.getCollectionLineStringDTO();
assertEquals("CollectionLineStringDTO2Response must have a pointDTO", collectionLineStringDTO2Response.size(), 1);
Iterator<LineStringDTO> iteratorLineStringDTO2Response=collectionLineStringDTO2Response.iterator();
LineStringDTO lineStringDTO2Response=iteratorLineStringDTO2Response.next();
assertEquals("LineStringDTO2 must be the same", lineStringDTO2Response, lineStringDTO2);
}
}