/*
* Copyright (c) 2002-2017 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
* You may not use this product except in compliance with the License.
*
* This product may include a number of subcomponents with
* separate copyright notices and license terms. Your use of the source
* code for these subcomponents is subject to the terms and
* conditions of the subcomponent's license, as noted in the LICENSE file.
*/
package org.neo4j.ogm.persistence.session.events;
import java.util.UUID;
import org.junit.Assert;
import org.junit.Test;
import org.neo4j.ogm.domain.filesystem.Document;
import org.neo4j.ogm.domain.filesystem.FileSystemEntity;
import org.neo4j.ogm.domain.filesystem.Folder;
import org.neo4j.ogm.session.Neo4jSession;
import org.neo4j.ogm.session.event.Event;
import org.neo4j.ogm.session.event.EventListener;
/**
* @author vince
*/
public class LifecycleTest extends EventTestBaseClass {
@Test
public void shouldSaveObjectUpdatedByPreSaveEventHandler() {
session.dispose(eventListener); // not interested in the default one for this suite
session.register(uuidEventListener);
Folder f = new Folder();
f.setName("folder");
Assert.assertNull(f.getUuid());
session.save(f);
Assert.assertNotNull(f.getUuid());
session.clear();
Folder f2 = session.load(Folder.class, f.getId());
Assert.assertNotNull(f2.getName());
Assert.assertNotNull(f2.getUuid());
}
@Test
public void shouldNotSaveObjectUpdatedByPreDeleteEventHandler() {
session.dispose(eventListener); // not interested in the default one for this suite
session.register(uuidEventListener);
Folder f = new Folder();
Document d = new Document();
f.setName("folder");
d.setFolder(f);
f.getDocuments().add(d);
Assert.assertNull(f.getUuid());
session.save(f);
Assert.assertNotNull(f.getUuid());
//
Assert.assertFalse(((Neo4jSession) session).context().isDirty(f));
session.delete(d);
Assert.assertEquals("updated by pre-delete", f.getName());
Assert.assertTrue(((Neo4jSession) session).context().isDirty(f));
session.clear();
Folder f2 = session.load(Folder.class, f.getId());
Assert.assertTrue(f2.getDocuments().isEmpty());
Assert.assertEquals("folder", f2.getName());
}
private EventListener uuidEventListener = new EventListener() {
@Override
public void onPreSave(Event event) {
FileSystemEntity entity = (FileSystemEntity) event.getObject();
if (entity.getId() == null) {
entity.setUuid(UUID.randomUUID().toString());
}
}
@Override
public void onPostSave(Event event) {
}
@Override
public void onPreDelete(Event event) {
FileSystemEntity entity = (FileSystemEntity) event.getObject();
if (entity instanceof Document) {
Document d = (Document) entity;
Folder f = d.getFolder();
f.setName("updated by pre-delete");
}
}
@Override
public void onPostDelete(Event event) {
}
};
}