Add unit test for JSON return object
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / ajax / JsonReturnObjectTest.kt
1 package net.pterodactylus.sone.web.ajax
2
3 import com.fasterxml.jackson.databind.JsonNode
4 import com.fasterxml.jackson.databind.ObjectMapper
5 import com.fasterxml.jackson.databind.node.BooleanNode
6 import com.fasterxml.jackson.databind.node.IntNode
7 import com.fasterxml.jackson.databind.node.JsonNodeFactory
8 import com.fasterxml.jackson.databind.node.ObjectNode
9 import com.fasterxml.jackson.databind.node.TextNode
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
12 import org.junit.Test
13
14 /**
15  * Unit test for [JsonReturnObject].
16  */
17 class JsonReturnObjectTest {
18
19         private val jsonReturnObject = JsonReturnObject(true)
20         private val objectMapper = ObjectMapper()
21
22         @Test
23         fun `json object retains success status if true`() {
24                 assertThat(JsonReturnObject(true).isSuccess, equalTo(true))
25         }
26
27         @Test
28         fun `json object retains success status if false`() {
29                 assertThat(JsonReturnObject(false).isSuccess, equalTo(false))
30         }
31
32         @Test
33         fun `json object returns text nodes for string properties`() {
34                 jsonReturnObject.put("foo", "bar")
35                 assertThat(jsonReturnObject["foo"], equalTo<Any>(TextNode("bar")))
36         }
37
38         @Test
39         fun `json object returns int nodes for int properties`() {
40                 jsonReturnObject.put("foo", 123)
41                 assertThat(jsonReturnObject["foo"], equalTo<Any>(IntNode(123)))
42         }
43
44         @Test
45         fun `json object returns boolean nodes for boolean properties`() {
46                 jsonReturnObject.put("foo", true)
47                 assertThat(jsonReturnObject["foo"], equalTo<Any>(BooleanNode.TRUE))
48         }
49
50         @Test
51         fun `json object returns json node for json properties`() {
52                 val objectNode = ObjectNode(JsonNodeFactory.instance)
53                 jsonReturnObject.put("foo", objectNode)
54                 assertThat(jsonReturnObject["foo"], equalTo<Any>(objectNode))
55         }
56
57         @Test
58         fun `json object returns all properties`() {
59                 val objectNode = ObjectNode(JsonNodeFactory.instance)
60                 jsonReturnObject.put("text", "text")
61                 jsonReturnObject.put("int", 123)
62                 jsonReturnObject.put("boolean", true)
63                 jsonReturnObject.put("object", objectNode)
64                 assertThat(jsonReturnObject.content, equalTo<Any>(mapOf(
65                                 "text" to TextNode("text"),
66                                 "int" to IntNode(123),
67                                 "boolean" to BooleanNode.TRUE,
68                                 "object" to objectNode
69                 )))
70         }
71
72         @Test
73         fun `json object is serialized correctly`() {
74                 val objectNode = ObjectNode(JsonNodeFactory.instance)
75                 jsonReturnObject.put("text", "text")
76                 jsonReturnObject.put("int", 123)
77                 jsonReturnObject.put("boolean", true)
78                 jsonReturnObject.put("object", objectNode)
79                 val json = objectMapper.writeValueAsString(jsonReturnObject)
80                 val parsedJson = objectMapper.readTree(json)
81                 assertThat(parsedJson, equalTo<JsonNode>(ObjectNode(JsonNodeFactory.instance).apply {
82                         put("success", true)
83                         put("text", "text")
84                         put("int", 123)
85                         put("boolean", true)
86                         put("object", objectNode)
87                 }))
88         }
89
90 }