diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java
index 13eb77e83..b78ad88ae 100644
--- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java
+++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java
@@ -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
public boolean isUserBlocked() {
boolean userBlocked = false;
@@ -626,6 +630,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
.param("uiprop", "blockinfo")
.get();
if(result != null) {
+ // the blockexpiry field will only be present if the user is currently blocked
userBlocked = !result.getString("/api/query/userinfo/@blockexpiry").isEmpty();
}
} catch (Exception e) {
diff --git a/app/src/test/kotlin/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApiTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApiTest.kt
index 686a90ef2..6f630ce1a 100644
--- a/app/src/test/kotlin/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApiTest.kt
+++ b/app/src/test/kotlin/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApiTest.kt
@@ -223,6 +223,60 @@ class ApacheHttpClientMediaWikiApiTest {
assertEquals(23, testObserver.values()[0])
}
+ @Test
+ fun isUserBlockedForInfinitelyBlockedUser() {
+ server.enqueue(MockResponse().setBody(""))
+
+ 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(""))
+
+ 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(""))
+
+ 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 {
assertEquals("/", it.requestUrl.encodedPath())
assertEquals(method, it.method)