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 }