Skip to content

Commit

Permalink
Add test for moving items between lists.
Browse files Browse the repository at this point in the history
  • Loading branch information
cstroe committed Apr 25, 2019
1 parent e74f35e commit a3a840b
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cloud.cosmin.checklister.it

import cloud.cosmin.checklister.it.TestHelper.post
import cloud.cosmin.checklister.it.TestHelper.put
import cloud.cosmin.checklister.lib.dto.ItemPostDto
import cloud.cosmin.checklister.lib.dto.ListPostDto
import io.kotlintest.shouldBe
import io.kotlintest.specs.WordSpec

class ItemMoveSpec: WordSpec({
"Checklister" should {
"move an item between lists" {
val list1 = ListPostDto("list1").post()
val list2 = ListPostDto("list2").post()

val item = ItemPostDto(list1.id, "content", "type").post()
item.list!!.shouldBe(list1.id)

val movedItem = ItemPostDto(list2.id, "content", "type").put(item.id!!)
movedItem.list!!.shouldBe(list2.id)
}
}
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package cloud.cosmin.checklister.it

import cloud.cosmin.checklister.lib.dto.ItemGetDto
import cloud.cosmin.checklister.lib.dto.ItemPostDto
import cloud.cosmin.checklister.lib.dto.ListGetDto
import cloud.cosmin.checklister.lib.dto.ListPostDto
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.core.extensions.jsonBody
import com.github.kittinunf.fuel.jackson.responseObject
import io.kotlintest.shouldBe
import java.util.UUID

object TestHelper {
val baseUrl = "http://localhost:8180/api/v1"

val mapper = ObjectMapper()
.registerKotlinModule()
.registerModule(ParameterNamesModule())
.registerModule(Jdk8Module())
.registerModule(JavaTimeModule())

fun ListPostDto.toJson(): String {
return mapper.writeValueAsString(this)
}

fun ItemPostDto.toJson(): String {
return mapper.writeValueAsString(this)
}

fun ListPostDto.post(): ListGetDto {
val (_, _, listResult) = Fuel.post("$baseUrl/list")
.jsonBody(this.toJson())
.responseObject<ListGetDto>(mapper)
return listResult.get()
}

fun ItemPostDto.post(): ItemGetDto {
val (_, _, updateItemResult) = Fuel.post("$baseUrl/item")
.jsonBody(this.toJson())
.responseObject<ItemGetDto>(mapper)
return updateItemResult.get()
}

fun ItemPostDto.put(id: UUID): ItemGetDto {
val (_, _, updateItemResult) = Fuel.put("$baseUrl/item/$id")
.jsonBody(this.toJson())
.responseObject<ItemGetDto>(mapper)
return updateItemResult.get()
}
}
Original file line number Diff line number Diff line change
@@ -1,66 +1,35 @@
package cloud.cosmin.checklister.it

import cloud.cosmin.checklister.lib.dto.ItemGetDto
import cloud.cosmin.checklister.lib.dto.ListGetDto
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.jackson.responseObject
import io.kotlintest.matchers.boolean.shouldBeTrue
import io.kotlintest.matchers.string.shouldMatch
import io.kotlintest.shouldBe
import io.kotlintest.specs.WordSpec
import cloud.cosmin.checklister.it.TestHelper.baseUrl
import cloud.cosmin.checklister.it.TestHelper.mapper
import cloud.cosmin.checklister.it.TestHelper.toJson
import cloud.cosmin.checklister.it.TestHelper.post
import cloud.cosmin.checklister.lib.dto.ItemPostDto
import cloud.cosmin.checklister.lib.dto.ListPostDto
import com.github.kittinunf.fuel.core.extensions.jsonBody

class TimestampSpec : WordSpec({
val baseUrl = "http://localhost:8180/api/v1"
val contentType = "Content-Type" to "application/json"

val mapper = ObjectMapper()
.registerKotlinModule()
.registerModule(ParameterNamesModule())
.registerModule(Jdk8Module())
.registerModule(JavaTimeModule())

val timestampRegex = Regex("[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{6}Z")

"Checklister" When {
"creating an item" should {
"return the lastModified field" {
val (_, _, listResult) = Fuel.post("$baseUrl/list")
.header(contentType)
.body("{\"title\":\"test list\"}")
.responseObject<ListGetDto>(mapper)

val list = listResult.get()
val list = ListPostDto("test list").post()
list.title.shouldBe("test list")

val (_, _, createItemResult) = Fuel.post("$baseUrl/item")
.header(contentType)
.body("""
{
"list": "${list.id}",
"content": "content",
"contentType": "contentType"
}
""".trimIndent())
.responseObject<ItemGetDto>(mapper)

val item = createItemResult.get()
val item = ItemPostDto(list.id, "new content", "new type").post()
item.createdAt.toString().shouldMatch(timestampRegex)
item.lastModified.toString().shouldMatch(timestampRegex)

val (_, _, updateItemResult) = Fuel.put("$baseUrl/item/${item.id}")
.header(contentType)
.body("""
{
"list": "${list.id}",
"content": "content1",
"contentType": "contentType1"
}
""".trimIndent())
.jsonBody(ItemPostDto(list.id, "new content", "new type").toJson())
.responseObject<ItemGetDto>(mapper)

val updatedItem = updateItemResult.get()
Expand Down

0 comments on commit a3a840b

Please sign in to comment.