Move recurring tests for ajax pages to test base class
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 31 Aug 2017 18:16:42 +0000 (20:16 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 1 Sep 2017 20:45:24 +0000 (22:45 +0200)
src/test/kotlin/net/pterodactylus/sone/web/ajax/BookmarkAjaxPageTest.kt
src/test/kotlin/net/pterodactylus/sone/web/ajax/CreatePostAjaxPageTest.kt
src/test/kotlin/net/pterodactylus/sone/web/ajax/CreateReplyAjaxPageTest.kt
src/test/kotlin/net/pterodactylus/sone/web/ajax/GetLinkedElementAjaxPageTest.kt
src/test/kotlin/net/pterodactylus/sone/web/ajax/GetStatusAjaxPageTest.kt
src/test/kotlin/net/pterodactylus/sone/web/ajax/JsonPageTest.kt

index 1d26c71..d6ade8b 100644 (file)
@@ -11,17 +11,7 @@ import org.mockito.Mockito.verify
 /**
  * Unit test for [BookmarkAjaxPage].
  */
-class BookmarkAjaxPageTest : JsonPageTest(::BookmarkAjaxPage) {
-
-       @Test
-       fun `page returns correct path`() {
-               assertThat(page.path, equalTo("bookmark.ajax"))
-       }
-
-       @Test
-       fun `page does not require login`() {
-           assertThat(page.requiresLogin(), equalTo(false))
-       }
+class BookmarkAjaxPageTest : JsonPageTest("bookmark.ajax", requiresLogin = false, pageSupplier = ::BookmarkAjaxPage) {
 
        @Test
        fun `missing post ID results in invalid id response`() {
index 0588b6a..b153093 100644 (file)
@@ -14,22 +14,7 @@ import org.junit.Test
 /**
  * Unit test for [CreatePostAjaxPage].
  */
-class CreatePostAjaxPageTest : JsonPageTest(::CreatePostAjaxPage) {
-
-       @Test
-       fun `page returns correct path`() {
-               assertThat(page.path, equalTo("createPost.ajax"))
-       }
-
-       @Test
-       fun `page needs form password`() {
-               assertThat(page.needsFormPassword(), equalTo(true))
-       }
-
-       @Test
-       fun `page requires login`() {
-               assertThat(page.requiresLogin(), equalTo(true))
-       }
+class CreatePostAjaxPageTest : JsonPageTest("createPost.ajax", pageSupplier = ::CreatePostAjaxPage) {
 
        @Test
        fun `page requires a current sone`() {
index 9d9008b..ff48460 100644 (file)
@@ -12,22 +12,7 @@ import org.junit.Test
 /**
  * Unit test for [CreateReplyAjaxPage].
  */
-class CreateReplyAjaxPageTest : JsonPageTest(::CreateReplyAjaxPage) {
-
-       @Test
-       fun `page returns correct path`() {
-               assertThat(page.path, equalTo("createReply.ajax"))
-       }
-
-       @Test
-       fun `page needs form password`() {
-               assertThat(page.needsFormPassword(), equalTo(true))
-       }
-
-       @Test
-       fun `page requires login`() {
-               assertThat(page.requiresLogin(), equalTo(true))
-       }
+class CreateReplyAjaxPageTest : JsonPageTest("createReply.ajax", pageSupplier = ::CreateReplyAjaxPage) {
 
        @Test
        fun `invalid post ID results in error message`() {
index ea3be1a..92ec1d4 100644 (file)
@@ -16,27 +16,12 @@ import org.mockito.ArgumentMatchers
 /**
  * Unit test for [GetLinkedElementAjaxPage].
  */
-class GetLinkedElementAjaxPageTest: JsonPageTest() {
+class GetLinkedElementAjaxPageTest: JsonPageTest("getLinkedElement.ajax", requiresLogin = false, needsFormPassword = false) {
 
        private val linkedElementRenderFilter = mock<LinkedElementRenderFilter>()
        override var page: JsonPage = GetLinkedElementAjaxPage(webInterface, elementLoader, linkedElementRenderFilter)
 
        @Test
-       fun `page returns correct path`() {
-           assertThat(page.path, equalTo("getLinkedElement.ajax"))
-       }
-
-       @Test
-       fun `page does not require login`() {
-           assertThat(page.requiresLogin(), equalTo(false))
-       }
-
-       @Test
-       fun `page does not require form password`() {
-           assertThat(page.needsFormPassword(), equalTo(false))
-       }
-
-       @Test
        fun `only loaded linked elements are returned`() {
            addRequestParameter("elements", jsonArray("KSK@foo.png", "KSK@foo.jpg", "KSK@foo.html").toString())
                addLinkedElement("KSK@foo.png", true, false)
index 2be420d..58193a9 100644 (file)
@@ -28,7 +28,7 @@ import java.util.TimeZone
 /**
  * Unit test for [GetStatusAjaxPage].
  */
-class GetStatusAjaxPageTest: JsonPageTest() {
+class GetStatusAjaxPageTest: JsonPageTest("getStatus.ajax", requiresLogin = false, needsFormPassword = false) {
 
        private val timeTextConverter = mock<TimeTextConverter>()
        private val l10nFilter = mock<L10nFilter>()
@@ -41,21 +41,6 @@ class GetStatusAjaxPageTest: JsonPageTest() {
        }
 
        @Test
-       fun `page returns correct path`() {
-               assertThat(page.path, equalTo("getStatus.ajax"))
-       }
-
-       @Test
-       fun `page does not require form password`() {
-               assertThat(page.needsFormPassword(), equalTo(false))
-       }
-
-       @Test
-       fun `page does not require login`() {
-               assertThat(page.requiresLogin(), equalTo(false))
-       }
-
-       @Test
        fun `page returns correct attribute “loggedIn” if sone is logged in`() {
                assertThat(json.get("loggedIn").asText(), equalTo("true"))
        }
index 87b2939..5d43a1e 100644 (file)
@@ -20,7 +20,10 @@ import net.pterodactylus.sone.web.WebInterface
 import net.pterodactylus.sone.web.page.FreenetRequest
 import net.pterodactylus.util.notify.Notification
 import net.pterodactylus.util.web.Method.GET
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers.equalTo
 import org.junit.Before
+import org.junit.Test
 import org.mockito.ArgumentMatchers.anyBoolean
 import org.mockito.ArgumentMatchers.anyInt
 import org.mockito.ArgumentMatchers.anyString
@@ -32,7 +35,11 @@ import javax.naming.SizeLimitExceededException
 /**
  * Base class for tests for any [JsonPage] implementations.
  */
-open class JsonPageTest(pageSupplier: (WebInterface) -> JsonPage = { _ -> mock<JsonPage>() }) {
+abstract class JsonPageTest(
+               private val expectedPath: String,
+               private val requiresLogin: Boolean = true,
+               private val needsFormPassword: Boolean = true,
+               pageSupplier: (WebInterface) -> JsonPage = { _ -> mock<JsonPage>() }) {
 
        protected val webInterface = mock<WebInterface>()
        protected val core = mock<Core>()
@@ -180,4 +187,19 @@ open class JsonPageTest(pageSupplier: (WebInterface) -> JsonPage = { _ -> mock<J
                linkedElements[link] = LinkedElement(link, failed, loading)
        }
 
+       @Test
+       fun `page returns correct path`() {
+               assertThat(page.path, equalTo(expectedPath))
+       }
+
+       @Test
+       fun `page needs form password`() {
+               assertThat(page.needsFormPassword(), equalTo(needsFormPassword))
+       }
+
+       @Test
+       fun `page requires login`() {
+               assertThat(page.requiresLogin(), equalTo(requiresLogin))
+       }
+
 }