1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package com.gisgraphy.webapp.action;
24
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertNull;
28 import static org.junit.Assert.assertTrue;
29
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.List;
33
34 import org.apache.struts2.ServletActionContext;
35 import org.easymock.classextension.EasyMock;
36 import org.junit.Assert;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.springframework.mock.web.MockHttpServletRequest;
40
41 import com.gisgraphy.domain.geoloc.service.geoloc.GeolocQuery;
42 import com.gisgraphy.domain.geoloc.service.geoloc.IGeolocSearchEngine;
43 import com.gisgraphy.domain.valueobject.GeolocResultsDto;
44 import com.gisgraphy.domain.valueobject.GisFeatureDistance;
45 import com.gisgraphy.domain.valueobject.GisgraphyConfig;
46 import com.gisgraphy.domain.valueobject.GisgraphyServiceType;
47 import com.gisgraphy.domain.valueobject.Output.OutputFormat;
48 import com.gisgraphy.servlet.GeolocServlet;
49
50 public class GeolocSearchActionTest {
51
52 GeolocSearchAction action;
53 List<GisFeatureDistance> results;
54 IGeolocSearchEngine mockSearchEngine;
55 GeolocResultsDto mockResultDTO;
56
57 @SuppressWarnings("unchecked")
58 @Before
59 public void setup() {
60 BaseActionTestCase.setUpActionContext();
61 results = new ArrayList<GisFeatureDistance>();
62 action = new GeolocSearchAction();
63 mockSearchEngine = EasyMock.createMock(IGeolocSearchEngine.class);
64 action.setGeolocSearchEngine(mockSearchEngine);
65 mockResultDTO = EasyMock.createMock(GeolocResultsDto.class);
66 EasyMock.expect(mockResultDTO.getResult()).andReturn(results);
67 }
68
69 @Test
70 public void search() throws Exception {
71 MockHttpServletRequest request = new MockHttpServletRequest("GET",
72 "/search.html");
73 ServletActionContext.setRequest(request);
74 request.setParameter(GeolocServlet.LAT_PARAMETER.toString(), "3.5");
75 request.setParameter(GeolocServlet.LONG_PARAMETER.toString(), "4.5");
76 GisFeatureDistance mockGisFeatureDistance = EasyMock
77 .createMock(GisFeatureDistance.class);
78 EasyMock.replay(mockGisFeatureDistance);
79 results.add(mockGisFeatureDistance);
80 EasyMock.replay(mockResultDTO);
81 EasyMock.expect(
82 mockSearchEngine.executeQuery((GeolocQuery) EasyMock
83 .anyObject())).andReturn(mockResultDTO);
84 EasyMock.replay(mockSearchEngine);
85 String returnAction = action.search();
86 assertEquals(FulltextSearchAction.SUCCESS, returnAction);
87 assertEquals(mockResultDTO, action.getResponseDTO());
88 }
89
90 @Test
91 public void isDisplayResults() throws Exception {
92 MockHttpServletRequest request = new MockHttpServletRequest("GET",
93 "/search.html");
94 ServletActionContext.setRequest(request);
95 request.setParameter(GeolocServlet.LAT_PARAMETER.toString(), "3.5");
96 request.setParameter(GeolocServlet.LONG_PARAMETER.toString(), "4.5");
97 GisFeatureDistance mockGisFeatureDistance = EasyMock
98 .createMock(GisFeatureDistance.class);
99 EasyMock.replay(mockGisFeatureDistance);
100 results.add(mockGisFeatureDistance);
101 EasyMock.replay(mockResultDTO);
102 EasyMock.expect(
103 mockSearchEngine.executeQuery((GeolocQuery) EasyMock
104 .anyObject())).andReturn(mockResultDTO);
105 EasyMock.replay(mockSearchEngine);
106 String returnAction = action.search();
107 assertEquals(FulltextSearchAction.SUCCESS, returnAction);
108 assertEquals(mockResultDTO, action.getResponseDTO());
109 assertTrue(action.isDisplayResults());
110 }
111
112 @Test
113 public void searchWhenFailed() throws Exception {
114 String errorMessage = "message";
115 MockHttpServletRequest request = new MockHttpServletRequest("GET",
116 "/search.html");
117 ServletActionContext.setRequest(request);
118 request.setParameter(GeolocServlet.LAT_PARAMETER.toString(), "3.5");
119 request.setParameter(GeolocServlet.LONG_PARAMETER.toString(), "4.5");
120 EasyMock.replay(mockResultDTO);
121 EasyMock.expect(
122 mockSearchEngine.executeQuery((GeolocQuery) EasyMock
123 .anyObject())).andThrow(
124 new RuntimeException(errorMessage));
125 EasyMock.replay(mockSearchEngine);
126 String returnAction = action.search();
127 assertEquals(FulltextSearchAction.SUCCESS, returnAction);
128 assertEquals(errorMessage, action.getErrorMessage());
129 assertNull(action.getResponseDTO());
130 assertFalse(action.isDisplayResults());
131 }
132
133 @Test
134 public void searchPopupShouldReturnPopupView() throws Exception {
135 MockHttpServletRequest request = new MockHttpServletRequest("GET",
136 "/search.html");
137 ServletActionContext.setRequest(request);
138 request.setParameter(GeolocServlet.LAT_PARAMETER.toString(), "3.5");
139 request.setParameter(GeolocServlet.LONG_PARAMETER.toString(), "4.5");
140 GisFeatureDistance mockGisFeatureDistance = EasyMock
141 .createMock(GisFeatureDistance.class);
142 EasyMock.replay(mockGisFeatureDistance);
143 results.add(mockGisFeatureDistance);
144 EasyMock.replay(mockResultDTO);
145 EasyMock.expect(
146 mockSearchEngine.executeQuery((GeolocQuery) EasyMock
147 .anyObject())).andReturn(mockResultDTO);
148 EasyMock.replay(mockSearchEngine);
149 String returnAction = action.searchpopup();
150 assertEquals(FulltextSearchAction.POPUP_VIEW, returnAction);
151 assertEquals(mockResultDTO, action.getResponseDTO());
152 }
153
154 @Test
155 public void getStyleShouldReturnStyle() throws Exception {
156 MockHttpServletRequest request = new MockHttpServletRequest("GET",
157 "/search.html");
158 ServletActionContext.setRequest(request);
159 request.setParameter(GeolocServlet.LAT_PARAMETER.toString(), "3.5");
160 request.setParameter(GeolocServlet.LONG_PARAMETER.toString(), "4.5");
161 action.setPlacetype("GisFeature");
162 assertEquals("GisFeature", action.getPlacetype());
163 }
164
165 @Test
166 public void getStyleShouldReturnDefaultStyle() throws Exception {
167 MockHttpServletRequest request = new MockHttpServletRequest("GET",
168 "/search.html");
169 ServletActionContext.setRequest(request);
170 request.setParameter(GeolocServlet.LAT_PARAMETER.toString(), "3.5");
171 request.setParameter(GeolocServlet.LONG_PARAMETER.toString(), "4.5");
172 action.setPlacetype(null);
173 assertEquals(GisgraphyConfig.defaultGeolocSearchPlaceTypeClass, action
174 .getPlacetype());
175 }
176
177 @Test
178 public void getFormatsShouldReturnFormatForGeoloc() {
179 Assert.assertEquals(Arrays.asList(OutputFormat
180 .listByService(GisgraphyServiceType.GEOLOC)), Arrays
181 .asList(action.getFormats()));
182
183 }
184
185 }