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