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

File MoveJobTest.java

 

Code metrics

0
106
12
1
261
185
12
0.11
8.83
12
1

Classes

Class Line # Actions
MoveJobTest 46 106 0% 12 0
1.0100%
 

Contributing tests

This file is covered by 11 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.Arrays;
23    import java.util.Collections;
24    import java.util.Map;
25   
26    import org.junit.Rule;
27    import org.junit.Test;
28    import org.xwiki.job.Job;
29    import org.xwiki.model.EntityType;
30    import org.xwiki.model.reference.DocumentReference;
31    import org.xwiki.model.reference.SpaceReference;
32    import org.xwiki.model.reference.WikiReference;
33    import org.xwiki.refactoring.internal.LinkRefactoring;
34    import org.xwiki.refactoring.job.MoveRequest;
35    import org.xwiki.security.authorization.Right;
36    import org.xwiki.test.mockito.MockitoComponentMockingRule;
37   
38    import static org.mockito.ArgumentMatchers.*;
39    import static org.mockito.Mockito.*;
40   
41    /**
42    * Unit tests for {@link MoveJob}.
43    *
44    * @version $Id: 0b96425de70b3961a840da2fcf5a3932faae7020 $
45    */
 
46    public class MoveJobTest extends AbstractMoveJobTest
47    {
48    @Rule
49    public MockitoComponentMockingRule<Job> mocker = new MockitoComponentMockingRule<Job>(MoveJob.class);
50   
 
51  48 toggle @Override
52    protected MockitoComponentMockingRule<Job> getMocker()
53    {
54  48 return this.mocker;
55    }
56   
 
57  1 toggle @Test
58    public void moveInsideItsOwnHierarchy() throws Exception
59    {
60  1 SpaceReference spaceReference =
61    new SpaceReference("Entity", new SpaceReference("Model", new WikiReference("code")));
62   
63  1 run(createRequest(spaceReference.getParent(), spaceReference));
64  1 verify(this.mocker.getMockedLogger()).error("Cannot make [{}] a descendant of itself.",
65    spaceReference.getParent());
66   
67  1 verifyNoMove();
68    }
69   
 
70  1 toggle @Test
71    public void moveUnsupportedEntity() throws Exception
72    {
73  1 run(createRequest(new WikiReference("from"), new WikiReference("to")));
74  1 verify(this.mocker.getMockedLogger()).error("Unsupported source entity type [{}].", EntityType.WIKI);
75   
76  1 verifyNoMove();
77    }
78   
 
79  1 toggle @Test
80    public void moveToUnsupportedDestination() throws Exception
81    {
82  1 run(createRequest(new DocumentReference("wiki", "Space", "Page"), new WikiReference("test")));
83  1 verify(this.mocker.getMockedLogger()).error("Unsupported destination entity type [{}] for a document.",
84    EntityType.WIKI);
85   
86  1 run(createRequest(new DocumentReference("wiki", "Space", "Page"), new DocumentReference("test", "A", "B")));
87  1 verify(this.mocker.getMockedLogger()).error("Unsupported destination entity type [{}] for a document.",
88    EntityType.DOCUMENT);
89   
90  1 run(createRequest(new SpaceReference("Space", new WikiReference("wiki")), new DocumentReference("test", "A",
91    "B")));
92  1 verify(this.mocker.getMockedLogger()).error("Unsupported destination entity type [{}] for a space.",
93    EntityType.DOCUMENT);
94   
95  1 verifyNoMove();
96    }
97   
 
98  1 toggle @Test
99    public void moveMissingDocument() throws Exception
100    {
101  1 DocumentReference sourceReference = new DocumentReference("foo", "A", "Page");
102  1 run(createRequest(sourceReference, new SpaceReference("B", new WikiReference("bar"))));
103  1 verify(this.mocker.getMockedLogger()).warn("Skipping [{}] because it doesn't exist.", sourceReference);
104   
105  1 verifyNoMove();
106    }
107   
 
108  1 toggle @Test
109    public void moveDocumentWithoutDeleteRight() throws Exception
110    {
111  1 DocumentReference documentReference = new DocumentReference("wiki", "Space", "Page");
112  1 when(this.modelBridge.exists(documentReference)).thenReturn(true);
113   
114  1 DocumentReference userReference = new DocumentReference("wiki", "Users", "Alice");
115  1 when(this.authorization.hasAccess(Right.DELETE, userReference, documentReference)).thenReturn(false);
116   
117  1 MoveRequest request = createRequest(documentReference, new SpaceReference("Foo", new WikiReference("bar")));
118  1 request.setCheckRights(true);
119  1 request.setUserReference(userReference);
120  1 run(request);
121   
122  1 verify(this.mocker.getMockedLogger()).error("You are not allowed to delete [{}].", documentReference);
123   
124  1 verifyNoMove();
125    }
126   
 
127  1 toggle @Test
128    public void moveDocumentToRestrictedDestination() throws Exception
129    {
130  1 DocumentReference oldReference = new DocumentReference("wiki", "One", "Page");
131  1 DocumentReference newReference = new DocumentReference("wiki", "Two", "Page");
132  1 when(this.modelBridge.exists(oldReference)).thenReturn(true);
133   
134  1 DocumentReference userReference = new DocumentReference("wiki", "Users", "Alice");
135  1 when(this.authorization.hasAccess(Right.DELETE, userReference, oldReference)).thenReturn(true);
136  1 when(this.authorization.hasAccess(Right.VIEW, userReference, newReference)).thenReturn(false);
137   
138  1 MoveRequest request = createRequest(oldReference, newReference.getParent());
139  1 request.setCheckRights(true);
140  1 request.setUserReference(userReference);
141  1 run(request);
142   
143  1 verify(this.mocker.getMockedLogger()).error(
144    "You don't have sufficient permissions over the destination document [{}].", newReference);
145   
146  1 verifyNoMove();
147    }
148   
 
149  1 toggle @Test
150    public void moveDocumentToSpace() throws Exception
151    {
152  1 DocumentReference oldReference = new DocumentReference("wiki", "One", "Page");
153  1 when(this.modelBridge.exists(oldReference)).thenReturn(true);
154   
155  1 DocumentReference backLinkReference = new DocumentReference("wiki", "Three", "BackLink");
156  1 when(this.modelBridge.getBackLinkedReferences(oldReference)).thenReturn(Arrays.asList(backLinkReference));
157   
158  1 DocumentReference newReference = new DocumentReference("wiki", "Two", "Page");
159  1 when(this.modelBridge.exists(newReference)).thenReturn(true);
160   
161  1 DocumentReference userReference = new DocumentReference("wiki", "Users", "Alice");
162   
163  1 when(this.modelBridge.delete(newReference)).thenReturn(true);
164  1 when(this.modelBridge.copy(oldReference, newReference)).thenReturn(true);
165   
166  1 MoveRequest request = createRequest(oldReference, newReference.getParent());
167  1 request.setCheckRights(false);
168  1 request.setInteractive(false);
169  1 request.setUserReference(userReference);
170  1 run(request);
171   
172  1 LinkRefactoring linkRefactoring = getMocker().getInstance(LinkRefactoring.class);
173  1 verify(linkRefactoring).renameLinks(backLinkReference, oldReference, newReference);
174  1 verify(linkRefactoring).updateRelativeLinks(oldReference, newReference);
175   
176  1 verify(this.modelBridge).setContextUserReference(userReference);
177  1 verify(this.modelBridge).delete(oldReference);
178  1 verify(this.modelBridge).createRedirect(oldReference, newReference);
179    }
180   
 
181  1 toggle @Test
182    public void moveDocumentToSpaceHome() throws Exception
183    {
184  1 DocumentReference source = new DocumentReference("wiki", "A", "B");
185  1 when(this.modelBridge.exists(source)).thenReturn(true);
186  1 DocumentReference destination = new DocumentReference("wiki", "C", "WebHome");
187   
188  1 MoveRequest request = createRequest(source, destination);
189  1 request.setCheckRights(false);
190  1 run(request);
191   
192  1 verify(this.modelBridge).copy(source, new DocumentReference("wiki", "C", "B"));
193    }
194   
 
195  1 toggle @Test
196    public void moveSpaceHomeDeep() throws Exception
197    {
198  1 DocumentReference spaceHome = new DocumentReference("chess", Arrays.asList("A", "B", "C"), "WebHome");
199  1 DocumentReference docFromSpace = new DocumentReference("X", spaceHome.getLastSpaceReference());
200  1 when(this.modelBridge.getDocumentReferences(spaceHome.getLastSpaceReference())).thenReturn(
201    Arrays.asList(docFromSpace));
202  1 when(this.modelBridge.exists(docFromSpace)).thenReturn(true);
203   
204  1 WikiReference newWiki = new WikiReference("tennis");
205   
206  1 MoveRequest request = createRequest(spaceHome, newWiki);
207  1 request.setCheckRights(false);
208  1 request.setDeep(true);
209  1 run(request);
210   
211  1 verify(this.modelBridge).copy(docFromSpace, new DocumentReference("tennis", "C", "X"));
212    }
213   
 
214  1 toggle @Test
215    public void moveSpaceToSpaceHome() throws Exception
216    {
217  1 SpaceReference sourceSpace = new SpaceReference("wiki", "A", "B");
218  1 DocumentReference sourceDoc = new DocumentReference("X", sourceSpace);
219  1 when(this.modelBridge.getDocumentReferences(sourceSpace)).thenReturn(Arrays.asList(sourceDoc));
220  1 when(this.modelBridge.exists(sourceDoc)).thenReturn(true);
221   
222  1 DocumentReference destination = new DocumentReference("wiki", "C", "WebHome");
223   
224  1 MoveRequest request = createRequest(sourceSpace, destination);
225  1 request.setCheckRights(false);
226  1 run(request);
227   
228  1 verify(this.modelBridge).copy(sourceDoc, new DocumentReference("wiki", Arrays.asList("C", "B"), "X"));
229    }
230   
 
231  1 toggle @Test
232    public void copyDocument() throws Exception
233    {
234  1 DocumentReference sourceReference = new DocumentReference("wiki", "Space", "Page");
235  1 when(this.modelBridge.exists(sourceReference)).thenReturn(true);
236   
237  1 DocumentReference backLinkReference = new DocumentReference("wiki", "A", "BackLink");
238  1 when(this.modelBridge.getBackLinkedReferences(sourceReference)).thenReturn(Arrays.asList(backLinkReference));
239   
240  1 DocumentReference copyReference = new DocumentReference("wiki", "Copy", "Page");
241  1 when(this.modelBridge.copy(sourceReference, copyReference)).thenReturn(true);
242   
243  1 MoveRequest request = createRequest(sourceReference, copyReference.getParent());
244  1 request.setCheckRights(false);
245  1 request.setInteractive(false);
246  1 request.setDeleteSource(false);
247  1 Map<String, String> parameters = Collections.singletonMap("foo", "bar");
248  1 request.setEntityParameters(sourceReference, parameters);
249  1 run(request);
250   
251  1 verify(this.modelBridge).update(copyReference, parameters);
252   
253  1 LinkRefactoring linkRefactoring = getMocker().getInstance(LinkRefactoring.class);
254  1 verify(linkRefactoring, never()).renameLinks(any(DocumentReference.class), any(DocumentReference.class),
255    any(DocumentReference.class));
256  1 verify(linkRefactoring).updateRelativeLinks(sourceReference, copyReference);
257   
258  1 verify(this.modelBridge, never()).delete(any(DocumentReference.class));
259  1 verify(this.modelBridge, never()).createRedirect(any(DocumentReference.class), any(DocumentReference.class));
260    }
261    }