package dw.xmlrpc.itest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
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.DokuException;
import dw.xmlrpc.exception.DokuIncompatibleVersionException;
import dw.xmlrpc.exception.DokuUnauthorizedException;
@RunWith(value = Parameterized.class)
public class Test_AclChanger extends TestHelper {
private final DokuJClient _client;
private final String _pageId = "ns1:start";
TestParams _params;
public Test_AclChanger(TestParams params) throws MalformedURLException, DokuException {
_client = new DokuJClient(params.url, TestParams.user, TestParams.password);
_params = params;
}
@Parameters
public static Collection<Object[]> data() {
return TestParams.data();
}
@org.junit.Test
public void canAddAndRemoveAcl() throws MalformedURLException, DokuException{
if ( dwIsTooOldAndDoesntSupportAclChanges()){
assertExpectedExceptionIsThrown();
} else {
assertCanAddAndRemoveAcl();
}
}
private void assertExpectedExceptionIsThrown() throws DokuException{
try {
_client.addAcl(_pageId, TestParams.unauthorizedLogin, 1);
}
catch(DokuIncompatibleVersionException e){
assertNotNull(e.getMessage());
return;
}
fail("Didn't receive the expected exception");
}
private void assertCanAddAndRemoveAcl() throws MalformedURLException, DokuException{
assertCanRead(false);
assertTrue(_client.addAcl(_pageId, TestParams.unauthorizedLogin, 1));
assertCanRead(true);
assertTrue(_client.delAcl(_pageId, TestParams.unauthorizedLogin));
assertCanRead(false);
}
private boolean dwIsTooOldAndDoesntSupportAclChanges() {
return _params.apiVersion < 8 || _params.name.equals("dokuwiki-2013-05-10");
}
private void assertCanRead(boolean shouldBeAbleToRead) throws MalformedURLException, DokuException{
DokuJClient unauthorizedClient = new DokuJClient(_params.url, TestParams.unauthorizedLogin, TestParams.unauthorizedPwd);
boolean couldRead = true;
try {
unauthorizedClient.getPage(_pageId);
} catch(DokuUnauthorizedException e){
couldRead = false;
}
assertEquals(shouldBeAbleToRead, couldRead);
}
}