-
+
By {{author.firstname}}, on {{addedAt}}
diff --git a/src/test/kotlin/blog/HttpApiTests.kt b/src/test/kotlin/blog/HttpControllersTests.kt
similarity index 63%
rename from src/test/kotlin/blog/HttpApiTests.kt
rename to src/test/kotlin/blog/HttpControllersTests.kt
index ed028b7..bb5769f 100644
--- a/src/test/kotlin/blog/HttpApiTests.kt
+++ b/src/test/kotlin/blog/HttpControllersTests.kt
@@ -1,55 +1,48 @@
package blog
-import com.nhaarman.mockito_kotlin.whenever
+import com.ninjasquad.springmockk.MockkBean
+import io.mockk.every
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
-import org.springframework.boot.test.mock.mockito.MockBean
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
-import org.mockito.Mockito.any
import org.springframework.http.MediaType
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.*
@WebMvcTest
-// TODO Use constructor-based val property for @MockBean when supported, see issue spring-boot#13113
-class HttpApiTests(@Autowired val mockMvc: MockMvc) {
+class HttpControllersTests(@Autowired val mockMvc: MockMvc) {
- @MockBean
+ @MockkBean
private lateinit var userRepository: UserRepository
- @MockBean
+ @MockkBean
private lateinit var articleRepository: ArticleRepository
- @MockBean
- private lateinit var markdownConverter: MarkdownConverter
-
@Test
fun `List articles`() {
val juergen = User("springjuergen", "Juergen", "Hoeller")
- val spring5Article = Article("Spring Framework 5.0 goes GA", "Dear Spring community ...", "Lorem ipsum", juergen, 1)
- val spring43Article = Article("Spring Framework 4.3 goes GA", "Dear Spring community ...", "Lorem ipsum", juergen, 2)
- whenever(articleRepository.findAllByOrderByAddedAtDesc()).thenReturn(listOf(spring5Article, spring43Article))
- whenever(markdownConverter.invoke(any())).thenAnswer { it.arguments[0] }
+ val spring5Article = Article("Spring Framework 5.0 goes GA", "Dear Spring community ...", "Lorem ipsum", juergen)
+ val spring43Article = Article("Spring Framework 4.3 goes GA", "Dear Spring community ...", "Lorem ipsum", juergen)
+ every { articleRepository.findAllByOrderByAddedAtDesc() } returns listOf(spring5Article, spring43Article)
mockMvc.perform(get("/api/article/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk)
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("\$.[0].author.login").value(juergen.login))
- .andExpect(jsonPath("\$.[0].id").value(spring5Article.id!!))
+ .andExpect(jsonPath("\$.[0].slug").value(spring5Article.slug))
.andExpect(jsonPath("\$.[1].author.login").value(juergen.login))
- .andExpect(jsonPath("\$.[1].id").value(spring43Article.id!!))
+ .andExpect(jsonPath("\$.[1].slug").value(spring43Article.slug))
}
@Test
fun `List users`() {
val juergen = User("springjuergen", "Juergen", "Hoeller")
val smaldini = User("smaldini", "Stéphane", "Maldini")
- whenever(userRepository.findAll()).thenReturn(listOf(juergen, smaldini))
+ every { userRepository.findAll() } returns listOf(juergen, smaldini)
mockMvc.perform(get("/api/user/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk)
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("\$.[0].login").value(juergen.login))
.andExpect(jsonPath("\$.[1].login").value(smaldini.login))
}
-
}
diff --git a/src/test/kotlin/blog/IntegrationTests.kt b/src/test/kotlin/blog/IntegrationTests.kt
index 8fb4517..f645b84 100644
--- a/src/test/kotlin/blog/IntegrationTests.kt
+++ b/src/test/kotlin/blog/IntegrationTests.kt
@@ -29,10 +29,10 @@ class IntegrationTests(@Autowired val restTemplate: TestRestTemplate) {
@Test
fun `Assert article page title, content and status code`() {
println(">> Assert article page title, content and status code")
- val entity = restTemplate.getForEntity
("/article/2")
+ val title = "Reactor Aluminium has landed"
+ val entity = restTemplate.getForEntity("/article/${title.toSlug()}")
assertThat(entity.statusCode).isEqualTo(HttpStatus.OK)
- assertThat(entity.body).contains("Reactor Aluminium has landed",
- "https://projectreactor.io/")
+ assertThat(entity.body).contains(title, "Lorem ipsum", "dolor sit amet")
}
@AfterAll
diff --git a/src/test/kotlin/blog/RepositoriesTests.kt b/src/test/kotlin/blog/RepositoriesTests.kt
index 6b06ffa..65cadd6 100644
--- a/src/test/kotlin/blog/RepositoriesTests.kt
+++ b/src/test/kotlin/blog/RepositoriesTests.kt
@@ -5,34 +5,31 @@ import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager
+import org.springframework.data.repository.findByIdOrNull
@DataJpaTest
-class RepositoriesTests(@Autowired val entityManager: TestEntityManager,
- @Autowired val userRepository: UserRepository,
- @Autowired val articleRepository: ArticleRepository) {
+class RepositoriesTests @Autowired constructor(
+ val entityManager: TestEntityManager,
+ val userRepository: UserRepository,
+ val articleRepository: ArticleRepository) {
@Test
- fun `When findById then return Article`() {
+ fun `When findByIdOrNull then return Article`() {
val juergen = User("springjuergen", "Juergen", "Hoeller")
entityManager.persist(juergen)
val article = Article("Spring Framework 5.0 goes GA", "Dear Spring community ...", "Lorem ipsum", juergen)
entityManager.persist(article)
entityManager.flush()
-
- val found = articleRepository.findById(article.id!!)
-
- assertThat(found.get()).isEqualTo(article)
+ val found = articleRepository.findByIdOrNull(article.id!!)
+ assertThat(found).isEqualTo(article)
}
@Test
- fun `When findById then return User`() {
+ fun `When findByLogin then return User`() {
val juergen = User("springjuergen", "Juergen", "Hoeller")
entityManager.persist(juergen)
entityManager.flush()
-
- val found = userRepository.findById(juergen.login)
-
- assertThat(found.get()).isEqualTo(juergen)
+ val user = userRepository.findByLogin(juergen.login)
+ assertThat(user).isEqualTo(juergen)
}
-
-}
\ No newline at end of file
+}