1 package org.cateproject.service;
2
3 import java.util.ArrayList;
4 import java.util.EnumSet;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.UUID;
9
10 import org.jbpm.api.TaskService;
11 import org.jbpm.api.task.Task;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.springframework.security.authentication.AuthenticationManager;
15 import org.springframework.security.authentication.TestingAuthenticationToken;
16 import org.springframework.security.core.Authentication;
17 import org.springframework.security.core.GrantedAuthority;
18 import org.springframework.security.core.context.SecurityContextHolder;
19 import org.springframework.security.core.context.SecurityContextImpl;
20 import org.springframework.transaction.TransactionStatus;
21 import org.unitils.dbunit.annotation.DataSet;
22 import org.unitils.dbunit.annotation.ExpectedDataSet;
23 import org.unitils.spring.annotation.SpringBeanByType;
24
25 import eu.etaxonomy.cdm.api.service.IAgentService;
26 import eu.etaxonomy.cdm.api.service.IAnnotationService;
27 import eu.etaxonomy.cdm.api.service.ITaxonService;
28 import eu.etaxonomy.cdm.database.PersistentTermInitializer;
29 import eu.etaxonomy.cdm.model.agent.Person;
30 import eu.etaxonomy.cdm.model.common.Annotation;
31 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
32 import eu.etaxonomy.cdm.model.common.User;
33 import eu.etaxonomy.cdm.model.common.VocabularyEnum;
34 import eu.etaxonomy.cdm.model.taxon.Taxon;
35 import eu.etaxonomy.cdm.persistence.dao.common.ITermVocabularyDao;
36 import eu.etaxonomy.cdm.persistence.query.OrderHint;
37 import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder;
38 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
39
40 public class AnnotationServiceTest extends CdmTransactionalIntegrationTest {
41
42 @SpringBeanByType
43 private IAgentService agentService;
44
45 @SpringBeanByType
46 private ITaxonService taxonService;
47
48 @SpringBeanByType
49 private IAnnotationService annotationService;
50
51 @SpringBeanByType
52 private TaskService taskService;
53
54 @SpringBeanByType
55 private AuthenticationManager authenticationManager;
56
57 @SpringBeanByType
58 private ITermVocabularyDao vocabularyDao;
59
60 private UUID uuid;
61 private UUID personUuid;
62 private User user;
63
64 @Before
65 public void setUp() {
66
67 uuid = UUID.fromString("9bcd319a-2126-4e26-bd10-fac4706578d0");
68 personUuid = UUID.fromString("bbb450c0-0e2c-11de-8c30-0800200c9a66");
69
70 user = User.NewInstance("ben","password");
71 user.setPk(1l);
72
73 TestingAuthenticationToken token = new TestingAuthenticationToken(user, "password", new GrantedAuthority[0]);
74 Authentication authentication = authenticationManager.authenticate(token);
75
76 SecurityContextImpl secureContext = new SecurityContextImpl();
77 secureContext.setAuthentication(authentication);
78 SecurityContextHolder.setContext(secureContext);
79 }
80
81 private TermInitializer termInitializer = new TermInitializer();
82
83 class TermInitializer extends PersistentTermInitializer {
84 @Override
85 public void initialize(){
86 logger.debug("PersistentTermInitializer initialize start ...");
87
88 Map<UUID,DefinedTermBase> terms = new HashMap<UUID,DefinedTermBase>();
89 EnumSet<VocabularyEnum> vocabularies = EnumSet.of(VocabularyEnum.Language,VocabularyEnum.MarkerType);
90
91 TransactionStatus txStatus = transactionManager.getTransaction(txDefinition);
92 for(VocabularyEnum vocabularyType : vocabularies) {
93 secondPass(vocabularyType.getClazz(), vocabularyType.getUuid(), new HashMap<UUID, DefinedTermBase>());
94 }
95 transactionManager.commit(txStatus);
96 }
97
98
99 }
100
101 @Test
102 @DataSet("AnnotationServiceTest.testSubmitAnnotation.xml")
103 @ExpectedDataSet
104 public void testSubmitAnnotation() throws Exception {
105 termInitializer.setTransactionManager(super.getTransactionManager());
106 termInitializer.setVocabularyDao(vocabularyDao);
107 termInitializer.initialize();
108
109 Taxon taxon = (Taxon)taxonService.find(uuid);
110 assert taxon != null : "Taxon must not be null";
111
112 Person person = (Person)agentService.find(personUuid);
113 assert person != null : "Person must not be null";
114
115 Annotation annotation = Annotation.NewDefaultLanguageInstance("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
116 annotation.setCommentator(person);
117 taxon.addAnnotation(annotation);
118
119 taxonService.update(taxon);
120
121 annotationService.save(annotation);
122 setComplete();
123 endTransaction();
124
125 }
126
127 @Test
128 @DataSet("AnnotationServiceTest.testAcceptAnnotation.xml")
129 @ExpectedDataSet
130 public void testAcceptAnnotation() throws Exception {
131 List<OrderHint> orderHints = new ArrayList<OrderHint>();
132 orderHints.add(new OrderHint("create",SortOrder.ASCENDING));
133 List<String> propertyPaths = new ArrayList<String>();
134 List<Task> tasks = taskService.createTaskQuery().candidate(user.getName()).list();
135
136 taskService.takeTask(tasks.get(0).getId(),user.getName());
137 taskService.completeTask(tasks.get(0).getId(),"accept");
138 setComplete();
139 endTransaction();
140
141 }
142 }