Add test for edit album ajax page
[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.mock
9 import net.pterodactylus.sone.test.whenever
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
12 import org.junit.Test
13
14 /**
15  * Unit test for [EditAlbumAjaxPage].
16  */
17 class EditAlbumAjaxPageTest : JsonPageTest("editAlbum.ajax", pageSupplier = ::EditAlbumAjaxPage) {
18
19         private val sone = mock<Sone>()
20         private val localSone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
21         private val album = mock<Album>().apply { whenever(id).thenReturn("album-id") }
22
23         @Test
24         fun `request without album results in invalid-album-id`() {
25                 assertThat(json.isSuccess, equalTo(false))
26                 assertThat(json.error, equalTo("invalid-album-id"))
27         }
28
29         @Test
30         fun `request with non-local album results in not-authorized`() {
31                 whenever(album.sone).thenReturn(sone)
32                 addAlbum(album)
33                 addRequestParameter("album", "album-id")
34                 assertThat(json.isSuccess, equalTo(false))
35                 assertThat(json.error, equalTo("not-authorized"))
36         }
37
38         @Test
39         fun `request with moveLeft moves album to the left`() {
40                 whenever(album.sone).thenReturn(localSone)
41                 val swappedAlbum = mock<Album>().apply { whenever(id).thenReturn("swapped") }
42                 val parentAlbum = mock<Album>()
43                 whenever(parentAlbum.moveAlbumUp(album)).thenReturn(swappedAlbum)
44                 whenever(album.parent).thenReturn(parentAlbum)
45                 addAlbum(album)
46                 addRequestParameter("album", "album-id")
47                 addRequestParameter("moveLeft", "true")
48                 assertThat(json.isSuccess, equalTo(true))
49                 assertThat(json["sourceAlbumId"].asText(), equalTo("album-id"))
50                 assertThat(json["destinationAlbumId"].asText(), equalTo("swapped"))
51         }
52
53         @Test
54         fun `request with moveRight moves album to the right`() {
55                 whenever(album.sone).thenReturn(localSone)
56                 val swappedAlbum = mock<Album>().apply { whenever(id).thenReturn("swapped") }
57                 val parentAlbum = mock<Album>()
58                 whenever(parentAlbum.moveAlbumDown(album)).thenReturn(swappedAlbum)
59                 whenever(album.parent).thenReturn(parentAlbum)
60                 addAlbum(album)
61                 addRequestParameter("album", "album-id")
62                 addRequestParameter("moveRight", "true")
63                 assertThat(json.isSuccess, equalTo(true))
64                 assertThat(json["sourceAlbumId"].asText(), equalTo("album-id"))
65                 assertThat(json["destinationAlbumId"].asText(), equalTo("swapped"))
66         }
67
68         @Test
69         fun `request with missing title results in invalid-title`() {
70                 whenever(album.sone).thenReturn(localSone)
71                 whenever(album.modify()).thenReturn(deepMock())
72                 whenever(album.modify().setTitle("")).thenThrow(AlbumTitleMustNotBeEmpty::class.java)
73                 addAlbum(album)
74                 addRequestParameter("album", "album-id")
75                 assertThat(json.isSuccess, equalTo(false))
76                 assertThat(json.error, equalTo("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                 assertThat(json.isSuccess, equalTo(true))
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 }