1 package org.cateproject.view;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.HashSet;
6 import java.util.Iterator;
7 import java.util.List;
8 import java.util.Map;
9
10 import org.cateproject.controller.GenericController;
11 import org.cateproject.controller.captcha.CaptchaChallenge;
12 import org.cateproject.controller.description.FeatureNodeWithLevel;
13 import org.cateproject.controller.speciespage.SpeciesPage;
14 import org.cateproject.controller.user.RegistrationForm;
15 import org.junit.Test;
16 import org.springframework.validation.Errors;
17 import org.springframework.validation.Validator;
18 import org.springframework.web.multipart.MaxUploadSizeExceededException;
19 import org.springframework.web.servlet.ModelAndView;
20 import org.springframework.webflow.execution.repository.snapshot.SnapshotNotFoundException;
21
22 import eu.etaxonomy.cdm.api.service.pager.Pager;
23 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
24 import eu.etaxonomy.cdm.api.service.pager.impl.StringLabelPagerImpl;
25 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
26 import eu.etaxonomy.cdm.model.description.Feature;
27 import eu.etaxonomy.cdm.model.description.FeatureNode;
28 import eu.etaxonomy.cdm.model.description.FeatureTree;
29 import eu.etaxonomy.cdm.model.description.TaxonDescription;
30 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
31 import eu.etaxonomy.cdm.model.description.TextData;
32 import eu.etaxonomy.cdm.model.name.BotanicalName;
33 import eu.etaxonomy.cdm.model.name.HybridRelationship;
34 import eu.etaxonomy.cdm.model.name.NameRelationship;
35 import eu.etaxonomy.cdm.model.name.NonViralName;
36 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
37 import eu.etaxonomy.cdm.model.taxon.Synonym;
38 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
39 import eu.etaxonomy.cdm.model.taxon.Taxon;
40 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
41
42
43
44 public class IndexPagesTest extends CATEViewTest {
45 public static String[] descriptions = {"Index","Nomenclature","Taxonomy","Description","Discussion"};
46
47 @Test
48 public void testIndexPage() {
49 ModelAndView modelAndView = new ModelAndView("index");
50 String staticResponse = "<h1 class=\"article-heading\">CATE Mock web pages</h1><p class=\"paragraph\">These demonstrate mock pages with some working functionality. Some links on these pages will not work, or will take you to a page different from what you might have expected</p>"
51 ;
52
53 modelAndView.addObject( "static", staticResponse );
54
55 outputMock(modelAndView,"target/generated-sources/mock/index.html");
56 }
57
58 @Test
59 public void testHelpPage() {
60 ModelAndView modelAndView = new ModelAndView("help/page");
61 String helpPage = "/help/javahelp/ch01.html";
62
63 modelAndView.addObject( "helpPage", helpPage );
64
65 outputMock(modelAndView,"target/generated-sources/mock/help/page.html");
66 }
67
68
69 @Test
70 public void testLogonPage() {
71 ModelAndView modelAndView = new ModelAndView("logon");
72
73 outputMock(modelAndView,"target/generated-sources/mock/logon.html");
74 }
75
76 @Test
77 public void testXsltStylesheetPage() {
78
79 ModelAndView modelAndView = new ModelAndView("human");
80
81 outputSingleRequest(modelAndView,"target/generated-sources/mock/human.xsl");
82 }
83
84 @Test
85 public void testRegistrationPage() {
86 CaptchaChallenge captchaChallenge = new CaptchaChallenge();
87 String captchaId = java.util.UUID.randomUUID().toString();
88 String captchaQuestion = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit";
89 captchaChallenge.setId(captchaId);
90 captchaChallenge.setQuestion(captchaQuestion);
91
92 Map<String,Object> referenceData = new HashMap<String,Object>();
93 referenceData.put("captcha",captchaChallenge);
94 outputForm("user/register",
95 "target/generated-sources/mock/user/register.html",
96 "registrationForm",
97 RegistrationForm.class,
98 referenceData,
99 "GET",
100 null,
101 new HashMap<String,String>());
102 }
103
104 @Test
105 public void testRegistrationPageWithErrors() {
106 CaptchaChallenge captchaChallenge = new CaptchaChallenge();
107 String captchaId = java.util.UUID.randomUUID().toString();
108 String captchaQuestion = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit";
109 captchaChallenge.setId(captchaId);
110 captchaChallenge.setQuestion(captchaQuestion);
111
112 Map<String,Object> referenceData = new HashMap<String,Object>();
113 Map<String,String> postValues = new HashMap<String,String>();
114 postValues.put("emailAddress", "lorem.ipsum@dolor.sit.amet");
115 postValues.put("surname", "Lorem");
116 postValues.put("givenNames", "Sit Amet");
117 referenceData.put("captcha",captchaChallenge);
118 outputForm("user/register",
119 "target/generated-sources/mock/user/register_withErrors.html",
120 "registrationForm",
121 RegistrationForm.class,
122 referenceData,
123 "POST",
124 new MockRegistrationFormValidator(),
125 postValues);
126 }
127
128 public class MockRegistrationFormValidator implements Validator {
129
130 public boolean supports(Class clazz) {
131 return clazz.equals(RegistrationForm.class);
132 }
133
134 public void validate(Object target, Errors errors) {
135 errors.rejectValue("captchaResponse","invalid.captchaResponse");
136 errors.rejectValue("emailAddress","invalid.emailAddress");
137 errors.rejectValue("confirmPassword","passwords.do.not.match");
138 }
139
140 }
141
142 @Test
143 public void testSnapshotNotFoundErrorPage() {
144 ModelAndView modelAndView = new ModelAndView("exception/snapshotNotFound.html");
145
146 modelAndView.addObject("exception",new SnapshotNotFoundException("e1"));
147
148 outputMock(modelAndView,"target/generated-sources/mock/SnapshotNotFound.html");
149 }
150
151
152 @Test
153 public void testDescriptionPage() {
154 ModelAndView modelAndView = new ModelAndView("speciesPage");
155
156 SpeciesPage speciesPage = new SpeciesPage();
157 speciesPage.setTaxonBase(dataSet.getTaxonBases().get(0));
158
159 TaxonDescription taxonDescription = ((Taxon)dataSet.getTaxonBases().get(0)).getDescriptions().iterator().next();
160 speciesPage.setTaxonDescription(taxonDescription);
161
162 FeatureTree featureTree = dataSet.getFeatureTrees().get(0);
163
164 speciesPage.setTaxonDescriptionSections(constructDescriptionElementsWithLevels(new ArrayList<DescriptionElementBase>(taxonDescription.getElements()),getFeatures(featureTree.getRoot(),new HashSet<Feature>()),featureTree));
165
166
167 final List<SynonymRelationship> results = new ArrayList<SynonymRelationship>();
168 results.addAll(((Taxon)dataSet.getTaxonBases().get(0)).getSynonymRelations());
169 Pager<SynonymRelationship> synonyms = new StringLabelPagerImpl<SynonymRelationship>(0, 21, 30, results) {
170 protected String getLabel(Integer i) {
171 Synonym s = results.get(i).getSynonym();
172 return s.getName().getTitleCache();
173 }
174 };
175 speciesPage.setSynonyms(synonyms);
176
177 final List<TaxonRelationship> taxonResults = new ArrayList<TaxonRelationship>();
178 taxonResults.addAll(((Taxon)dataSet.getTaxonBases().get(1)).getRelationsToThisTaxon());
179
180 Pager<TaxonRelationship> taxa = new StringLabelPagerImpl<TaxonRelationship>(0, 3, 30, taxonResults) {
181 protected String getLabel(Integer i) {
182 NonViralName n = (NonViralName)taxonResults.get(i).getFromTaxon().getName();
183 return n.getSpecificEpithet();
184 }
185 };
186 speciesPage.setTaxonRelations(taxa);
187
188 speciesPage.setNameDescriptionSections(constructDescriptionElementsWithLevels(new ArrayList<DescriptionElementBase>(taxonDescription.getElements()),getFeatures(featureTree.getRoot(),new HashSet<Feature>()),featureTree));
189 speciesPage.setNameDescription(TaxonNameDescription.NewInstance(dataSet.getTaxonBases().get(0).getName()));
190 speciesPage.setOtherNameTopics(dataSet.getFeatureTrees().subList(1, 4));
191
192 speciesPage.setTypeDesignations(new DefaultPagerImpl<TypeDesignationBase>(0, 1, 30, dataSet.getTypeDesignations()));
193 List<NameRelationship> nameRelationships = new ArrayList<NameRelationship>();
194 nameRelationships.addAll(dataSet.getTaxonomicNames().get(3).getNameRelations());
195
196 speciesPage.setNameRelationships(new DefaultPagerImpl<NameRelationship>(0, 2, 30, nameRelationships));
197
198 List<HybridRelationship> hybridRelationships = new ArrayList<HybridRelationship>();
199 hybridRelationships.addAll(((BotanicalName)dataSet.getTaxonomicNames().get(28)).getChildRelationships());
200
201 speciesPage.setHybridRelationships(new DefaultPagerImpl<HybridRelationship>(0, 2, 30, hybridRelationships));
202
203 modelAndView.addObject(GenericController.RESOURCE_KEY,speciesPage);
204 outputMock(modelAndView,"target/generated-sources/mock/speciesPage.html");
205 }
206 }