1. Project Clover database Tue Dec 20 2016 21:24:09 CET
  2. Package org.xwiki.refactoring.internal.job

File EntityJobTest.java

 

Code metrics

0
61
13
2
215
155
14
0.23
4.69
6.5
1.08

Classes

Class Line # Actions
EntityJobTest 53 54 0% 7 0
1.0100%
EntityJobTest.NoopEntityJob 55 7 0% 7 4
0.692307769.2%
 

Contributing tests

This file is covered by 4 tests. .

Source view

1    /*
2    * See the NOTICE file distributed with this work for additional
3    * information regarding copyright ownership.
4    *
5    * This is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU Lesser General Public License as
7    * published by the Free Software Foundation; either version 2.1 of
8    * the License, or (at your option) any later version.
9    *
10    * This software is distributed in the hope that it will be useful,
11    * but WITHOUT ANY WARRANTY; without even the implied warranty of
12    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    * Lesser General Public License for more details.
14    *
15    * You should have received a copy of the GNU Lesser General Public
16    * License along with this software; if not, write to the Free
17    * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18    * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
19    */
20    package org.xwiki.refactoring.internal.job;
21   
22    import java.util.ArrayList;
23    import java.util.Arrays;
24    import java.util.List;
25   
26    import org.junit.Rule;
27    import org.junit.Test;
28    import org.xwiki.component.util.ReflectionUtils;
29    import org.xwiki.job.JobContext;
30    import org.xwiki.job.JobGroupPath;
31    import org.xwiki.job.event.status.JobProgressManager;
32    import org.xwiki.model.EntityType;
33    import org.xwiki.model.reference.DocumentReference;
34    import org.xwiki.model.reference.EntityReference;
35    import org.xwiki.model.reference.EntityReferenceProvider;
36    import org.xwiki.model.reference.SpaceReference;
37    import org.xwiki.refactoring.internal.ModelBridge;
38    import org.xwiki.refactoring.internal.job.AbstractEntityJob.Visitor;
39    import org.xwiki.refactoring.job.EntityJobStatus;
40    import org.xwiki.refactoring.job.EntityRequest;
41    import org.xwiki.security.authorization.AuthorizationManager;
42    import org.xwiki.security.authorization.Right;
43    import org.xwiki.test.mockito.MockitoComponentManagerRule;
44   
45    import static org.junit.Assert.*;
46    import static org.mockito.Mockito.*;
47   
48    /**
49    * Unit tests for {@link AbstractEntityJob}.
50    *
51    * @version $Id: 0ac96b0f2c34ae91de06c25a356acac6cdb0bb53 $
52    */
 
53    public class EntityJobTest
54    {
 
55    private static class NoopEntityJob extends AbstractEntityJob<EntityRequest, EntityJobStatus<EntityRequest>>
56    {
 
57  0 toggle @Override
58    public String getType()
59    {
60  0 return null;
61    }
62   
 
63  5 toggle @Override
64    protected EntityJobStatus<EntityRequest> createNewStatus(EntityRequest request)
65    {
66  5 return new EntityJobStatus<EntityRequest>(request, this.observationManager, this.loggerManager, null);
67    }
68   
 
69  1 toggle @Override
70    public void run()
71    {
72  1 try {
73  1 super.runInternal();
74    } catch (Exception e) {
75  0 throw new RuntimeException(e);
76    }
77    }
78   
 
79  0 toggle @Override
80    protected void process(EntityReference entityReference)
81    {
82    // No operation.
83    }
84   
 
85  1 toggle @Override
86    public void visitDocuments(SpaceReference spaceReference, Visitor<DocumentReference> visitor)
87    {
88  1 super.visitDocuments(spaceReference, visitor);
89    }
90   
 
91  3 toggle @Override
92    public boolean hasAccess(Right right, EntityReference reference)
93    {
94  3 return super.hasAccess(right, reference);
95    }
96    }
97   
98    @Rule
99    public MockitoComponentManagerRule mocker = new MockitoComponentManagerRule();
100   
101    private AuthorizationManager authorization = mock(AuthorizationManager.class);
102   
103    private ModelBridge modelBridge = mock(ModelBridge.class);
104   
 
105  5 toggle private void initialize(NoopEntityJob job, EntityRequest request)
106    {
107  5 ReflectionUtils.setFieldValue(job, "jobContext", mock(JobContext.class));
108  5 ReflectionUtils.setFieldValue(job, "progressManager", mock(JobProgressManager.class));
109  5 ReflectionUtils.setFieldValue(job, "authorization", this.authorization);
110  5 ReflectionUtils.setFieldValue(job, "modelBridge", this.modelBridge);
111   
112  5 EntityReferenceProvider defaultEntityReferenceProvider = mock(EntityReferenceProvider.class);
113  5 ReflectionUtils.setFieldValue(job, "defaultEntityReferenceProvider", defaultEntityReferenceProvider);
114  5 when(defaultEntityReferenceProvider.getDefaultReference(EntityType.DOCUMENT)).thenReturn(
115    new EntityReference("WebHome", EntityType.DOCUMENT, null));
116   
117  5 job.initialize(request);
118    }
119   
 
120  1 toggle @Test
121    public void getGroupPath()
122    {
123  1 NoopEntityJob job = new NoopEntityJob();
124  1 EntityRequest request = new EntityRequest();
125   
126  1 DocumentReference aliceReference = new DocumentReference("chess", Arrays.asList("Path", "To"), "Alice");
127  1 request.setEntityReferences(aliceReference.getReversedReferenceChain());
128  1 initialize(job, request);
129  1 assertEquals(new JobGroupPath(Arrays.asList("refactoring", "chess")), job.getGroupPath());
130   
131  1 DocumentReference bobReference = new DocumentReference("dev", Arrays.asList("Path", "To"), "Bob");
132  1 request.setEntityReferences(Arrays.<EntityReference>asList(aliceReference, bobReference));
133  1 initialize(job, request);
134  1 assertEquals(new JobGroupPath(Arrays.asList("refactoring")), job.getGroupPath());
135    }
136   
 
137  1 toggle @Test
138    public void processEachEntity()
139    {
140  1 final List<EntityReference> references = new ArrayList<>();
141  1 NoopEntityJob job = new NoopEntityJob()
142    {
 
143  4 toggle @Override
144    protected void process(EntityReference entityReference)
145    {
146  4 references.add(entityReference);
147    }
148    };
149   
150  1 DocumentReference documentReference = new DocumentReference("chess", Arrays.asList("Path", "To"), "Success");
151  1 EntityRequest request = new EntityRequest();
152  1 request.setEntityReferences(documentReference.getReversedReferenceChain());
153  1 initialize(job, request);
154  1 job.run();
155  1 assertEquals(request.getEntityReferences(), references);
156    }
157   
 
158  1 toggle @Test
159    public void visitDocuments()
160    {
161  1 DocumentReference alice = new DocumentReference("foo", "Alice", "WebHome");
162  1 DocumentReference alicePrefs = new DocumentReference("WebPreferences", alice.getLastSpaceReference());
163  1 DocumentReference aliceBio = new DocumentReference("Bio", alice.getLastSpaceReference());
164   
165  1 DocumentReference bob = new DocumentReference("foo", Arrays.asList("Alice", "Bob"), "WebHome");
166  1 DocumentReference bobPrefs = new DocumentReference("WebPreferences", bob.getLastSpaceReference());
167  1 DocumentReference bobBio = new DocumentReference("Bio", bob.getLastSpaceReference());
168   
169  1 DocumentReference carolBio = new DocumentReference("bar", Arrays.asList("Users", "Carol"), "Bio");
170   
171  1 SpaceReference spaceReference = mock(SpaceReference.class);
172  1 when(this.modelBridge.getDocumentReferences(spaceReference)).thenReturn(
173    Arrays.asList(alice, alicePrefs, aliceBio, bob, bobPrefs, bobBio, carolBio));
174   
175  1 NoopEntityJob job = new NoopEntityJob();
176  1 initialize(job, new EntityRequest());
177   
178  1 final List<DocumentReference> documentReferences = new ArrayList<>();
179  1 job.visitDocuments(spaceReference, new Visitor<DocumentReference>()
180    {
 
181  7 toggle @Override
182    public void visit(DocumentReference documentReference)
183    {
184  7 documentReferences.add(documentReference);
185    }
186    });
187    // Space preferences documents are handled after their siblings.
188  1 assertEquals(Arrays.asList(carolBio, aliceBio, bobBio, bob, bobPrefs, alice, alicePrefs), documentReferences);
189    }
190   
 
191  1 toggle @Test
192    public void hasAccess()
193    {
194  1 EntityRequest request = mock(EntityRequest.class);
195  1 when(request.isCheckRights()).thenReturn(true, true, false);
196   
197  1 DocumentReference userReference = new DocumentReference("foo", "Users", "Alice");
198  1 when(request.getUserReference()).thenReturn(userReference);
199   
200  1 DocumentReference documentReference = new DocumentReference("math", "Space", "Page");
201  1 when(this.authorization.hasAccess(Right.EDIT, userReference, documentReference.getLastSpaceReference()))
202    .thenReturn(true);
203  1 when(this.authorization.hasAccess(Right.DELETE, userReference, documentReference)).thenReturn(false);
204   
205  1 NoopEntityJob job = new NoopEntityJob();
206  1 initialize(job, request);
207   
208    // checkRights = true
209  1 assertTrue(job.hasAccess(Right.EDIT, documentReference.getLastSpaceReference()));
210  1 assertFalse(job.hasAccess(Right.DELETE, documentReference));
211   
212    // checkRights = false
213  1 assertTrue(job.hasAccess(Right.DELETE, documentReference));
214    }
215    }