1
1
package grails.plugin.json.view
2
2
3
+ import com.fasterxml.jackson.databind.ObjectMapper
3
4
import grails.gorm.annotation.Entity
4
5
import grails.plugin.json.view.test.JsonViewTest
5
6
import org.grails.testing.GrailsUnitTest
6
7
import spock.lang.Issue
8
+ import spock.lang.Shared
7
9
import spock.lang.Specification
8
10
9
11
class EmbeddedAssociationsSpec extends Specification implements JsonViewTest , GrailsUnitTest {
10
12
11
- void " Test render domain object with embedded associations" () {
12
- given :" A domain class with embedded associations"
13
+ @Shared
14
+ ObjectMapper objectMapper = new ObjectMapper ()
15
+
16
+ void ' Test render domain object with embedded associations' () {
17
+ given : ' A domain class with embedded associations'
13
18
mappingContext. addPersistentEntities(Person )
14
- Person p = new Person (name :" Robert" )
15
- p. homeAddress = new Address (postCode : " 12345" )
16
- p. otherAddresses = [new Address (postCode : " 6789" ), new Address (postCode : " 54321" )]
19
+ def p = new Person (name : ' Robert' )
20
+ p. homeAddress = new Address (postCode : ' 12345' )
21
+ p. otherAddresses = [new Address (postCode : ' 6789' ), new Address (postCode : ' 54321' )]
17
22
p. nickNames = [' Rob' ,' Bob' ]
18
23
19
- when :" A an instance with embedded assocations is rendered"
24
+ when : ' A an instance with embedded associations is rendered'
20
25
def result = render('''
21
- import grails.plugin.json.view.*
22
-
23
- model {
24
- Person person
25
- }
26
- json g.render(person)
27
- ''' , [person :p])
28
-
29
- then :" The result is correct"
30
- result. jsonText == ' {"otherAddresses":[{"postCode":"6789"},{"postCode":"54321"}],"name":"Robert","nickNames":["Rob","Bob"],"homeAddress":{"postCode":"12345"}}'
26
+ import grails.plugin.json.view.*
27
+
28
+ model {
29
+ Person person
30
+ }
31
+ json g.render(person)
32
+
33
+ ''' , [person : p])
34
+
35
+ then : ' The result is correct'
36
+ objectMapper. readTree(result. jsonText) == objectMapper. readTree('''
37
+ {
38
+ "otherAddresses": [
39
+ {"postCode": "6789"},
40
+ {"postCode": "54321"}
41
+ ],
42
+ "name": "Robert",
43
+ "nickNames": ["Rob", "Bob"],
44
+ "homeAddress": {"postCode": "12345"}
45
+ }
46
+ ''' )
31
47
}
32
48
33
- void " Test render domain object with embedded associations in json api" () {
34
- given :" A domain class with embedded associations"
49
+ void ' Test render domain object with embedded associations in json api' () {
50
+ given : ' A domain class with embedded associations'
35
51
mappingContext. addPersistentEntities(Person )
36
- Person p = new Person (name :" Robert" )
52
+ def p = new Person (name : ' Robert' )
37
53
p. id = 2
38
- p. homeAddress = new Address (postCode : " 12345" )
39
- p. otherAddresses = [new Address (postCode : " 6789" ), new Address (postCode : " 54321" )]
40
- p. nickNames = [' Rob' ,' Bob' ]
54
+ p. homeAddress = new Address (postCode : ' 12345' )
55
+ p. otherAddresses = [new Address (postCode : ' 6789' ), new Address (postCode : ' 54321' )]
56
+ p. nickNames = [' Rob' , ' Bob' ]
41
57
42
- when :" A an instance with embedded assocations is rendered"
58
+ when : ' A an instance with embedded assocations is rendered'
43
59
def result = render('''
44
- import grails.plugin.json.view.*
45
-
46
- model {
47
- Person person
48
- }
49
- json jsonapi.render(person)
50
- ''' , [person :p])
51
-
52
- then :" The result is correct"
53
- result. jsonText == ''' {"data":{"type":"person","id":"2","attributes":{"otherAddresses":[{"postCode":"6789"},{"postCode":"54321"}],"name":"Robert","nickNames":["Rob","Bob"],"homeAddress":{"postCode":"12345"}}},"links":{"self":"/person/2"}}'''
54
-
60
+ import grails.plugin.json.view.*
61
+
62
+ model {
63
+ Person person
64
+ }
65
+ json jsonapi.render(person)
66
+ ''' , [person : p])
67
+
68
+ then : ' The result is correct'
69
+ objectMapper. readTree(result. jsonText) == objectMapper. readTree('''
70
+ {
71
+ "data": {
72
+ "type": "person",
73
+ "id": "2",
74
+ "attributes": {
75
+ "otherAddresses": [
76
+ {"postCode": "6789"},
77
+ {"postCode": "54321"}
78
+ ],
79
+ "name": "Robert",
80
+ "nickNames": ["Rob", "Bob"],
81
+ "homeAddress": {
82
+ "postCode": "12345"
83
+ }
84
+ }
85
+ },
86
+ "links": {
87
+ "self": "/person/2"
88
+ }
89
+ }
90
+ ''' )
55
91
}
56
92
57
- @Issue (" https://github.com/grails/grails-views/issues/171" )
93
+ @Issue (' https://github.com/grails/grails-views/issues/171' )
58
94
void ' test render domain object with embedded associations and include' () {
59
95
given : ' a domain class with embedded associations'
60
96
mappingContext. addPersistentEntities(Person )
61
- Person p = new Person (name :" Robert" )
62
- p. homeAddress = new Address (postCode : " 12345" )
63
- p. otherAddresses = [new Address (postCode : " 6789" ), new Address (postCode : " 54321" )]
64
- p. nickNames = [' Rob' ,' Bob' ]
97
+ def p = new Person (name : ' Robert' )
98
+ p. homeAddress = new Address (postCode : ' 12345' )
99
+ p. otherAddresses = [new Address (postCode : ' 6789' ), new Address (postCode : ' 54321' )]
100
+ p. nickNames = [' Rob' , ' Bob' ]
65
101
66
102
when : ' an instance with embedded associations is rendered'
67
103
def result = render('''
68
- import grails.plugin.json.view.*
69
-
70
- model {
71
- Person person
72
- }
73
- json g.render(person, [includes: ['name', 'homeAddress']])
74
- ''' , [person :p])
104
+ import grails.plugin.json.view.*
105
+
106
+ model {
107
+ Person person
108
+ }
109
+ json g.render(person, [includes: ['name', 'homeAddress']])
110
+ ''' , [person : p])
75
111
76
112
then : ' the result is correct'
77
- result. jsonText == ' {"name":"Robert","homeAddress":{"postCode":"12345"}}'
113
+ objectMapper. readTree(result. jsonText) == objectMapper. readTree('''
114
+ {
115
+ "name": "Robert",
116
+ "homeAddress": {"postCode": "12345"}
117
+ }
118
+ ''' )
78
119
}
79
120
80
- @Issue (" https://github.com/grails/grails-views/issues/171" )
121
+ @Issue (' https://github.com/grails/grails-views/issues/171' )
81
122
void ' test render domain object with embedded associations and include in json api' () {
82
123
given : ' a domain class with embedded associations'
83
124
mappingContext. addPersistentEntities(Person )
84
- Person p = new Person (name :" Robert" )
125
+ def p = new Person (name : ' Robert' )
85
126
p. id = 4
86
- p. homeAddress = new Address (postCode : " 12345" )
87
- p. otherAddresses = [new Address (postCode : " 6789" ), new Address (postCode : " 54321" )]
88
- p. nickNames = [' Rob' ,' Bob' ]
127
+ p. homeAddress = new Address (postCode : ' 12345' )
128
+ p. otherAddresses = [new Address (postCode : ' 6789' ), new Address (postCode : ' 54321' )]
129
+ p. nickNames = [' Rob' , ' Bob' ]
89
130
90
131
when : ' an instance with embedded associations is rendered'
91
132
def result = render('''
92
- import grails.plugin.json.view.*
93
-
94
- model {
95
- Person person
96
- }
97
- json jsonapi.render(person, [includes: ['name', 'homeAddress']])
98
- ''' , [person :p])
133
+ import grails.plugin.json.view.*
134
+
135
+ model {
136
+ Person person
137
+ }
138
+ json jsonapi.render(person, [includes: ['name', 'homeAddress']])
139
+ ''' , [person : p])
99
140
100
141
then : ' the result is correct'
101
- result. jsonText == ''' {"data":{"type":"person","id":"4","attributes":{"name":"Robert","homeAddress":{"postCode":"12345"}}},"links":{"self":"/person/4"}}'''
142
+ objectMapper. readTree(result. jsonText) == objectMapper. readTree('''
143
+ {
144
+ "data": {
145
+ "type": "person",
146
+ "id": "4",
147
+ "attributes": {
148
+ "name": "Robert",
149
+ "homeAddress": {"postCode": "12345"}
150
+ }
151
+ },
152
+ "links": {
153
+ "self": "/person/4"
154
+ }
155
+ }
156
+ ''' )
102
157
}
103
158
}
104
159
@@ -110,6 +165,7 @@ class Person {
110
165
List<Address > otherAddresses = []
111
166
List<String > nickNames = []
112
167
168
+ @SuppressWarnings (' unused' )
113
169
static embedded = [' homeAddress' , ' otherAddresses' ]
114
170
}
115
171
0 commit comments