11package grails.gorm.tests
22
3- import grails.gorm.services.Service
4- import grails.gorm.tests.GormDatastoreSpec
3+ import grails.gorm.annotation.Entity
54import org.grails.datastore.gorm.GormEntity
65import org.grails.datastore.gorm.events.ConfigurableApplicationEventPublisher
76import org.grails.datastore.mapping.core.Datastore
@@ -12,19 +11,22 @@ import org.grails.datastore.mapping.engine.event.PreUpdateEvent
1211import org.springframework.context.ApplicationEvent
1312import org.springframework.context.ApplicationEventPublisher
1413import org.springframework.context.ConfigurableApplicationContext
14+ import spock.util.concurrent.PollingConditions
1515
1616class DirtyCheckingAfterListenerSpec extends GormDatastoreSpec {
1717
1818 TestSaveOrUpdateEventListener listener
19+ def datastore
1920
2021 @Override
2122 List getDomainClasses () {
2223 return [Player ]
2324 }
2425
2526 def setup () {
26- listener = new TestSaveOrUpdateEventListener (session. datastore)
27- ApplicationEventPublisher publisher = session. datastore. applicationEventPublisher
27+ datastore = session. datastore
28+ listener = new TestSaveOrUpdateEventListener (datastore)
29+ ApplicationEventPublisher publisher = datastore. applicationEventPublisher
2830 if (publisher instanceof ConfigurableApplicationEventPublisher ) {
2931 ((ConfigurableApplicationEventPublisher ) publisher). addApplicationListener(listener)
3032 } else if (publisher instanceof ConfigurableApplicationContext ) {
@@ -34,49 +36,48 @@ class DirtyCheckingAfterListenerSpec extends GormDatastoreSpec {
3436
3537 void " test state change from listener update the object" () {
3638
37- setup :
38- PlayerService playerService = session. datastore. getService(PlayerService )
39- Player john = playerService. save(" John" )
39+ when :
40+ new Player (name : " John" ). save()
41+
42+ then :
43+ new PollingConditions (). eventually { listener. isExecuted && Player . count()}
4044
4145 when :
4246 session. flush()
43- john = playerService. find(" John" )
47+ session. clear()
48+ Player john = Player . get(john. id)
4449
4550 then :
4651 john. attributes
4752 john. attributes. size() == 3
48- }
49-
50- static class TestSaveOrUpdateEventListener extends AbstractPersistenceEventListener {
51-
52- TestSaveOrUpdateEventListener (Datastore datastore ) {
53- super (datastore)
54- }
55-
56- @Override
57- protected void onPersistenceEvent (AbstractPersistenceEvent event ) {
58- Player player = (Player ) event. entityObject
59- player. attributes = [" test0" , " test1" , " test2" ]
60- }
6153
62- @Override
63- boolean supportsEventType (Class<? extends ApplicationEvent > eventType ) {
64- return eventType == PreUpdateEvent || eventType == PreInsertEvent
65- }
6654 }
6755}
6856
57+ @Entity
6958class Player implements GormEntity<Player > {
7059 String name
7160 List<String > attributes
7261
7362}
7463
75- @Service (Player )
76- interface PlayerService {
64+ class TestSaveOrUpdateEventListener extends AbstractPersistenceEventListener {
7765
78- Player save ( String name )
66+ boolean isExecuted = false
7967
80- Player find (String name )
81- }
68+ TestSaveOrUpdateEventListener (Datastore datastore ) {
69+ super (datastore)
70+ }
71+
72+ @Override
73+ protected void onPersistenceEvent (AbstractPersistenceEvent event ) {
74+ Player player = (Player ) event. entityObject
75+ player. attributes = [" test0" , " test1" , " test2" ]
76+ isExecuted = true
77+ }
8278
79+ @Override
80+ boolean supportsEventType (Class<? extends ApplicationEvent > eventType ) {
81+ return eventType == PreUpdateEvent || eventType == PreInsertEvent
82+ }
83+ }
0 commit comments