Skip to content

Commit 32823ac

Browse files
committed
#1265 Test to verify save from the listener
1 parent 0b8f49c commit 32823ac

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package grails.gorm.tests
2+
3+
import grails.gorm.services.Service
4+
import grails.gorm.tests.GormDatastoreSpec
5+
import org.grails.datastore.gorm.GormEntity
6+
import org.grails.datastore.gorm.events.ConfigurableApplicationEventPublisher
7+
import org.grails.datastore.mapping.core.Datastore
8+
import org.grails.datastore.mapping.engine.event.AbstractPersistenceEvent
9+
import org.grails.datastore.mapping.engine.event.AbstractPersistenceEventListener
10+
import org.grails.datastore.mapping.engine.event.PreInsertEvent
11+
import org.grails.datastore.mapping.engine.event.PreUpdateEvent
12+
import org.springframework.context.ApplicationEvent
13+
import org.springframework.context.ApplicationEventPublisher
14+
import org.springframework.context.ConfigurableApplicationContext
15+
16+
class DirtyCheckingAfterListenerSpec extends GormDatastoreSpec {
17+
18+
TestSaveOrUpdateEventListener listener
19+
20+
@Override
21+
List getDomainClasses() {
22+
return [Player]
23+
}
24+
25+
def setup() {
26+
listener = new TestSaveOrUpdateEventListener(session.datastore)
27+
ApplicationEventPublisher publisher = session.datastore.applicationEventPublisher
28+
if (publisher instanceof ConfigurableApplicationEventPublisher) {
29+
((ConfigurableApplicationEventPublisher) publisher).addApplicationListener(listener)
30+
} else if (publisher instanceof ConfigurableApplicationContext) {
31+
((ConfigurableApplicationContext) publisher).addApplicationListener(listener)
32+
}
33+
}
34+
35+
void "test state change from listener update the object"() {
36+
37+
setup:
38+
PlayerService playerService = session.datastore.getService(PlayerService)
39+
Player john = playerService.save("John")
40+
41+
when:
42+
session.flush()
43+
john = playerService.find("John")
44+
45+
then:
46+
john.attributes
47+
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+
}
61+
62+
@Override
63+
boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
64+
return eventType == PreUpdateEvent || eventType == PreInsertEvent
65+
}
66+
}
67+
}
68+
69+
class Player implements GormEntity<Player> {
70+
String name
71+
List<String> attributes
72+
73+
}
74+
75+
@Service(Player)
76+
interface PlayerService {
77+
78+
Player save(String name)
79+
80+
Player find(String name)
81+
}
82+

0 commit comments

Comments
 (0)