Add test for DI constructability of TrustAjaxPage
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / EditAlbumAjaxPageTest.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import net.pterodactylus.sone.data.Album
4 import net.pterodactylus.sone.data.Album.Modifier.AlbumTitleMustNotBeEmpty
5 import net.pterodactylus.sone.data.Sone
6 import net.pterodactylus.sone.data.impl.AlbumImpl
7 import net.pterodactylus.sone.test.deepMock
8 import net.pterodactylus.sone.test.getInstance
9 import net.pterodactylus.sone.test.mock
10 import net.pterodactylus.sone.test.whenever
11 import net.pterodactylus.sone.web.baseInjector
12 import org.hamcrest.MatcherAssert.assertThat
13 import org.hamcrest.Matchers.equalTo
14 import org.hamcrest.Matchers.notNullValue
15 import org.junit.Test
16
17 /**
18  * Unit test for [EditAlbumAjaxPage].
19  */
20 class EditAlbumAjaxPageTest : JsonPageTest("editAlbum.ajax", pageSupplier = ::EditAlbumAjaxPage) {
21
22         private val sone = mock<Sone>()
23         private val localSone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
24         private val album = mock<Album>().apply { whenever(id).thenReturn("album-id") }
25
26         @Test
27         fun `request without album results in invalid-album-id`() {
28                 assertThatJsonFailed("invalid-album-id")
29         }
30
31         @Test
32         fun `request with non-local album results in not-authorized`() {
33                 whenever(album.sone).thenReturn(sone)
34                 addAlbum(album)
35                 addRequestParameter("album", "album-id")
36                 assertThatJsonFailed("not-authorized")
37         }
38
39         @Test
40         fun `request with moveLeft moves album to the left`() {
41                 whenever(album.sone).thenReturn(localSone)
42                 val swappedAlbum = mock<Album>().apply { whenever(id).thenReturn("swapped") }
43                 val parentAlbum = mock<Album>()
44                 whenever(parentAlbum.moveAlbumUp(album)).thenReturn(swappedAlbum)
45                 whenever(album.parent).thenReturn(parentAlbum)
46                 addAlbum(album)
47                 addRequestParameter("album", "album-id")
48                 addRequestParameter("moveLeft", "true")
49                 assertThatJsonIsSuccessful()
50                 assertThat(json["sourceAlbumId"]?.asText(), equalTo("album-id"))
51                 assertThat(json["destinationAlbumId"]?.asText(), equalTo("swapped"))
52         }
53
54         @Test
55         fun `request with moveRight moves album to the right`() {
56                 whenever(album.sone).thenReturn(localSone)
57                 val swappedAlbum = mock<Album>().apply { whenever(id).thenReturn("swapped") }
58                 val parentAlbum = mock<Album>()
59                 whenever(parentAlbum.moveAlbumDown(album)).thenReturn(swappedAlbum)
60                 whenever(album.parent).thenReturn(parentAlbum)
61                 addAlbum(album)
62                 addRequestParameter("album", "album-id")
63                 addRequestParameter("moveRight", "true")
64                 assertThatJsonIsSuccessful()
65                 assertThat(json["sourceAlbumId"]?.asText(), equalTo("album-id"))
66                 assertThat(json["destinationAlbumId"]?.asText(), equalTo("swapped"))
67         }
68
69         @Test
70         fun `request with missing title results in invalid-title`() {
71                 whenever(album.sone).thenReturn(localSone)
72                 whenever(album.modify()).thenReturn(deepMock())
73                 whenever(album.modify().setTitle("")).thenThrow(AlbumTitleMustNotBeEmpty::class.java)
74                 addAlbum(album)
75                 addRequestParameter("album", "album-id")
76                 assertThatJsonFailed("invalid-album-title")
77         }
78
79         @Test
80         fun `request with title and description sets title and filtered description`() {
81                 val album = AlbumImpl(currentSone, "album-id")
82                 addAlbum(album)
83                 addRequestParameter("album", "album-id")
84                 addRequestParameter("title", "new title")
85                 addRequestParameter("description", "foo http://127.0.0.1:8888/KSK@foo.html link")
86                 addRequestHeader("Host", "127.0.0.1:8888")
87                 assertThatJsonIsSuccessful()
88                 assertThat(json["albumId"]?.asText(), equalTo("album-id"))
89                 assertThat(json["title"]?.asText(), equalTo("new title"))
90                 assertThat(json["description"]?.asText(), equalTo("foo KSK@foo.html link"))
91         }
92
93         @Test
94         fun `page can be created by dependency injection`() {
95             assertThat(baseInjector.getInstance<EditAlbumAjaxPage>(), notNullValue())
96         }
97
98 }