78b27b70e2f40773720b4f88ee4a0875577875ff
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / EditProfileFieldPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.data.Profile
4 import net.pterodactylus.sone.test.whenever
5 import net.pterodactylus.sone.web.pages.EditProfileFieldPage
6 import net.pterodactylus.sone.web.pages.WebPageTest
7 import net.pterodactylus.util.web.Method.GET
8 import net.pterodactylus.util.web.Method.POST
9 import org.hamcrest.MatcherAssert.assertThat
10 import org.hamcrest.Matchers.equalTo
11 import org.junit.Before
12 import org.junit.Test
13 import org.mockito.Mockito.never
14 import org.mockito.Mockito.verify
15
16 /**
17  * Unit test for [EditProfileFieldPage].
18  */
19 class EditProfileFieldPageTest : WebPageTest() {
20
21         private val page = EditProfileFieldPage(template, webInterface)
22
23         private val profile = Profile(currentSone)
24         private val field = profile.addField("Name")
25
26         override fun getPage() = page
27
28         @Before
29         fun setupProfile() {
30                 whenever(currentSone.profile).thenReturn(profile)
31         }
32
33         @Test
34         fun `page returns correct path`() {
35             assertThat(page.path, equalTo("editProfileField.html"))
36         }
37
38         @Test
39         fun `page requires login`() {
40             assertThat(page.requiresLogin(), equalTo(true))
41         }
42
43         @Test
44         fun `page returns correct title`() {
45                 whenever(l10n.getString("Page.EditProfileField.Title")).thenReturn("edit profile field title")
46             assertThat(page.getPageTitle(freenetRequest), equalTo("edit profile field title"))
47         }
48
49         @Test
50         fun `get request with invalid field redirects to invalid page`() {
51                 request("", GET)
52                 verifyRedirect("invalid.html")
53         }
54
55         @Test
56         fun `get request with valid field stores field in template context`() {
57                 request("", GET)
58                 addHttpRequestParameter("field", field.id)
59                 page.processTemplate(freenetRequest, templateContext)
60                 assertThat(templateContext["field"], equalTo<Any>(field))
61         }
62
63         @Test
64         fun `post request with cancel set redirects to profile edit page`() {
65                 request("", POST)
66                 addHttpRequestPart("field", field.id)
67                 addHttpRequestPart("cancel", "true")
68                 verifyRedirect("editProfile.html#profile-fields")
69         }
70
71         @Test
72         fun `post request with new name renames field and redirects to profile edit page`() {
73                 request("", POST)
74                 addHttpRequestPart("field", field.id)
75                 addHttpRequestPart("name", "New Name")
76                 verifyRedirect("editProfile.html#profile-fields") {
77                         assertThat(field.name, equalTo("New Name"))
78                         verify(currentSone).profile = profile
79                 }
80         }
81
82         @Test
83         fun `post request with same name does not modify field and redirects to profile edit page`() {
84                 request("", POST)
85                 addHttpRequestPart("field", field.id)
86                 addHttpRequestPart("name", "Name")
87                 verifyRedirect("editProfile.html#profile-fields") {
88                         assertThat(field.name, equalTo("Name"))
89                         verify(currentSone, never()).profile = profile
90                 }
91         }
92
93         @Test
94         fun `post request with same name as different field sets error condition in template`() {
95                 request("", POST)
96                 profile.addField("New Name")
97                 addHttpRequestPart("field", field.id)
98                 addHttpRequestPart("name", "New Name")
99                 page.processTemplate(freenetRequest, templateContext)
100                 assertThat(field.name, equalTo("Name"))
101                 verify(currentSone, never()).profile = profile
102                 assertThat(templateContext["duplicateFieldName"], equalTo<Any>(true))
103         }
104
105 }