package dw.xmlrpc.itest;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.net.MalformedURLException;
import java.util.Collection;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import dw.xmlrpc.DokuJClient;
import dw.xmlrpc.exception.DokuAttachmentStillReferenced;
import dw.xmlrpc.exception.DokuAttachmentUploadException;
import dw.xmlrpc.exception.DokuBadUrlException;
import dw.xmlrpc.exception.DokuDeleteAttachmentException;
import dw.xmlrpc.exception.DokuDistantFileDoesntExistException;
import dw.xmlrpc.exception.DokuEmptyNewPageException;
import dw.xmlrpc.exception.DokuException;
import dw.xmlrpc.exception.DokuInvalidTimeStampException;
import dw.xmlrpc.exception.DokuMethodDoesNotExistsException;
import dw.xmlrpc.exception.DokuMisConfiguredWikiException;
import dw.xmlrpc.exception.DokuPageDoesNotExistException;
import dw.xmlrpc.exception.DokuPageLockedException;
import dw.xmlrpc.exception.DokuUnauthorizedException;
import dw.xmlrpc.exception.DokuWordblockException;
@RunWith(value = Parameterized.class)
public class Test_Exception {
private final DokuJClient _client;
private final DokuJClient _unauthorizedClient;
private final TestParams _params;
private final File _file = new File(TestParams.localFileToUpload);
public Test_Exception(TestParams params) throws MalformedURLException, DokuException {
_params = params;
_client = new DokuJClient(params.url, TestParams.user, TestParams.password);
_unauthorizedClient = new DokuJClient(params.url, TestParams.unauthorizedLogin, TestParams.unauthorizedPwd);
}
@Parameters
public static Collection<Object[]> data() {
return TestParams.data();
}
@org.junit.Test(expected=DokuUnauthorizedException.class)
public void unauthorizedToUseXmlRpc() throws Exception {
DokuJClient unauthorizedClient = new DokuJClient(_params.url, "wrongUser","wrongPwd");
unauthorizedClient.getTime();
}
@org.junit.Test(expected=DokuMisConfiguredWikiException.class)
public void wikiNotConfiguredToAcceptIncomingRpcQueries() throws Exception {
DokuJClient clientForUnconfiguredWiki = new DokuJClient(_params.urlToWikiNotConfiguredToAcceptRpcQueries, TestParams.user, TestParams.password);
clientForUnconfiguredWiki.getTitle();
}
@org.junit.Test(expected=DokuUnauthorizedException.class)
public void unauthorizedToRead() throws Exception {
_unauthorizedClient.getPage("ns1:start");
}
@org.junit.Test(expected=DokuUnauthorizedException.class)
public void unauthorizedToWrite() throws Exception {
_unauthorizedClient.putPage("ns1:start", "text");
}
@org.junit.Test(expected=DokuUnauthorizedException.class)
public void unauthorizedToListMedia() throws Exception {
_unauthorizedClient.getAttachments("");
}
@org.junit.Test(expected=DokuPageDoesNotExistException.class)
public void getUnexistingPage() throws Exception {
_client.getPageInfo("doesNotExist");
}
@org.junit.Test(expected=DokuMisConfiguredWikiException.class)
public void getPageInfoOnNotConfiguredWiki() throws Exception {
DokuJClient clientForUnconfiguredWiki = new DokuJClient(_params.urlToWikiNotConfiguredToAcceptRpcQueries);
clientForUnconfiguredWiki.getPageInfo("ns1:start");
}
@org.junit.Test(expected=DokuUnauthorizedException.class)
public void getPageInfoWithUnauthorizedUser() throws Exception {
_unauthorizedClient.getPageInfo("ns1:start");
}
@org.junit.Test
public void unauthorizedToDeleteMedia() throws Exception {
String attachmentId = "forTestUnauthorizedWithMedia.gif";
_client.putAttachment(attachmentId, TestParams.localFileToUpload, true);
boolean getRelevantException = false;
try {
_unauthorizedClient.deleteAttachment(attachmentId);
} catch (DokuUnauthorizedException e){
getRelevantException = true;
}
_client.deleteAttachment(attachmentId);
assertTrue(getRelevantException);
}
@org.junit.Test(expected=DokuUnauthorizedException.class)
public void unauthorizedToUploadMedia() throws Exception {
_unauthorizedClient.putAttachment("shouldntHavePermissionToBeHere.gif", TestParams.localFileToUpload, true);
}
@org.junit.Test(expected=DokuDeleteAttachmentException.class)
public void mediaToDeleteDoesntExist() throws Exception {
String attachmentId = "unexistingFile.gif";
_client.deleteAttachment(attachmentId);
}
@org.junit.Test(expected=DokuDistantFileDoesntExistException.class)
public void mediaToGetDoesntExist() throws Exception {
_client.getAttachment("unexistingFile.gif", "file.gif");
}
@org.junit.Test(expected=DokuUnauthorizedException.class)
public void unauthorizedToGetMedia() throws Exception {
String attachmentId = "forTestUnauthorizedWithMedia.gif";
_client.putAttachment(attachmentId, TestParams.localFileToUpload, true);
_unauthorizedClient.getAttachment(attachmentId, "file.gif");
}
@org.junit.Test(expected=DokuAttachmentStillReferenced.class)
public void stillReferencedMedia() throws Exception {
String distantFile = "referencedMedia.gif";
_client.putAttachment(distantFile, TestParams.localFileToUpload, true);
_client.putPage("referencing", "here is a {{" + distantFile + "}}|file");
_client.deleteAttachment(distantFile);
}
@org.junit.Test(expected=DokuInvalidTimeStampException.class)
public void invalidTimestamp() throws Exception {
_client.getRecentChanges(123456);
}
@org.junit.Test(expected=DokuPageLockedException.class)
public void pageLockedException() throws Exception {
String pageId = "ns1:start";
_client.lock(pageId);
DokuJClient otherClient = new DokuJClient(_params.url, TestParams.writerLogin, TestParams.writerPwd);
otherClient.appendPage(pageId, "something");
}
@org.junit.Test(expected=DokuBadUrlException.class)
public void badUrlExceptionWhenPathIsWrong() throws Exception {
DokuJClient client = new DokuJClient(_params.url + "azerty", TestParams.user, TestParams.password);
client.getTitle();
}
@org.junit.Test(expected=DokuBadUrlException.class)
public void badUrlExceptionWhenHostIsUnknown() throws Exception {
DokuJClient client = new DokuJClient("http://unknownHost/dokuwiki/lib/exe/xmlrpc.php", TestParams.user, TestParams.password);
client.getTitle();
}
@org.junit.Test(expected=DokuWordblockException.class)
public void wordblockException() throws Exception {
String pageId = "ns1:start";
_client.appendPage(pageId, "try to write a forbiddenword");
}
@org.junit.Test(expected=DokuAttachmentUploadException.class)
public void uploadForbiddenBecauseOfForbiddenExtension() throws Exception {
_client.putAttachment("file.sh", _file, true);
}
@org.junit.Test(expected=DokuAttachmentUploadException.class)
public void uploadForbiddenBecauseOfBadExtension() throws Exception {
//jpg is authorized, but the file is in fact a gif
_client.putAttachment("file.jpg", _file, true);
}
@org.junit.Test(expected=DokuAttachmentUploadException.class)
public void uploadBecauseFileAlreadyExists() throws Exception {
String attachmentId = "file.gif";
uploadWithoutThrowing(attachmentId);
_client.putAttachment(attachmentId, _file, false);
}
private void uploadWithoutThrowing(String attachmentId){
try {
_client.putAttachment(attachmentId, _file, true);
} catch (Exception e){
fail();
}
}
@org.junit.Test(expected=DokuEmptyNewPageException.class)
public void emptyNewPageException() throws Exception {
String pageId = "toDelete";
//We try to delete it twice because to be sure we try it at least once
//when the page is actually already deleted
_client.putPage(pageId, "");
_client.putPage(pageId, "");
}
@org.junit.Test(expected=DokuBadUrlException.class)
public void status3xxYieldsBadUrlException() throws Exception {
String tweakedUrl = _params.url.replaceAll(TestParams.urlSuffix, "");
new DokuJClient(tweakedUrl, TestParams.user, TestParams.password);
}
@org.junit.Test
public void recognizeIfAMethodDoesNotExistAndContainsTheNameOfTheCalledMethod() throws Exception{
try {
_client.genericQuery("some.dummy.action");
} catch(DokuMethodDoesNotExistsException e){
assertTrue(e.getMessage().contains("some.dummy.action"));
return;
}
fail("We should have caught a DokuMethodDoesNotExistsException");
}
}