Project

General

Profile

Download (6.68 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.io.FileNotFoundException;
9
import java.util.Iterator;
10
import java.util.Set;
11
import java.util.UUID;
12

    
13
import javax.sql.DataSource;
14

    
15
import org.junit.Assert;
16
import org.apache.log4j.Logger;
17
import org.junit.Before;
18
import org.junit.Ignore;
19
import org.junit.Test;
20
import org.junit.runner.RunWith;
21
import org.springframework.security.authentication.AuthenticationManager;
22
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
23
import org.springframework.security.core.Authentication;
24
import org.springframework.security.core.context.SecurityContext;
25
import org.springframework.security.core.context.SecurityContextHolder;
26
import org.unitils.UnitilsJUnit4TestClassRunner;
27
import org.unitils.database.annotations.TestDataSource;
28
import org.unitils.database.annotations.Transactional;
29
import org.unitils.database.util.TransactionMode;
30
import org.unitils.dbunit.annotation.DataSet;
31
import org.unitils.spring.annotation.SpringApplicationContext;
32
import org.unitils.spring.annotation.SpringBeanByName;
33

    
34
import eu.etaxonomy.cdm.api.service.DeleteResult.DeleteStatus;
35
import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;
36
import eu.etaxonomy.cdm.model.description.Feature;
37
import eu.etaxonomy.cdm.model.description.TaxonDescription;
38
import eu.etaxonomy.cdm.model.description.TextData;
39
import eu.etaxonomy.cdm.model.media.Media;
40
import eu.etaxonomy.cdm.model.taxon.Taxon;
41
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
42
import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmPermissionEvaluator;
43
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTestWithSecurity;
44

    
45

    
46

    
47
/**
48
 * Test class only for development purposes, must be run in suite.
49
 *
50
 */
51
//@RunWith(UnitilsJUnit4TestClassRunner.class)
52
//@SpringApplicationContext({"/eu/etaxonomy/cdm/applicationContextSecurity.xml"})
53
//@Transactional
54
@Ignore // should be ignored
55
@DataSet("SecurityTest.xml")
56
public class SecurityWithTransaction extends CdmTransactionalIntegrationTestWithSecurity {
57

    
58
    private static final Logger logger = Logger.getLogger(SecurityWithTransaction.class);
59

    
60
    @SpringBeanByName
61
    private ITaxonService taxonService;
62

    
63
    @SpringBeanByName
64
    private IDescriptionService descriptionService;
65

    
66
    @SpringBeanByName
67
    private ITaxonNodeService taxonNodeService;
68

    
69
    @SpringBeanByName
70
    private IUserService userService;
71

    
72

    
73
    @TestDataSource
74
    protected DataSource dataSource;
75

    
76
    private Authentication authentication;
77

    
78
    @SpringBeanByName
79
    private AuthenticationManager authenticationManager;
80

    
81
    @SpringBeanByName
82
    private CdmPermissionEvaluator permissionEvaluator;
83

    
84
    private UsernamePasswordAuthenticationToken token;
85

    
86

    
87
    @Before
88
    public void setUp(){
89
        token = new UsernamePasswordAuthenticationToken("admin", "sPePhAz6");
90
    }
91

    
92
    @Test
93
    public void testDeleteTaxon(){
94
        token = new UsernamePasswordAuthenticationToken("taxonomist", "test4");
95
        authentication = authenticationManager.authenticate(token);
96
        SecurityContext context = SecurityContextHolder.getContext();
97
        context.setAuthentication(authentication);
98
        Taxon actualTaxon = (Taxon)taxonService.find(UUID.fromString("7b8b5cb3-37ba-4dba-91ac-4c6ffd6ac331"));
99

    
100
        //try {
101
		DeleteResult result = taxonService.deleteTaxon(actualTaxon, null, null);
102
		/*} catch (DataChangeNoRollbackException e) {
103
			Assert.fail();
104
		}*/
105
		if (!result.isOk()){
106
			Assert.fail();
107
		}
108
    }
109

    
110

    
111
    @Test
112
    public void testSaveOrUpdateDescription(){
113

    
114
        authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("descriptionEditor", "test"));
115
        SecurityContext context = SecurityContextHolder.getContext();
116
        context.setAuthentication(authentication);
117
        /*Taxon taxon = (Taxon) taxonService.load(UUID.fromString("7b8b5cb3-37ba-4dba-91ac-4c6ffd6ac331"));
118

    
119
        Set<TaxonDescription> descriptions = taxon.getDescriptions();
120

    
121
        Iterator<TaxonDescription> iterator = descriptions.iterator();
122

    
123
        TaxonDescription description = iterator.next();*/
124
        TaxonDescription description = (TaxonDescription) descriptionService.find(UUID.fromString("eb17b80a-9be6-4642-a6a8-b19a318925e6"));
125

    
126
        TextData textData = new TextData();
127
        textData.setFeature(Feature.ECOLOGY());
128
        Media media = Media.NewInstance();
129
        textData.addMedia(media);
130

    
131

    
132

    
133
        //descriptionService.saveDescriptionElement(textData);
134
        description.addElement(textData);
135

    
136
        descriptionService.saveOrUpdate(description);
137

    
138
        Taxon taxon = (Taxon) taxonService.find(UUID.fromString("7b8b5cb3-37ba-4dba-91ac-4c6ffd6ac331"));
139
        Set<TaxonDescription> descriptions = taxon.getDescriptions();
140

    
141
        Iterator<TaxonDescription> iterator = descriptions.iterator();
142

    
143
        description = iterator.next();
144
        assertEquals(1, descriptions.size());
145
        assertEquals(2,description.getElements().size());
146

    
147

    
148

    
149
    }
150

    
151
    @Test
152
    public void testAllowOnlyAccessToPartOfTree(){
153
        authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken("partEditor", "test4"));
154
        SecurityContext context = SecurityContextHolder.getContext();
155
        context.setAuthentication(authentication);
156

    
157
        Taxon tribe = (Taxon)taxonService.find(UUID.fromString("928a0167-98cd-4555-bf72-52116d067625"));
158
        Taxon taxon = (Taxon)taxonService.find(UUID.fromString("bc09aca6-06fd-4905-b1e7-cbf7cc65d783"));
159
        Iterator<TaxonNode> it = tribe.getTaxonNodes().iterator();
160
        TaxonNode node = it.next();
161

    
162
        assertFalse(permissionEvaluator.hasPermission(authentication, node, "UPDATE"));
163
        node = node.getChildNodes().iterator().next();
164

    
165
        System.err.println(node.getUuid());
166

    
167
        assertTrue(permissionEvaluator.hasPermission(authentication, node, "UPDATE"));
168
        node = node.getChildNodes().iterator().next();
169
        assertTrue(permissionEvaluator.hasPermission(authentication, node, "UPDATE"));
170
        TaxonDescription description = TaxonDescription.NewInstance(taxon);
171

    
172
        taxonNodeService.saveOrUpdate(node);
173
        assertFalse(permissionEvaluator.hasPermission(authentication, description, "UPDATE"));
174

    
175

    
176
    }
177

    
178
    /* (non-Javadoc)
179
     * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
180
     */
181
    @Override
182
    public void createTestDataSet() throws FileNotFoundException {
183
        // TODO Auto-generated method stub
184
        
185
    }
186

    
187

    
188
}
(17-17/27)