1 package net.pterodactylus.sone.web
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.test.mock
7 import net.pterodactylus.sone.test.mockBuilder
8 import net.pterodactylus.sone.test.whenever
9 import net.pterodactylus.sone.web.WebTestUtils.redirectsTo
10 import net.pterodactylus.util.web.Method.GET
11 import net.pterodactylus.util.web.Method.POST
12 import org.junit.Before
14 import org.mockito.Mockito.verify
17 * Unit test for [EditAlbumPage].
19 class EditAlbumPageTest : WebPageTest() {
21 private val page = EditAlbumPage(template, webInterface)
23 private val album = mock<Album>()
24 private val parentAlbum = mock<Album>()
25 private val modifier = mockBuilder<Album.Modifier>()
26 private val sone = mock<Sone>()
30 whenever(album.id).thenReturn("album-id")
31 whenever(album.sone).thenReturn(sone)
32 whenever(album.parent).thenReturn(parentAlbum)
33 whenever(album.modify()).thenReturn(modifier)
34 whenever(modifier.update()).thenReturn(album)
35 whenever(parentAlbum.id).thenReturn("parent-id")
36 whenever(sone.isLocal).thenReturn(true)
37 addHttpRequestHeader("Host", "www.te.st")
41 fun `get request does not redirect`() {
43 page.handleRequest(freenetRequest, templateContext)
47 fun `post request with invalid album redirects to invalid page`() {
49 expectedException.expect(redirectsTo("invalid.html"))
50 page.handleRequest(freenetRequest, templateContext)
54 fun `post request with album of non-local sone redirects to no permissions page`() {
56 whenever(sone.isLocal).thenReturn(false)
57 addAlbum("album-id", album)
58 addHttpRequestParameter("album", "album-id")
59 expectedException.expect(redirectsTo("noPermission.html"))
60 page.handleRequest(freenetRequest, templateContext)
64 fun `post request with move left requested moves album to the left and redirects to album browser`() {
66 addAlbum("album-id", album)
67 addHttpRequestParameter("album", "album-id")
68 addHttpRequestParameter("moveLeft", "true")
69 expectedException.expect(redirectsTo("imageBrowser.html?album=parent-id"))
71 page.handleRequest(freenetRequest, templateContext)
73 verify(parentAlbum).moveAlbumUp(album)
74 verify(core).touchConfiguration()
79 fun `post request with move right requested moves album to the left and redirects to album browser`() {
81 addAlbum("album-id", album)
82 addHttpRequestParameter("album", "album-id")
83 addHttpRequestParameter("moveRight", "true")
84 expectedException.expect(redirectsTo("imageBrowser.html?album=parent-id"))
86 page.handleRequest(freenetRequest, templateContext)
88 verify(parentAlbum).moveAlbumDown(album)
89 verify(core).touchConfiguration()
94 fun `post request with empty album title redirects to empty album title page`() {
96 addAlbum("album-id", album)
97 addHttpRequestParameter("album", "album-id")
98 whenever(modifier.setTitle("")).thenThrow(AlbumTitleMustNotBeEmpty())
99 expectedException.expect(redirectsTo("emptyAlbumTitle.html"))
100 page.handleRequest(freenetRequest, templateContext)
104 fun `post request with non-empty album title and description redirects to album browser`() {
106 addAlbum("album-id", album)
107 addHttpRequestParameter("album", "album-id")
108 addHttpRequestParameter("title", "title")
109 addHttpRequestParameter("description", "description")
110 expectedException.expect(redirectsTo("imageBrowser.html?album=album-id"))
112 page.handleRequest(freenetRequest, templateContext)
114 verify(modifier).setTitle("title")
115 verify(modifier).setDescription("description")
116 verify(modifier).update()
117 verify(core).touchConfiguration()