Skip to content

Commit 41656cb

Browse files
committed
2 parents 38551ac + 31d7ba8 commit 41656cb

File tree

6 files changed

+99
-26
lines changed

6 files changed

+99
-26
lines changed

logicaldoc-util/src/main/java/com/logicaldoc/util/servlet/MockServletResponse.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class MockServletResponse implements HttpServletResponse {
4242
private String characterEncoding;
4343

4444
private Map<String, String> headers = new HashMap<>();
45+
46+
private int status = HttpServletResponse.SC_OK;
4547

4648
public MockServletResponse(File output) {
4749
super();
@@ -246,13 +248,13 @@ public void setIntHeader(String arg0, int arg1) {
246248
}
247249

248250
@Override
249-
public void setStatus(int arg0) {
250-
// Nothing to do
251+
public void setStatus(int status) {
252+
this.status = status;
251253
}
252254

253255
@Override
254-
public void setStatus(int arg0, String arg1) {
255-
// Nothing to do
256+
public void setStatus(int status, String statusMessage) {
257+
this.status = status;
256258
}
257259

258260
public int getContentLength() {
@@ -287,7 +289,7 @@ public Collection<String> getHeaders(String arg0) {
287289

288290
@Override
289291
public int getStatus() {
290-
return 0;
292+
return this.status;
291293
}
292294

293295
public void clear() {

logicaldoc-webdav/src/main/java/com/logicaldoc/webdav/context/ExportContextImpl.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,6 @@ private void writeFile(boolean hasContentLength) {
144144
if (outputCtx.hasStream() && outFile != null) {
145145
OutputStream out = outputCtx.getOutputStream();
146146
try {
147-
// make sure the content-length is set
148-
// if (!hasContentLength) {
149-
// outputCtx.setContentLength(outFile.length());
150-
// }
151147
FileInputStream in = new FileInputStream(outFile);
152148
IOUtil.spool(in, out);
153149
} catch (IOException e) {

logicaldoc-webdav/src/main/java/com/logicaldoc/webdav/resource/VersionControlledResourceImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ public String checkin() throws DavException {
143143
public void checkout() throws DavException {
144144
resourceService.checkout(getResource(), getResource().getSession());
145145
}
146+
147+
@Override
148+
public org.apache.jackrabbit.webdav.DavSession getSession() {
149+
return this.getSession();
150+
}
146151

147152
/**
148153
* @throws org.apache.jackrabbit.webdav.DavException error in the DAV

logicaldoc-webdav/src/main/java/com/logicaldoc/webdav/web/AbstractWebdavServlet.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ protected boolean execute(WebdavRequest request, WebdavResponse response, int me
286286
*/
287287
protected void doHead(WebdavRequest request, WebdavResponse response, DavResource resource)
288288
throws IOException, DavException {
289-
log.debug("head");
289+
log.debug("doHead");
290290
spoolResource(request, response, resource, false);
291291
}
292292

@@ -302,7 +302,7 @@ protected void doHead(WebdavRequest request, WebdavResponse response, DavResourc
302302
protected void doGet(WebdavRequest request, WebdavResponse response, DavResource resource)
303303
throws IOException, DavException {
304304

305-
log.debug("get");
305+
log.debug("doGet");
306306

307307
try {
308308
spoolResource(request, response, resource, true);
@@ -966,13 +966,16 @@ protected void doUncheckout(WebdavRequest request, WebdavResponse response, DavR
966966
throws DavException, IOException {
967967
log.debug("doUncheckout({})", resource.getDisplayName());
968968
if (!(resource instanceof VersionControlledResource)) {
969+
log.debug("resource IS NOT VersionControlledResource!");
969970
try {
970971
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
971972
} catch (IOException e) {
972973
// Nothing to do
974+
log.debug(e.getMessage(), e);
973975
}
974976
return;
975977
}
978+
976979
((VersionControlledResource) resource).uncheckout();
977980
response.setStatus(HttpServletResponse.SC_OK);
978981
}

logicaldoc-webdav/src/test/java/com/logicaldoc/webdav/resource/service/ResourceServiceImplTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.List;
1515

1616
import org.apache.jackrabbit.webdav.DavException;
17+
import org.junit.Assert;
1718
import org.junit.Test;
1819

1920
import com.logicaldoc.core.PersistenceException;
@@ -217,10 +218,31 @@ public void testMoveFolder() throws DavException {
217218

218219
source = testSubject.getResource("/Default/folder6", davSession);
219220
assertNull(source);
221+
222+
// rename a folder
223+
Resource source02 = testSubject.getResource("/Default/folder7", davSession);
224+
Resource destination02 = testSubject.getResource("/Default", davSession);
225+
226+
// Bad example, the rename must be done in a different way
227+
Resource badBlood = testSubject.move(source02, destination02, "reputation", davSession);
228+
assertNotNull(badBlood);
229+
assertFalse("reputation".equals(badBlood.getName()));
230+
assertEquals("folder7", badBlood.getName());
231+
assertTrue(badBlood.isFolder());
232+
233+
// good example (folder rename)
234+
source02.setName("delicate");
235+
Resource delicate = testSubject.move(source02, destination02, null, davSession);
236+
assertNotNull(delicate);
237+
assertEquals("delicate", delicate.getName());
238+
assertTrue(delicate.isFolder());
239+
220240
}
221241

222242
@Test
223243
public void testDeleteResource() throws DavException {
244+
245+
// delete document
224246
Resource resource = testSubject.getResource("/Default/one.pdf", davSession);
225247
assertNotNull(resource);
226248
assertEquals("one.pdf", resource.getName());
@@ -229,6 +251,7 @@ public void testDeleteResource() throws DavException {
229251
testSubject.deleteResource(resource, davSession);
230252
assertNull(testSubject.getResource("/Default/one.pdf", davSession));
231253

254+
// delete folder
232255
resource = testSubject.getResource("/Default/folder6", davSession);
233256
assertNotNull(resource);
234257
assertEquals("folder6", resource.getName());
@@ -257,6 +280,14 @@ public void testCopy() throws DavException {
257280

258281
source = testSubject.getResource("/Default/one.pdf", davSession);
259282
assertNotNull(source);
283+
284+
// Test copy Folder (it should produce an exception, as right now copy of folder is not supported)
285+
Resource dest02 = testSubject.getResource("/Default/folder7", davSession);
286+
try {
287+
testSubject.copy(destinationFolder, dest02, null, davSession);
288+
Assert.fail();
289+
} catch (DavException e) {
290+
}
260291
}
261292

262293
@Test
@@ -290,6 +321,7 @@ public void testCheckout() throws DavException, PersistenceException {
290321
doc = docDao.findById(1L);
291322
assertEquals(AbstractDocument.DOC_CHECKED_OUT, doc.getStatus());
292323

324+
// Test uncheckout
293325
resource = testSubject.getResource("/Default/one.pdf", davSession);
294326
testSubject.uncheckout(resource, davSession);
295327

logicaldoc-webdav/src/test/java/com/logicaldoc/webdav/web/WebdavServletTest.java

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import java.io.IOException;
99
import java.sql.SQLException;
1010

11+
import javax.servlet.http.HttpServletResponse;
12+
1113
import org.apache.jackrabbit.webdav.DavConstants;
14+
import org.apache.jackrabbit.webdav.DavMethods;
1215
import org.eclipse.jetty.util.StringUtil;
1316
import org.junit.Test;
1417

@@ -91,13 +94,15 @@ public void testService() throws IOException, PersistenceException {
9194
testVERSIONCONTROL();
9295

9396
testDELETE();
97+
98+
testUNCHECKOUT();
9499
}
95100

96101
public void testVERSIONCONTROL() throws IOException {
97102
File tempFile = FileUtil.createTempFile("webdav", ".xml");
98103
try {
99104
MockServletResponse response = new MockServletResponse(tempFile);
100-
MockServletRequest request = prepareRequest("VERSION-CONTROL", "/five.pdf");
105+
MockServletRequest request = prepareRequest(DavMethods.METHOD_VERSION_CONTROL, "/five.pdf");
101106
testSubject.service(request, response);
102107

103108
} finally {
@@ -110,7 +115,7 @@ public void testREPORT() throws IOException {
110115
File tempFile = FileUtil.createTempFile("webdav", ".xml");
111116
try {
112117
MockServletResponse response = new MockServletResponse(tempFile);
113-
MockServletRequest request = prepareRequest("REPORT", "/five.pdf");
118+
MockServletRequest request = prepareRequest(DavMethods.METHOD_REPORT, "/five.pdf");
114119
request.setBody("""
115120
<?xml version="1.0" encoding="utf-8" ?>
116121
<ld:filter-files xmlns:a="DAV:" xmlns:ld="http://logicaldoc.com/ns" >
@@ -135,7 +140,7 @@ public void testCHECKIN() throws IOException, PersistenceException {
135140
assertEquals(AbstractDocument.DOC_UNLOCKED, doc.getStatus());
136141

137142
MockServletResponse response = new MockServletResponse(tempFile);
138-
MockServletRequest request = prepareRequest("CHECKOUT", "/five.pdf");
143+
MockServletRequest request = prepareRequest(DavMethods.METHOD_CHECKOUT, "/five.pdf");
139144
testSubject.service(request, response);
140145

141146
doc = docDao.findById(5L);
@@ -160,7 +165,7 @@ public void testLOCK() throws IOException, PersistenceException {
160165
assertEquals(AbstractDocument.DOC_UNLOCKED, doc.getStatus());
161166

162167
MockServletResponse response = new MockServletResponse(tempFile);
163-
MockServletRequest request = prepareRequest("LOCK", "/five.pdf");
168+
MockServletRequest request = prepareRequest(DavMethods.METHOD_LOCK, "/five.pdf");
164169
testSubject.service(request, response);
165170

166171
doc = docDao.findById(5L);
@@ -180,7 +185,7 @@ public void testOPTIONS() throws IOException {
180185
File tempFile = FileUtil.createTempFile("webdav", ".xml");
181186
try {
182187
MockServletResponse response = new MockServletResponse(tempFile);
183-
MockServletRequest request = prepareRequest("OPTIONS", "/five.pdf");
188+
MockServletRequest request = prepareRequest(DavMethods.METHOD_OPTIONS, "/five.pdf");
184189
testSubject.service(request, response);
185190

186191
assertTrue(response.getHeader("Allow").contains("POST"));
@@ -196,7 +201,7 @@ public void testMKCOL() throws IOException {
196201
assertFalse(callPROPFIND().contains(PREFIX + "/folder6/newfolder"));
197202

198203
MockServletResponse response = new MockServletResponse(tempFile);
199-
MockServletRequest request = prepareRequest("MKCOL", "/folder6/newfolder");
204+
MockServletRequest request = prepareRequest(DavMethods.METHOD_MKCOL, "/folder6/newfolder");
200205
testSubject.service(request, response);
201206

202207
assertTrue(callPROPFIND().contains(PREFIX + "/folder6/newfolder"));
@@ -212,7 +217,7 @@ public void testMOVE() throws IOException {
212217
assertFalse(callPROPFIND().contains(PREFIX + "/folder6/moved.pdf"));
213218

214219
MockServletResponse response = new MockServletResponse(tempFile);
215-
MockServletRequest request = prepareRequest("MOVE", "/five.pdf");
220+
MockServletRequest request = prepareRequest(DavMethods.METHOD_MOVE, "/five.pdf");
216221
request.setHeader(DavConstants.HEADER_DESTINATION, PREFIX + "/folder6/moved.pdf");
217222
testSubject.service(request, response);
218223

@@ -230,7 +235,7 @@ public void testCOPY() throws IOException {
230235
assertFalse(callPROPFIND().contains(PREFIX + "/folder6/copied.pdf"));
231236

232237
MockServletResponse response = new MockServletResponse(tempFile);
233-
MockServletRequest request = prepareRequest("COPY", "/one.pdf");
238+
MockServletRequest request = prepareRequest(DavMethods.METHOD_COPY, "/one.pdf");
234239
request.setHeader(DavConstants.HEADER_DESTINATION, PREFIX + "/folder6/copied.pdf");
235240
testSubject.service(request, response);
236241

@@ -239,7 +244,7 @@ public void testCOPY() throws IOException {
239244

240245
// Copy over existing file
241246
response = new MockServletResponse(tempFile);
242-
request = prepareRequest("COPY", "/one.pdf");
247+
request = prepareRequest(DavMethods.METHOD_COPY, "/one.pdf");
243248
request.setHeader(DavConstants.HEADER_DESTINATION, PREFIX + "/folder6/copied.pdf");
244249
testSubject.service(request, response);
245250

@@ -256,7 +261,7 @@ public void testDELETE() throws IOException {
256261
assertTrue(callPROPFIND().contains(PREFIX + "/one.pdf"));
257262

258263
MockServletResponse response = new MockServletResponse(tempFile);
259-
MockServletRequest request = prepareRequest("DELETE", "/one.pdf");
264+
MockServletRequest request = prepareRequest(DavMethods.METHOD_DELETE, "/one.pdf");
260265
testSubject.service(request, response);
261266

262267
assertFalse(callPROPFIND().contains(PREFIX + "/one.pdf"));
@@ -270,7 +275,7 @@ private String callPROPFIND() throws IOException {
270275
try {
271276
MockServletResponse response = new MockServletResponse(tempFile);
272277

273-
MockServletRequest request = prepareRequest("PROPFIND", "");
278+
MockServletRequest request = prepareRequest(DavMethods.METHOD_PROPFIND, "");
274279
//request.setHeader("Depth", "1");
275280
request.setHeader("Accept-Encoding", "identity");
276281
request.setHeader("Content-Type", "application/xml; charset=utf-8");
@@ -290,7 +295,7 @@ public void testPUT() throws IOException {
290295
assertFalse(callPROPFIND().contains(PREFIX + "/folder6/newfile.pdf"));
291296

292297
MockServletResponse response = new MockServletResponse(tempFile);
293-
MockServletRequest request = prepareRequest("PUT", "/folder6/newfile1.pdf");
298+
MockServletRequest request = prepareRequest(DavMethods.METHOD_PUT, "/folder6/newfile1.pdf");
294299
request.setPayload(this.getClass().getResourceAsStream("/pdf1.pdf"));
295300
testSubject.service(request, response);
296301

@@ -324,7 +329,7 @@ public void testGET() throws IOException {
324329
File tempFile = FileUtil.createTempFile("webdav", ".pdf");
325330
try {
326331
MockServletResponse response = new MockServletResponse(tempFile);
327-
MockServletRequest request = prepareRequest("GET", "/one.pdf");
332+
MockServletRequest request = prepareRequest(DavMethods.METHOD_GET, "/one.pdf");
328333
testSubject.service(request, response);
329334

330335
assertEquals(127810L, tempFile.length());
@@ -337,7 +342,7 @@ public void testHEAD() throws IOException {
337342
File tempFile = FileUtil.createTempFile("webdav", ".xml");
338343
try {
339344
MockServletResponse response = new MockServletResponse(tempFile);
340-
MockServletRequest request = prepareRequest("HEAD", "/one.pdf");
345+
MockServletRequest request = prepareRequest(DavMethods.METHOD_HEAD, "/one.pdf");
341346
testSubject.service(request, response);
342347

343348
assertEquals("d-1_1.0", response.getHeaders().get("ETag"));
@@ -350,12 +355,42 @@ public void testPROPPATCH() throws IOException {
350355
File tempFile = FileUtil.createTempFile("webdav", ".xml");
351356
try {
352357
MockServletResponse response = new MockServletResponse(tempFile);
353-
MockServletRequest request = prepareRequest("PROPPATCH", "/one.pdf");
358+
MockServletRequest request = prepareRequest(DavMethods.METHOD_PROPPATCH, "/one.pdf");
354359
testSubject.service(request, response);
355360
} finally {
356361
FileUtil.delete(tempFile);
357362
}
358363
}
364+
365+
public void testUNCHECKOUT() throws IOException, PersistenceException {
366+
File tempFile = FileUtil.createTempFile("webdav", ".xml");
367+
try {
368+
Document doc = docDao.findById(7L);
369+
assertEquals(AbstractDocument.DOC_UNLOCKED, doc.getStatus());
370+
371+
// SET THE STATUS TO CHECKOUT
372+
MockServletResponse response = new MockServletResponse(tempFile);
373+
MockServletRequest request = prepareRequest(DavMethods.METHOD_CHECKOUT, "/New error indexing documents.eml");
374+
testSubject.service(request, response);
375+
376+
doc = docDao.findById(7L);
377+
assertEquals(AbstractDocument.DOC_CHECKED_OUT, doc.getStatus());
378+
379+
// Perform the uncheckout
380+
response = new MockServletResponse(tempFile);
381+
request = prepareRequest(DavMethods.METHOD_UNCHECKOUT, "/New error indexing documents.eml");
382+
testSubject.service(request, response);
383+
384+
// Check the response
385+
assertEquals(HttpServletResponse.SC_OK, response.getStatus());
386+
387+
// Check the value
388+
doc = docDao.findById(7L);
389+
assertEquals(AbstractDocument.DOC_UNLOCKED, doc.getStatus());
390+
} finally {
391+
FileUtil.delete(tempFile);
392+
}
393+
}
359394

360395
protected MockServletRequest prepareRequest(String method, String path) {
361396
MockServletRequest request = new MockServletRequest(servletSession);

0 commit comments

Comments
 (0)