View Javadoc

1   package org.cateproject.controller.description;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertTrue;
5   
6   import java.util.ArrayList;
7   import java.util.List;
8   import java.util.Set;
9   import java.util.UUID;
10  
11  
12  import org.cateproject.model.WebRevision;
13  import org.cateproject.service.WebRevisionService;
14  import org.easymock.EasyMock;
15  import org.junit.Assert;
16  import org.junit.Before;
17  import org.junit.Test;
18  import org.springframework.test.web.ModelAndViewAssert;
19  import org.springframework.web.servlet.ModelAndView;
20  import org.unitils.UnitilsJUnit4;
21  import org.unitils.easymock.annotation.Mock;
22  import org.unitils.inject.annotation.InjectInto;
23  import org.unitils.inject.annotation.TestedObject;
24  
25  import eu.etaxonomy.cdm.api.service.IDescriptionService;
26  import eu.etaxonomy.cdm.api.service.ITaxonService;
27  import eu.etaxonomy.cdm.api.service.ITermService;
28  import eu.etaxonomy.cdm.api.service.pager.Pager;
29  import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
30  import eu.etaxonomy.cdm.model.common.Language;
31  import eu.etaxonomy.cdm.model.common.LanguageString;
32  import eu.etaxonomy.cdm.model.description.CommonTaxonName;
33  import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
34  import eu.etaxonomy.cdm.model.description.Distribution;
35  import eu.etaxonomy.cdm.model.description.Feature;
36  import eu.etaxonomy.cdm.model.description.FeatureNode;
37  import eu.etaxonomy.cdm.model.description.FeatureTree;
38  import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
39  import eu.etaxonomy.cdm.model.description.TaxonDescription;
40  import eu.etaxonomy.cdm.model.description.TextData;
41  import eu.etaxonomy.cdm.model.location.NamedArea;
42  import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
43  import eu.etaxonomy.cdm.model.media.Media;
44  import eu.etaxonomy.cdm.model.taxon.Taxon;
45  import eu.etaxonomy.cdm.persistence.query.OrderHint;
46  import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder;
47  
48  public class DescriptionListControllerTest extends UnitilsJUnit4 {
49  	
50  	@Mock
51  	@InjectInto(property = "service")
52  	private IDescriptionService descriptionService;
53  	
54  	@Mock
55  	@InjectInto(property = "termService")
56  	ITermService termService;
57  	
58  	@Mock
59  	@InjectInto(property = "webRevisionService")
60  	private WebRevisionService webRevisionService;	
61  	
62  	@TestedObject
63  	private DescriptionListController descriptionController;
64  	
65  	private FeatureTree featureTree;
66  
67  	private TaxonDescription taxonDescription;
68  	private List<TaxonDescription> txDescriptions;
69      private NamedAreaLevel continent;
70  	private NamedAreaLevel region;
71  	private NamedAreaLevel country;
72  	private Pager<NamedArea> regions;
73  	private Pager<NamedArea> countries;
74  	private Pager<TaxonDescription> results;
75  	private Pager<DescriptionElementBase> textDataPager;
76  	List<NamedArea> regionsList;
77  	List<NamedArea> countriesList;
78  	private NamedArea namedArea;
79  	private Feature feature;
80  	private WebRevision webRevision;
81  	List<UUID> continentsUuidList;
82  	List<UUID> regionsUuidList;
83  	List<UUID> countriesUuidList;
84  	
85  	@Before
86  	public void setUp() {
87  
88  		descriptionController = new DescriptionListController();
89  		descriptionService = EasyMock.createMock(IDescriptionService.class);
90  		webRevisionService = EasyMock.createMock(WebRevisionService.class);
91  		termService = EasyMock.createMock(ITermService.class);
92  		
93  		
94  		featureTree = FeatureTree.NewInstance();
95  		featureTree.setRoot(FeatureNode.NewInstance(Feature.NewInstance()));
96  
97  		taxonDescription = new TaxonDescription();
98  		txDescriptions = new ArrayList<TaxonDescription>();
99  		txDescriptions.add(taxonDescription);
100 		
101 		results = EasyMock.createMock(Pager.class);
102 		regions = EasyMock.createMock(Pager.class);
103 		countries = EasyMock.createMock(Pager.class);
104 		feature = new Feature();
105 		webRevision = new WebRevision();
106 		Language language = new Language();
107 		namedArea = NamedArea.NewInstance("Lorem", "ipsum", "li");
108 		
109 		List<DescriptionElementBase> textDataResults = new ArrayList<DescriptionElementBase>();
110 		for(int i = 0; i < 4; i++) {
111 			TextData td = new TextData();
112 			LanguageString ls = LanguageString.NewInstance("<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi orci ligula, vestibulum ut, suscipit non, sodales sit amet, mi. Etiam eget purus. Sed venenatis augue ac ligula. Donec enim ligula, auctor ac, sodales vel, ornare volutpat, diam. Aliquam eget mauris. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam eget justo id diam interdum porta. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus mi lectus, lacinia eget, pretium vitae, interdum eget, leo. Ut consectetuer, lorem non euismod consequat, quam nunc ullamcorper neque, nec imperdiet ante sem non ligula. Morbi vel justo. Integer vitae nunc. Donec sodales neque mattis augue.</p> <p>Vivamus in lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean lorem felis, vehicula sed, ultrices quis, porttitor vel, tortor. Etiam tristique massa vitae sem. Mauris congue. Phasellus quis nisi. Donec nec leo non est porttitor molestie. Aenean at arcu at libero vulputate semper. Aenean adipiscing, libero pellentesque iaculis elementum, est ligula aliquet sem, ut bibendum felis lorem eget metus. Maecenas vehicula. Sed aliquam scelerisque lorem.</p> <p>Nulla vulputate, augue ut sagittis porttitor, nisl diam tincidunt est, at tincidunt metus felis nec lacus. Nulla facilisi. Etiam mollis, quam in egestas ultrices, augue nisl sagittis orci, vel lacinia odio lacus a lorem. Fusce non risus. Mauris malesuada sagittis leo. Nullam rutrum metus in mi. Aliquam laoreet convallis nisl. Cras sollicitudin pede. Sed hendrerit libero at sem. In hac habitasse platea dictumst. Ut rutrum enim a felis. Cras pretium sapien a arcu. Donec sit amet ante.</p>", language);
113 			td.getMultilanguageText().put(language, ls);
114 			td.setFeature(feature);
115 			textDataResults.add(td);
116 		}
117 		
118 		textDataPager = new DefaultPagerImpl<DescriptionElementBase>(0, 4, 30, textDataResults);
119 		
120 		
121 		continent = new NamedAreaLevel() {
122 			public boolean isHigher(NamedAreaLevel level) {
123 				if(level.equals(this)) {
124 					return false;
125 				}
126 				return true;
127 			}
128 			public boolean isLower(NamedAreaLevel level) {
129 				return false;
130 			}
131 		};
132 		region = new NamedAreaLevel(){
133 			public boolean isHigher(NamedAreaLevel level) {
134 				if(level.equals(this) || level.equals(continent)) {
135 					return false;
136 				}
137 				return true;
138 			}
139 			public boolean isLower(NamedAreaLevel level) {
140 				if(level.equals(continent)) {
141 					return true;
142 				}
143 				return false;
144 			}
145 		};
146 		country = new NamedAreaLevel(){
147 			public boolean isHigher(NamedAreaLevel level) {
148 				return false;
149 			}
150 			public boolean isLower(NamedAreaLevel level) {
151 				if(level.equals(continent) || level.equals(region)) {
152 					return true;
153 				}
154 				return false;
155 			}
156 		};
157 		regionsList = createAreas(region, 3);
158 		countriesList = createAreas(country, 3);
159 		
160 		continentsUuidList = createUuids(1);
161 		regionsUuidList = createUuids(2);
162 		countriesUuidList = createUuids(3);
163 	}
164 	
165 	private List<NamedArea> createAreas(NamedAreaLevel level, int number) {
166 		List<NamedArea> namedAreas = new ArrayList<NamedArea>();
167 		for(int i = 0; i < number; i++) {
168 			NamedArea namedArea = NamedArea.NewInstance("Lorem", "ipsum", "li");
169 			namedArea.setLevel(level);
170 			namedAreas.add(namedArea);
171 		}
172 		return namedAreas;
173 	}
174 	
175 	private List<UUID> createUuids(int number) {
176 		List<UUID> uuids = new ArrayList<UUID>();
177 		for(int i = 0; i < number; i++) {
178 			uuids.add(UUID.randomUUID());
179 		}
180 		return uuids;
181 	}
182     
183     @Test
184 	public void testSearchContinents() throws Exception {
185 		
186 		EasyMock.expect(termService.getIncludes(EasyMock.isA(Set.class), (Integer)EasyMock.isNull(), (Integer)EasyMock.isNull(),(List)EasyMock.isNull())).andReturn(regions);
187 		EasyMock.expect(termService.find(EasyMock.isA(UUID.class))).andReturn(namedArea).times(3);
188 		EasyMock.expect(regions.getRecords()).andReturn(regionsList);
189 		EasyMock.expect(termService.getIncludes(EasyMock.isA(Set.class), (Integer)EasyMock.isNull(), (Integer)EasyMock.isNull(),(List)EasyMock.isNull())).andReturn(countries);
190 		EasyMock.expect(countries.getRecords()).andReturn(countriesList);
191 		EasyMock.expect(descriptionService.searchDescriptionByDistribution((Set<NamedArea>)EasyMock.isA(Set.class),(PresenceAbsenceTermBase)EasyMock.isNull(),EasyMock.eq(30),EasyMock.eq(0),EasyMock.isA(List.class),EasyMock.isA(List.class))).andReturn(results);
192 		
193 		EasyMock.replay(descriptionService,results,termService,regions,countries);
194 		List<OrderHint> orderHints = new ArrayList<OrderHint>();
195 		orderHints.add(new OrderHint("inDescription.titleCache",SortOrder.ASCENDING));
196 		ModelAndView modelAndView = descriptionController.getDistribution(new ArrayList<UUID>(), new ArrayList<UUID>(), countriesUuidList,null,0,30,orderHints);
197 		
198 		Assert.assertNotNull(modelAndView);
199 		
200 		EasyMock.verify(descriptionService,results,termService,regions,countries);
201 	}
202 	
203 	@Test
204 	public void testSearchRegions() throws Exception {
205 		
206 		EasyMock.expect(termService.getIncludes(EasyMock.isA(Set.class), (Integer)EasyMock.isNull(),(Integer)EasyMock.isNull(),(List)EasyMock.isNull())).andReturn(countries);
207 		EasyMock.expect(termService.find(EasyMock.isA(UUID.class))).andReturn(namedArea).times(2);
208 		EasyMock.expect(countries.getRecords()).andReturn(countriesList);
209 		EasyMock.expect(descriptionService.searchDescriptionByDistribution(EasyMock.isA(Set.class),(PresenceAbsenceTermBase)EasyMock.isNull(),EasyMock.eq(30), EasyMock.eq(0),EasyMock.isA(List.class),EasyMock.isA(List.class))).andReturn(results);
210 		
211 		EasyMock.replay(descriptionService,results,termService,countries);
212 		List<OrderHint> orderHints = new ArrayList<OrderHint>();
213 		orderHints.add(new OrderHint("inDescription.titleCache",SortOrder.ASCENDING));
214 		ModelAndView modelAndView = descriptionController.getDistribution(new ArrayList<UUID>(), regionsUuidList,countriesUuidList,null,0,30,orderHints);
215 		Assert.assertNotNull(modelAndView);
216 		
217 		EasyMock.verify(descriptionService,results,termService,countries);
218 	}
219 	
220 	@Test
221 	public void testSearchCountries() throws Exception {
222 
223 		EasyMock.expect(descriptionService.searchDescriptionByDistribution(EasyMock.isA(Set.class),(PresenceAbsenceTermBase)EasyMock.isNull(),EasyMock.eq(30), EasyMock.eq(0),EasyMock.isA(List.class),EasyMock.isA(List.class))).andReturn(results);
224 		EasyMock.expect(termService.find(EasyMock.isA(UUID.class))).andReturn(namedArea).times(1);
225 		EasyMock.replay(descriptionService,results,termService);
226 		List<OrderHint> orderHints = new ArrayList<OrderHint>();
227 		orderHints.add(new OrderHint("inDescription.titleCache",SortOrder.ASCENDING));
228 		ModelAndView modelAndView = descriptionController.getDistribution( continentsUuidList, regionsUuidList,countriesUuidList,null,0,30,orderHints);
229 		Assert.assertNotNull(modelAndView);
230 		
231 		EasyMock.verify(descriptionService,results,termService);
232 	}
233 	
234 	@Test
235 	public void testSearchDescriptions() throws Exception {
236 		EasyMock.expect(descriptionService.searchElements(EasyMock.eq(TextData.class),EasyMock.eq("lorem ipsum"),EasyMock.eq(30),EasyMock.eq(0),EasyMock.isA(List.class),EasyMock.isA(List.class))).andReturn(textDataPager);
237 		EasyMock.expect(webRevisionService.getWebRevision()).andReturn(webRevision);
238 		
239 		EasyMock.replay(descriptionService,webRevisionService);
240 		List<OrderHint> orderHints = new ArrayList<OrderHint>();
241 		orderHints.add(new OrderHint("inDescription.titleCache",SortOrder.ASCENDING));
242 		ModelAndView modelAndView = descriptionController.getDescription("lorem ipsum", 0,30,orderHints);
243 		Assert.assertNotNull(modelAndView);
244 		
245 		Pager<TextData> r = (Pager<TextData>)modelAndView.getModel().get("results");
246 		
247 	}
248 }