Skip to content

Commit 912eef7

Browse files
authored
Merge pull request #1289 from grails/updateUniqueConstraint
Update tests and UniqueConstraint
2 parents 2991761 + 2df2e24 commit 912eef7

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

grails-datastore-gorm-tck/src/main/groovy/grails/gorm/tests/BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec extends GormD
77

88
void "test unique constraint on root instance"() {
99

10-
given:
10+
setup:
1111
ContactDetails contactDetails1 = new ContactDetails(phoneNumber: "+1-202-555-0105").save(failOnError: true)
1212
ContactDetails contactDetails2 = new ContactDetails(phoneNumber: "+1-202-555-0105")
1313
session.flush()
@@ -27,7 +27,7 @@ class BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec extends GormD
2727

2828
void "test unique constraint for the associated child object"() {
2929

30-
given:
30+
setup:
3131
ContactDetails contactDetails1 = new ContactDetails(phoneNumber: "+1-202-555-0105").save(failOnError: true)
3232
Patient patient1 = new Patient(contactDetails: contactDetails1).save(failOnError: true)
3333
session.flush()
@@ -49,7 +49,7 @@ class BuiltinUniqueConstraintWorksWithTargetProxiesConstraintsSpec extends GormD
4949

5050
void "test unique constraint on the unmodified association loaded as initialized proxy"() {
5151

52-
given:
52+
setup:
5353
final ProxyHandler proxyHandler = session.mappingContext.getProxyHandler()
5454
ContactDetails contactDetails = new ContactDetails(phoneNumber: "+1-202-555-0105").save(failOnError: true)
5555
Patient patient = new Patient(contactDetails: contactDetails).save(failOnError: true)

grails-datastore-gorm-tck/src/main/groovy/grails/gorm/tests/ProxyInitializationSpec.groovy

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ class ProxyInitializationSpec extends GormDatastoreSpec {
1414

1515
setup:
1616
final ProxyHandler proxyHandler = session.mappingContext.getProxyHandler()
17-
Long patientId = new Patient(contactDetails: new ContactDetails(phoneNumber: "+1-202-555-0105")).save(failOnError: true).id
17+
ContactDetails contactDetails = new ContactDetails(phoneNumber: "+1-202-555-0178").save(failOnError: true)
18+
Long patientId = new Patient(contactDetails: contactDetails).save(failOnError: true).id
1819
session.flush()
1920
session.clear()
2021

@@ -25,9 +26,13 @@ class ProxyInitializationSpec extends GormDatastoreSpec {
2526
proxyHandler.isProxy(patient.contactDetails)
2627

2728
when:
28-
patient.contactDetails.phoneNumber = "+1-202-555-0105"
29+
patient.contactDetails.phoneNumber = "+1-202-555-0178"
2930

3031
then:
3132
proxyHandler.isInitialized(patient.contactDetails)
33+
34+
cleanup:
35+
Patient.deleteAll(patient)
36+
ContactDetails.deleteAll(patient.contactDetails)
3237
}
3338
}

grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/validation/constraints/builtin/UniqueConstraint.groovy

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,11 @@ class UniqueConstraint extends AbstractConstraint {
141141
// We are merely verifying that the object is not transient here
142142
def targetId
143143
if (proxyHandler.isProxy(target)) {
144-
targetId = proxyHandler.getIdentifier(target)
144+
if (proxyHandler.isInitialized(target)) {
145+
targetId = reflector.getIdentifier(proxyHandler.unwrap(target))
146+
} else {
147+
targetId = proxyHandler.getIdentifier(target)
148+
}
145149
} else {
146150
targetId = reflector.getIdentifier(target)
147151
}

0 commit comments

Comments
 (0)