Project

General

Profile

Download (5.47 KB) Statistics
| Branch: | Tag: | Revision:
1

    
2
package eu.etaxonomy.cdm.api.service;
3

    
4
import static org.junit.Assert.assertEquals;
5
import static org.junit.Assert.assertFalse;
6
import static org.junit.Assert.assertTrue;
7

    
8
import java.util.Iterator;
9
import java.util.Set;
10
import java.util.UUID;
11

    
12
import javax.sql.DataSource;
13

    
14
import org.apache.log4j.Logger;
15
import org.junit.Before;
16
import org.junit.Test;
17
import org.junit.runner.RunWith;
18

    
19
import org.springframework.security.authentication.AuthenticationManager;
20
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
21
import org.springframework.security.core.Authentication;
22
import org.springframework.security.core.context.SecurityContext;
23
import org.springframework.security.core.context.SecurityContextHolder;
24
import org.unitils.UnitilsJUnit4TestClassRunner;
25
import org.unitils.database.annotations.TestDataSource;
26
import org.unitils.database.annotations.Transactional;
27
import org.unitils.database.util.TransactionMode;
28
import org.unitils.dbunit.annotation.DataSet;
29
import org.unitils.spring.annotation.SpringApplicationContext;
30
import org.unitils.spring.annotation.SpringBeanByName;
31

    
32
import eu.etaxonomy.cdm.model.description.Feature;
33
import eu.etaxonomy.cdm.model.description.TaxonDescription;
34
import eu.etaxonomy.cdm.model.description.TextData;
35
import eu.etaxonomy.cdm.model.media.Media;
36
import eu.etaxonomy.cdm.model.taxon.Taxon;
37
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
38
import eu.etaxonomy.cdm.permission.CdmPermissionEvaluator;
39

    
40

    
41
@RunWith(UnitilsJUnit4TestClassRunner.class)
42
@SpringApplicationContext({"/eu/etaxonomy/cdm/applicationContextSecurity.xml"})
43
@DataSet("SecurityTest.xml")
44
@Transactional
45
public class SecurityWithTransaction {
46
	private static final Logger logger = Logger
47
			.getLogger(SecurityWithTransaction.class);
48
	
49
	@SpringBeanByName
50
	private ITaxonService taxonService;
51
	
52
	@SpringBeanByName
53
	private IDescriptionService descriptionService;
54
	
55
	@SpringBeanByName
56
	private ITaxonNodeService taxonNodeService;
57
	
58
	@SpringBeanByName
59
	private IUserService userService;
60
	
61
	
62
	@TestDataSource
63
	protected DataSource dataSource;
64
	
65
	private Authentication authentication;
66
	
67
	@SpringBeanByName
68
	private AuthenticationManager authenticationManager;
69
	
70
	private UsernamePasswordAuthenticationToken token;
71
	
72
	
73
	@Before
74
	public void setUp(){
75
		token = new UsernamePasswordAuthenticationToken("ben", "sPePhAz6");
76
	}
77
	
78
	@Test
79
	public void testDeleteTaxon(){
80
		token = new UsernamePasswordAuthenticationToken("taxonomist", "test3");
81
		authentication = authenticationManager.authenticate(token);
82
		SecurityContext context = SecurityContextHolder.getContext();
83
		context.setAuthentication(authentication);
84
		Taxon actualTaxon = (Taxon)taxonService.find(UUID.fromString("7b8b5cb3-37ba-4dba-91ac-4c6ffd6ac331"));
85
		
86
		taxonService.delete(actualTaxon);
87
	}
88
	
89
	
90
	@Test
91
	public void testSaveOrUpdateDescription(){
92
		
93
		authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("descriptionEditor", "test"));
94
		SecurityContext context = SecurityContextHolder.getContext();
95
		context.setAuthentication(authentication);
96
		/*Taxon taxon = (Taxon) taxonService.load(UUID.fromString("7b8b5cb3-37ba-4dba-91ac-4c6ffd6ac331"));
97
		
98
		Set<TaxonDescription> descriptions = taxon.getDescriptions();
99
		
100
		Iterator<TaxonDescription> iterator = descriptions.iterator();
101
		
102
		TaxonDescription description = iterator.next();*/
103
		TaxonDescription description = (TaxonDescription) descriptionService.find(UUID.fromString("eb17b80a-9be6-4642-a6a8-b19a318925e6"));
104
		
105
		TextData textData = new TextData();
106
		textData.setFeature(Feature.ECOLOGY());
107
		Media media = Media.NewInstance();
108
		textData.addMedia(media);
109
		
110
		
111
		
112
		//descriptionService.saveDescriptionElement(textData);
113
		description.addElement(textData);
114
		
115
		descriptionService.saveOrUpdate(description);
116
		
117
		Taxon taxon = (Taxon) taxonService.find(UUID.fromString("7b8b5cb3-37ba-4dba-91ac-4c6ffd6ac331"));
118
		Set<TaxonDescription> descriptions = taxon.getDescriptions();
119
		
120
		Iterator<TaxonDescription> iterator = descriptions.iterator();
121
		
122
		description = iterator.next();
123
		assertEquals(1, descriptions.size());
124
		assertEquals(2,description.getElements().size());
125
		
126
		
127
		
128
	}
129
	
130
	@Test
131
	public void testAllowOnlyAccessToPartOfTree(){
132
		authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("partEditor", "test4"));
133
		SecurityContext context = SecurityContextHolder.getContext();
134
		context.setAuthentication(authentication);
135
		
136
		Taxon tribe = (Taxon)taxonService.find(UUID.fromString("928a0167-98cd-4555-bf72-52116d067625"));
137
		Taxon taxon = (Taxon)taxonService.find(UUID.fromString("bc09aca6-06fd-4905-b1e7-cbf7cc65d783"));
138
		Iterator<TaxonNode> it = tribe.getTaxonNodes().iterator();
139
		TaxonNode node = it.next();
140
		
141
		CdmPermissionEvaluator permissionEvaluator = new CdmPermissionEvaluator();
142
		assertFalse(permissionEvaluator.hasPermission(authentication, node, "UPDATE"));
143
		node = node.getChildNodes().iterator().next();
144
		System.err.println(node.getUuid()); 
145
		assertTrue(permissionEvaluator.hasPermission(authentication, node, "UPDATE"));
146
		node = node.getChildNodes().iterator().next();
147
		assertTrue(permissionEvaluator.hasPermission(authentication, node, "UPDATE"));
148
		TaxonDescription description = TaxonDescription.NewInstance(taxon);
149
		
150
		taxonNodeService.saveOrUpdate(node);
151
		assertFalse(permissionEvaluator.hasPermission(authentication, description, "UPDATE"));
152
		
153
		
154
	}
155
	
156
	
157
}
(10-10/16)