Added comments to isUserBlocked method and tests for the method

This commit is contained in:
Sean Nemann 2018-05-31 09:44:09 -04:00
parent 39096cf30b
commit 01a3a233a9
2 changed files with 59 additions and 0 deletions

View file

@ -615,6 +615,10 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
}); });
} }
/**
* Checks to see if a user is currently blocked
* @return whether or not the user is blocked
*/
@Override @Override
public boolean isUserBlocked() { public boolean isUserBlocked() {
boolean userBlocked = false; boolean userBlocked = false;
@ -626,6 +630,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
.param("uiprop", "blockinfo") .param("uiprop", "blockinfo")
.get(); .get();
if(result != null) { if(result != null) {
// the blockexpiry field will only be present if the user is currently blocked
userBlocked = !result.getString("/api/query/userinfo/@blockexpiry").isEmpty(); userBlocked = !result.getString("/api/query/userinfo/@blockexpiry").isEmpty();
} }
} catch (Exception e) { } catch (Exception e) {

View file

@ -223,6 +223,60 @@ class ApacheHttpClientMediaWikiApiTest {
assertEquals(23, testObserver.values()[0]) assertEquals(23, testObserver.values()[0])
} }
@Test
fun isUserBlockedForInfinitelyBlockedUser() {
server.enqueue(MockResponse().setBody("<?xml version=\"1.0\"?><api><query><userinfo id=\"1000\" name=\"testusername\" blockid=\"3000\" blockedby=\"blockerusername\" blockedbyid=\"1001\" blockreason=\"testing\" blockedtimestamp=\"2018-05-24T15:32:09Z\" blockexpiry=\"infinite\"></userinfo></query></api>"))
val result = testObject.isUserBlocked();
assertBasicRequestParameters(server, "GET").let { userBlockedRequest ->
parseQueryParams(userBlockedRequest).let { body ->
assertEquals("xml", body["format"])
assertEquals("query", body["action"])
assertEquals("userinfo", body["meta"])
assertEquals("blockinfo", body["uiprop"])
}
}
assertTrue(result)
}
@Test
fun isUserBlockedForTimeBlockedUser() {
server.enqueue(MockResponse().setBody("<?xml version=\"1.0\"?><api><query><userinfo id=\"1000\" name=\"testusername\" blockid=\"3000\" blockedby=\"blockerusername\" blockedbyid=\"1001\" blockreason=\"testing\" blockedtimestamp=\"2018-05-24T15:32:09Z\" blockexpiry=\"2014-09-18T12:34:56Z\"></userinfo></query></api>"))
val result = testObject.isUserBlocked();
assertBasicRequestParameters(server, "GET").let { userBlockedRequest ->
parseQueryParams(userBlockedRequest).let { body ->
assertEquals("xml", body["format"])
assertEquals("query", body["action"])
assertEquals("userinfo", body["meta"])
assertEquals("blockinfo", body["uiprop"])
}
}
assertTrue(result)
}
@Test
fun isUserBlockedForNotBlockedUser() {
server.enqueue(MockResponse().setBody("<?xml version=\"1.0\"?><api><query><userinfo id=\"1000\" name=\"testusername\"></userinfo></query></api>"))
val result = testObject.isUserBlocked();
assertBasicRequestParameters(server, "GET").let { userBlockedRequest ->
parseQueryParams(userBlockedRequest).let { body ->
assertEquals("xml", body["format"])
assertEquals("query", body["action"])
assertEquals("userinfo", body["meta"])
assertEquals("blockinfo", body["uiprop"])
}
}
assertFalse(result)
}
private fun assertBasicRequestParameters(server: MockWebServer, method: String): RecordedRequest = server.takeRequest().let { private fun assertBasicRequestParameters(server: MockWebServer, method: String): RecordedRequest = server.takeRequest().let {
assertEquals("/", it.requestUrl.encodedPath()) assertEquals("/", it.requestUrl.encodedPath())
assertEquals(method, it.method) assertEquals(method, it.method)