1   /*******************************************************************************
2    *   Gisgraphy Project 
3    * 
4    *   This library is free software; you can redistribute it and/or
5    *   modify it under the terms of the GNU Lesser General Public
6    *   License as published by the Free Software Foundation; either
7    *   version 2.1 of the License, or (at your option) any later version.
8    * 
9    *   This library is distributed in the hope that it will be useful,
10   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12   *   Lesser General Public License for more details.
13   * 
14   *   You should have received a copy of the GNU Lesser General Public
15   *   License along with this library; if not, write to the Free Software
16   *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
17   * 
18   *  Copyright 2008  Gisgraphy project 
19   *  David Masclet <davidmasclet@gisgraphy.com>
20   *  
21   *  
22   *******************************************************************************/
23  package com.gisgraphy.webapp.action;
24  
25  import static org.junit.Assert.assertEquals;
26  
27  import java.util.ArrayList;
28  import java.util.List;
29  
30  import org.easymock.classextension.EasyMock;
31  import org.junit.Before;
32  import org.junit.Test;
33  
34  import com.gisgraphy.domain.geoloc.service.fulltextsearch.FulltextQuery;
35  import com.gisgraphy.domain.geoloc.service.fulltextsearch.IFullTextSearchEngine;
36  import com.gisgraphy.domain.valueobject.FulltextResultsDto;
37  import com.gisgraphy.domain.valueobject.SolrResponseDto;
38  
39  public class DisplayFeatureActionTest {
40  
41      DisplayFeatureAction action;
42      List<SolrResponseDto> results;
43      IFullTextSearchEngine mockSearchEngine;
44      FulltextResultsDto mockResultDTO;
45  
46      @Before
47      public void setup() {
48  	results = new ArrayList<SolrResponseDto>();
49  	action = new DisplayFeatureAction();
50  	mockSearchEngine = EasyMock.createMock(IFullTextSearchEngine.class);
51  	action.setFullTextSearchEngine(mockSearchEngine);
52  	mockResultDTO = EasyMock.createMock(FulltextResultsDto.class);
53  	EasyMock.expect(mockResultDTO.getResults()).andReturn(results);
54      }
55  
56      @Test
57      public void getPreferedNameShouldReturnFullyQualyfiedNameIfExists()
58  	    throws Exception {
59  	action.setFeatureId("3");
60  	String fullyQualifedName = "fully";
61  	SolrResponseDto mockSolrResponseDto = EasyMock
62  		.createMock(SolrResponseDto.class);
63  	EasyMock.expect(mockSolrResponseDto.getFully_qualified_name())
64  		.andReturn(fullyQualifedName);
65  	EasyMock.replay(mockSolrResponseDto);
66  	results.add(mockSolrResponseDto);
67  	EasyMock.replay(mockResultDTO);
68  	EasyMock.expect(
69  		mockSearchEngine.executeQuery((FulltextQuery) EasyMock
70  			.anyObject())).andReturn(mockResultDTO);
71  	EasyMock.replay(mockSearchEngine);
72  	action.execute();
73  	assertEquals(fullyQualifedName, action.getPreferedName());
74      }
75  
76      @Test
77      public void getPreferedNameShouldReturnNameWhenNoFullyQualyfiedNameExists()
78  	    throws Exception {
79  	action.setFeatureId("3");
80  	String fullyQualifedName = "";
81  	String name = "the name";
82  	SolrResponseDto mockSolrResponseDto = EasyMock
83  		.createMock(SolrResponseDto.class);
84  	EasyMock.expect(mockSolrResponseDto.getFully_qualified_name())
85  		.andReturn(fullyQualifedName);
86  	EasyMock.expect(mockSolrResponseDto.getName()).andReturn(name);
87  	EasyMock.replay(mockSolrResponseDto);
88  	results.add(mockSolrResponseDto);
89  	EasyMock.replay(mockResultDTO);
90  	EasyMock.expect(
91  		mockSearchEngine.executeQuery((FulltextQuery) EasyMock
92  			.anyObject())).andReturn(mockResultDTO);
93  	EasyMock.replay(mockSearchEngine);
94  	action.execute();
95  	assertEquals(name, action.getPreferedName());
96      }
97  
98      @Test
99      public void executeWithOutFeatureId() throws Exception {
100 	SolrResponseDto mockSolrResponseDto = EasyMock
101 		.createMock(SolrResponseDto.class);
102 	EasyMock.replay(mockSolrResponseDto);
103 	results.add(mockSolrResponseDto);
104 	EasyMock.replay(mockResultDTO);
105 	EasyMock.expect(
106 		mockSearchEngine.executeQuery((FulltextQuery) EasyMock
107 			.anyObject())).andReturn(mockResultDTO);
108 	EasyMock.replay(mockSearchEngine);
109 	String returnAction = action.execute();
110 	assertEquals(DisplayFeatureAction.ERROR, returnAction);
111 	assertEquals(DisplayFeatureAction.ERROR_REF_REQUIRED_FEATURE_ID, action
112 		.getErrorRef());
113     }
114 
115     @Test
116     public void executeWithNonNumericFeatureId() throws Exception {
117 	action.setFeatureId("a");
118 	SolrResponseDto mockSolrResponseDto = EasyMock
119 		.createMock(SolrResponseDto.class);
120 	EasyMock.replay(mockSolrResponseDto);
121 	results.add(mockSolrResponseDto);
122 	EasyMock.replay(mockResultDTO);
123 	EasyMock.expect(
124 		mockSearchEngine.executeQuery((FulltextQuery) EasyMock
125 			.anyObject())).andReturn(mockResultDTO);
126 	EasyMock.replay(mockSearchEngine);
127 	String returnAction = action.execute();
128 	assertEquals(DisplayFeatureAction.ERROR, returnAction);
129 	assertEquals(DisplayFeatureAction.ERROR_REF_NON_NUMERIC_FEATUREID,
130 		action.getErrorRef());
131     }
132 
133     @Test
134     public void executeWithNonUniqueResult() throws Exception {
135 	action.setFeatureId("1");
136 	SolrResponseDto mockSolrResponseDto = EasyMock
137 		.createMock(SolrResponseDto.class);
138 	EasyMock.replay(mockSolrResponseDto);
139 	results.add(mockSolrResponseDto);
140 	results.add(mockSolrResponseDto);
141 	EasyMock.replay(mockResultDTO);
142 	EasyMock.expect(
143 		mockSearchEngine.executeQuery((FulltextQuery) EasyMock
144 			.anyObject())).andReturn(mockResultDTO);
145 	EasyMock.replay(mockSearchEngine);
146 	String returnAction = action.execute();
147 	assertEquals(DisplayFeatureAction.ERROR, returnAction);
148 	assertEquals(DisplayFeatureAction.ERROR_REF_NON_UNIQUE_RESULT, action
149 		.getErrorRef());
150     }
151 
152     @Test
153     public void executeWithNoResult() throws Exception {
154 	action.setFeatureId("1");
155 	EasyMock.replay(mockResultDTO);
156 	String errorMessage = "Message";
157 	EasyMock.expect(
158 		mockSearchEngine.executeQuery((FulltextQuery) EasyMock
159 			.anyObject())).andThrow(
160 		new RuntimeException(errorMessage));
161 	EasyMock.replay(mockSearchEngine);
162 	String returnAction = action.execute();
163 	assertEquals(DisplayFeatureAction.ERROR, returnAction);
164 	assertEquals(DisplayFeatureAction.ERROR_REF_GENERAL_ERROR, action
165 		.getErrorRef());
166 	assertEquals(errorMessage, action.getErrorMessage());
167     }
168 
169     @Test
170     public void execute() throws Exception {
171 	action.setFeatureId("1");
172 	SolrResponseDto mockSolrResponseDto = EasyMock
173 		.createMock(SolrResponseDto.class);
174 	EasyMock.replay(mockSolrResponseDto);
175 	results.add(mockSolrResponseDto);
176 	EasyMock.replay(mockResultDTO);
177 	EasyMock.expect(
178 		mockSearchEngine.executeQuery((FulltextQuery) EasyMock
179 			.anyObject())).andReturn(mockResultDTO);
180 	EasyMock.replay(mockSearchEngine);
181 	String returnAction = action.execute();
182 	assertEquals(DisplayFeatureAction.SUCCESS, returnAction);
183 	assertEquals("", action.getErrorRef());
184 	assertEquals(mockSolrResponseDto, action.getResult());
185 	assertEquals("", action.getErrorMessage());
186     }
187 
188 }