Skip to content

Commit a476ead

Browse files
committed
test: Make some tests go green again
1 parent c88548e commit a476ead

File tree

5 files changed

+819
-360
lines changed

5 files changed

+819
-360
lines changed

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ grails-gradle-plugin = '7.0.0-SNAPSHOT'
99
grails-testing-support = '4.0.0-SNAPSHOT'
1010
groovy = '4.0.22'
1111
java-baseline = '17'
12+
jackson-databind = '2.17.2'
1213
jakarta-annotation-api = '3.0.0'
1314
jakarta-servlet-api = '6.0.0'
1415
jakarta-validation-api = '3.0.2'
@@ -38,6 +39,7 @@ grails-web-urlmappings = { module = 'org.grails:grails-web-url-mappings', versio
3839
groovy-core = { module = 'org.apache.groovy:groovy', version.ref = 'groovy' }
3940
groovy-json = { module = 'org.apache.groovy:groovy-json', version.ref = 'groovy' }
4041
groovy-templates = { module = 'org.apache.groovy:groovy-templates', version.ref = 'groovy' }
42+
jackson-databind = { module = 'com.fasterxml.jackson.core:jackson-databind', version.ref = 'jackson-databind' }
4143
jakarta-annotation-api = { module = 'jakarta.annotation:jakarta.annotation-api', version.ref = 'jakarta-annotation-api' }
4244
jakarta-servlet-api = { module = 'jakarta.servlet:jakarta.servlet-api', version.ref = 'jakarta-servlet-api' }
4345
jakarta-validation-api = { module = 'jakarta.validation:jakarta.validation-api', version.ref = 'jakarta-validation-api' }

json/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ dependencies {
2424
testImplementation libs.grails.testing.support.gorm
2525
testImplementation libs.grails.datastore.gorm.hibernate5
2626
testImplementation libs.spock.core
27+
testImplementation libs.jackson.databind
2728

2829
testRuntimeOnly libs.slf4j.nop // Get rid of warning about missing slf4j implementation during test task
2930
}

json/src/test/groovy/grails/plugin/json/view/EmbeddedAssociationsSpec.groovy

Lines changed: 116 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,159 @@
11
package grails.plugin.json.view
22

3+
import com.fasterxml.jackson.databind.ObjectMapper
34
import grails.gorm.annotation.Entity
45
import grails.plugin.json.view.test.JsonViewTest
56
import org.grails.testing.GrailsUnitTest
67
import spock.lang.Issue
8+
import spock.lang.Shared
79
import spock.lang.Specification
810

911
class EmbeddedAssociationsSpec extends Specification implements JsonViewTest, GrailsUnitTest {
1012

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'
1318
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')]
1722
p.nickNames = ['Rob','Bob']
1823

19-
when:"A an instance with embedded assocations is rendered"
24+
when: 'A an instance with embedded associations is rendered'
2025
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+
''')
3147
}
3248

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'
3551
mappingContext.addPersistentEntities(Person)
36-
Person p = new Person(name:"Robert")
52+
def p = new Person(name: 'Robert')
3753
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']
4157

42-
when:"A an instance with embedded assocations is rendered"
58+
when: 'A an instance with embedded assocations is rendered'
4359
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+
''')
5591
}
5692

57-
@Issue("https://github.com/grails/grails-views/issues/171")
93+
@Issue('https://github.com/grails/grails-views/issues/171')
5894
void 'test render domain object with embedded associations and include'() {
5995
given: 'a domain class with embedded associations'
6096
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']
65101

66102
when: 'an instance with embedded associations is rendered'
67103
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])
75111

76112
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+
''')
78119
}
79120

80-
@Issue("https://github.com/grails/grails-views/issues/171")
121+
@Issue('https://github.com/grails/grails-views/issues/171')
81122
void 'test render domain object with embedded associations and include in json api'() {
82123
given: 'a domain class with embedded associations'
83124
mappingContext.addPersistentEntities(Person)
84-
Person p = new Person(name:"Robert")
125+
def p = new Person(name: 'Robert')
85126
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']
89130

90131
when: 'an instance with embedded associations is rendered'
91132
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])
99140

100141
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+
''')
102157
}
103158
}
104159

@@ -110,6 +165,7 @@ class Person {
110165
List<Address> otherAddresses = []
111166
List<String> nickNames = []
112167

168+
@SuppressWarnings('unused')
113169
static embedded = ['homeAddress', 'otherAddresses']
114170
}
115171

0 commit comments

Comments
 (0)