Add integration tests for mapping events
This commit is contained in:
@@ -23,6 +23,12 @@ import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
|
|||||||
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
|
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* An implementation of ApplicationEventPublisher that will only fire MappingContextEvents for use by the index creator when
|
||||||
|
* MongoTemplate is used 'stand-alone', that is not declared inside a Spring ApplicationContext.
|
||||||
|
*
|
||||||
|
* Declare MongoTemplate inside an ApplicationContext to enable the publishing of all persistence events such as
|
||||||
|
* {@link AfterLoadEvent}, {@link AfterSaveEvent}, etc.
|
||||||
|
*
|
||||||
* @author Jon Brisbin <jbrisbin@vmware.com>
|
* @author Jon Brisbin <jbrisbin@vmware.com>
|
||||||
*/
|
*/
|
||||||
public class MongoMappingEventPublisher implements ApplicationEventPublisher {
|
public class MongoMappingEventPublisher implements ApplicationEventPublisher {
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011 by the original author(s).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.springframework.data.mongodb.core.mapping.event;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationEvent;
|
||||||
|
import org.springframework.context.ApplicationListener;
|
||||||
|
|
||||||
|
public class AfterSaveListener implements ApplicationListener<AfterSaveEvent<Object>> {
|
||||||
|
|
||||||
|
public final ArrayList<ApplicationEvent> seenEvents = new ArrayList<ApplicationEvent>();
|
||||||
|
|
||||||
|
public void onApplicationEvent(AfterSaveEvent<Object> event) {
|
||||||
|
this.seenEvents.add(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011 by the original author(s).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.springframework.data.mongodb.core.mapping.event;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||||
|
import org.springframework.data.mongodb.core.mapping.PersonPojoStringId;
|
||||||
|
|
||||||
|
import com.mongodb.DB;
|
||||||
|
import com.mongodb.DBObject;
|
||||||
|
import com.mongodb.Mongo;
|
||||||
|
import com.mongodb.WriteConcern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration test for Mapping Events.
|
||||||
|
*
|
||||||
|
* @author Mark Pollack
|
||||||
|
*/
|
||||||
|
public class ApplicationContextEventTests {
|
||||||
|
|
||||||
|
private final String[] collectionsToDrop = new String[] { "personPojoStringId" };
|
||||||
|
|
||||||
|
private ApplicationContext applicationContext;
|
||||||
|
private MongoTemplate template;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
cleanDb();
|
||||||
|
applicationContext = new AnnotationConfigApplicationContext(ApplicationContextEventTestsAppConfig.class);
|
||||||
|
template = applicationContext.getBean(MongoTemplate.class);
|
||||||
|
template.setWriteConcern(WriteConcern.FSYNC_SAFE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void cleanUp() throws Exception {
|
||||||
|
cleanDb();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cleanDb() throws UnknownHostException {
|
||||||
|
Mongo mongo = new Mongo();
|
||||||
|
DB db = mongo.getDB("database");
|
||||||
|
for (String coll : collectionsToDrop) {
|
||||||
|
db.getCollection(coll).drop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void beforeSaveEvent() {
|
||||||
|
PersonBeforeSaveListener personBeforeSaveListener = applicationContext.getBean(PersonBeforeSaveListener.class);
|
||||||
|
AfterSaveListener afterSaveListener = applicationContext.getBean(AfterSaveListener.class);
|
||||||
|
SimpleMappingEventListener simpleMappingEventListener = applicationContext.getBean(SimpleMappingEventListener.class);
|
||||||
|
|
||||||
|
assertEquals(0, personBeforeSaveListener.seenEvents.size());
|
||||||
|
assertEquals(0, afterSaveListener.seenEvents.size());
|
||||||
|
|
||||||
|
assertEquals(0, simpleMappingEventListener.onBeforeSaveEvents.size());
|
||||||
|
assertEquals(0, simpleMappingEventListener.onAfterSaveEvents.size());
|
||||||
|
|
||||||
|
|
||||||
|
PersonPojoStringId p = new PersonPojoStringId("1", "Text");
|
||||||
|
template.insert(p);
|
||||||
|
|
||||||
|
assertEquals(1, personBeforeSaveListener.seenEvents.size());
|
||||||
|
assertEquals(1, afterSaveListener.seenEvents.size());
|
||||||
|
|
||||||
|
assertEquals(1, simpleMappingEventListener.onBeforeSaveEvents.size());
|
||||||
|
assertEquals(1, simpleMappingEventListener.onAfterSaveEvents.size());
|
||||||
|
|
||||||
|
Assert.assertTrue(personBeforeSaveListener.seenEvents.get(0) instanceof BeforeSaveEvent<?>);
|
||||||
|
Assert.assertTrue(afterSaveListener.seenEvents.get(0) instanceof AfterSaveEvent<?>);
|
||||||
|
|
||||||
|
BeforeSaveEvent<PersonPojoStringId> beforeSaveEvent = (BeforeSaveEvent<PersonPojoStringId>)personBeforeSaveListener.seenEvents.get(0);
|
||||||
|
PersonPojoStringId p2 = beforeSaveEvent.getSource();
|
||||||
|
DBObject dbo = beforeSaveEvent.getDBObject();
|
||||||
|
|
||||||
|
comparePersonAndDbo(p, p2, dbo);
|
||||||
|
|
||||||
|
AfterSaveEvent<Object> afterSaveEvent = (AfterSaveEvent<Object>)afterSaveListener.seenEvents.get(0);
|
||||||
|
Assert.assertTrue(afterSaveEvent.getSource() instanceof PersonPojoStringId);
|
||||||
|
p2 = (PersonPojoStringId)afterSaveEvent.getSource();
|
||||||
|
dbo = beforeSaveEvent.getDBObject();
|
||||||
|
|
||||||
|
comparePersonAndDbo(p, p2, dbo);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void comparePersonAndDbo(PersonPojoStringId p, PersonPojoStringId p2, DBObject dbo) {
|
||||||
|
assertEquals(p.getId(), p2.getId());
|
||||||
|
assertEquals(p.getText(), p2.getText());
|
||||||
|
|
||||||
|
assertEquals("org.springframework.data.mongodb.core.mapping.PersonPojoStringId", dbo.get("_class"));
|
||||||
|
assertEquals("1", dbo.get("_id"));
|
||||||
|
assertEquals("Text", dbo.get("text"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2011 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.springframework.data.mongodb.core.mapping.event;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
|
||||||
|
|
||||||
|
import com.mongodb.Mongo;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class ApplicationContextEventTestsAppConfig extends AbstractMongoConfiguration {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDatabaseName() {
|
||||||
|
return "database";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Bean
|
||||||
|
public Mongo mongo() throws Exception {
|
||||||
|
return new Mongo("127.0.0.1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public PersonBeforeSaveListener personBeforeSaveListener() {
|
||||||
|
return new PersonBeforeSaveListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public AfterSaveListener afterSaveListener() {
|
||||||
|
return new AfterSaveListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SimpleMappingEventListener simpleMappingEventListener() {
|
||||||
|
return new SimpleMappingEventListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011 by the original author(s).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.springframework.data.mongodb.core.mapping.event;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationEvent;
|
||||||
|
import org.springframework.context.ApplicationListener;
|
||||||
|
import org.springframework.data.mongodb.core.mapping.PersonPojoStringId;
|
||||||
|
|
||||||
|
public class PersonBeforeSaveListener implements ApplicationListener<BeforeSaveEvent<PersonPojoStringId>> {
|
||||||
|
|
||||||
|
public final ArrayList<ApplicationEvent> seenEvents = new ArrayList<ApplicationEvent>();
|
||||||
|
|
||||||
|
public void onApplicationEvent(BeforeSaveEvent<PersonPojoStringId> event) {
|
||||||
|
this.seenEvents.add(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2011 by the original author(s).
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.springframework.data.mongodb.core.mapping.event;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import com.mongodb.DBObject;
|
||||||
|
|
||||||
|
|
||||||
|
public class SimpleMappingEventListener extends AbstractMappingEventListener<MongoMappingEvent<Object>, Object> {
|
||||||
|
|
||||||
|
public final ArrayList<BeforeConvertEvent<Object>> onBeforeConvertEvents = new ArrayList<BeforeConvertEvent<Object>>();
|
||||||
|
public final ArrayList<BeforeSaveEvent<Object>> onBeforeSaveEvents = new ArrayList<BeforeSaveEvent<Object>>();
|
||||||
|
public final ArrayList<AfterSaveEvent<Object>> onAfterSaveEvents = new ArrayList<AfterSaveEvent<Object>>();
|
||||||
|
public final ArrayList<AfterLoadEvent<Object>> onAfterLoadEvents = new ArrayList<AfterLoadEvent<Object>>();
|
||||||
|
public final ArrayList<AfterConvertEvent<Object>> onAfterConvertEvents = new ArrayList<AfterConvertEvent<Object>>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBeforeConvert(Object source) {
|
||||||
|
onBeforeConvertEvents.add(new BeforeConvertEvent<Object>(source));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBeforeSave(Object source, DBObject dbo) {
|
||||||
|
onBeforeSaveEvents.add(new BeforeSaveEvent<Object>(source, dbo));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAfterSave(Object source, DBObject dbo) {
|
||||||
|
onAfterSaveEvents.add(new AfterSaveEvent<Object>(source, dbo));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAfterLoad(DBObject dbo) {
|
||||||
|
onAfterLoadEvents.add(new AfterLoadEvent<Object>(dbo));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAfterConvert(DBObject dbo, Object source) {
|
||||||
|
onAfterConvertEvents.add(new AfterConvertEvent<Object>(dbo, source));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user