View Javadoc

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);  // here we're testing the CheckAnnotationAspect pointcut
122         setComplete();
123         endTransaction();
124 //        printDataSet(new FileOutputStream("test.xml"));
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 //        printDataSet(new FileOutputStream("test.xml"));
141     }
142 }