Added some basic tests for BaseController
This commit is contained in:
parent
a0c207b46b
commit
6025642bbb
91
src/test/kotlin/uk/co/neviyn/booru/BaseControllerTest.kt
Normal file
91
src/test/kotlin/uk/co/neviyn/booru/BaseControllerTest.kt
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
package uk.co.neviyn.booru
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest
|
||||||
|
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors
|
||||||
|
import org.springframework.test.web.servlet.MockMvc
|
||||||
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
|
||||||
|
import org.springframework.test.web.servlet.result.MockMvcResultMatchers
|
||||||
|
|
||||||
|
@SpringBootTest
|
||||||
|
@AutoConfigureMockMvc
|
||||||
|
class BaseControllerTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
lateinit var mockMvc: MockMvc
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
lateinit var memberRepository: MemberRepository
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `go to the root endpoint`() {
|
||||||
|
mockMvc
|
||||||
|
.perform(MockMvcRequestBuilders.get("/"))
|
||||||
|
.andExpect(MockMvcResultMatchers.status().isOk)
|
||||||
|
.andExpect(MockMvcResultMatchers.view().name("landing"))
|
||||||
|
.andExpect(MockMvcResultMatchers.model().attribute("count", 0L))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `show the login page`() {
|
||||||
|
mockMvc
|
||||||
|
.perform(MockMvcRequestBuilders.get("/login?redirect=/foo"))
|
||||||
|
.andExpect(MockMvcResultMatchers.status().isOk)
|
||||||
|
.andExpect(MockMvcResultMatchers.view().name("login"))
|
||||||
|
.andExpect(MockMvcResultMatchers.model().attribute("redirect", "/foo"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `show the registration page`() {
|
||||||
|
mockMvc
|
||||||
|
.perform(MockMvcRequestBuilders.get("/register"))
|
||||||
|
.andExpect(MockMvcResultMatchers.status().isOk)
|
||||||
|
.andExpect(MockMvcResultMatchers.view().name("register"))
|
||||||
|
.andExpect(MockMvcResultMatchers.model().attribute("user_details", Member(name = "", email = "", password = "")))
|
||||||
|
.andExpect(MockMvcResultMatchers.model().attribute("submitted", false))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `try and register with no entered details`() {
|
||||||
|
mockMvc
|
||||||
|
.perform(MockMvcRequestBuilders.post("/register")
|
||||||
|
.with(SecurityMockMvcRequestPostProcessors.csrf())
|
||||||
|
)
|
||||||
|
.andExpect(MockMvcResultMatchers.status().isOk)
|
||||||
|
.andExpect(MockMvcResultMatchers.view().name("register"))
|
||||||
|
.andExpect(MockMvcResultMatchers.model().hasErrors())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `try and register with only a username`() {
|
||||||
|
mockMvc
|
||||||
|
.perform(MockMvcRequestBuilders.post("/register")
|
||||||
|
.with(SecurityMockMvcRequestPostProcessors.csrf())
|
||||||
|
.flashAttr("user_details", Member(name = "sample_username"))
|
||||||
|
)
|
||||||
|
.andExpect(MockMvcResultMatchers.status().isOk)
|
||||||
|
.andExpect(MockMvcResultMatchers.view().name("register"))
|
||||||
|
.andExpect(MockMvcResultMatchers.model().hasErrors())
|
||||||
|
.andExpect(MockMvcResultMatchers.model().errorCount(2))
|
||||||
|
.andExpect(MockMvcResultMatchers.model().attributeHasFieldErrors("user_details", "password", "email"))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `successfully register`() {
|
||||||
|
mockMvc
|
||||||
|
.perform(MockMvcRequestBuilders.post("/register")
|
||||||
|
.with(SecurityMockMvcRequestPostProcessors.csrf())
|
||||||
|
.flashAttr("user_details", Member(name = "sample", email = "sample@example.org", password = "sample"))
|
||||||
|
)
|
||||||
|
.andExpect(MockMvcResultMatchers.status().isOk)
|
||||||
|
.andExpect(MockMvcResultMatchers.view().name("login"))
|
||||||
|
val insertedUser = memberRepository.findByName("sample")
|
||||||
|
Assertions.assertNotNull(insertedUser)
|
||||||
|
Assertions.assertEquals("sample", insertedUser!!.name)
|
||||||
|
Assertions.assertEquals("sample@example.org", insertedUser.email)
|
||||||
|
Assertions.assertTrue(passwordEncoder().matches("sample", insertedUser.password))
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,10 @@
|
|||||||
spring.datasource.url=jdbc:h2:mem:testdb;MODE=PostgreSQL
|
spring.datasource.url=jdbc:h2:mem:testdb;MODE=PostgreSQL
|
||||||
spring.datasource.driverClassName=org.h2.Driver
|
spring.datasource.driverClassName=org.h2.Driver
|
||||||
images.directory=./images
|
images.directory=./images
|
||||||
|
spring.jpa.hibernate.ddl-auto=validate
|
||||||
|
spring.datasource.initialization-mode=always
|
||||||
|
spring.jpa.properties.hibernate.default_schema=booru
|
||||||
|
spring.mvc.hiddenmethod.filter.enabled=true
|
||||||
|
images.types=jpg,png,gif
|
||||||
|
spring.servlet.multipart.max-file-size=20000000
|
||||||
|
spring.servlet.multipart.max-request-size=20000000
|
Loading…
Reference in New Issue
Block a user