/*
* Copyright (c) 2002-2009 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.kernel.impl.core;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import org.junit.Test;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.NotFoundException;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.kernel.impl.AbstractNeo4jTestCase;
import org.neo4j.kernel.impl.MyRelTypes;
public class TestRelationship extends AbstractNeo4jTestCase
{
private String key1 = "key1";
private String key2 = "key2";
private String key3 = "key3";
@Test
public void testSimple()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel1 = node1.createRelationshipTo( node2,
MyRelTypes.TEST );
Relationship rel2 = node1.createRelationshipTo( node2,
MyRelTypes.TEST );
rel1.delete();
newTransaction();
assertTrue( node1.getRelationships().iterator().hasNext() );
assertTrue( node2.getRelationships().iterator().hasNext() );
assertTrue( node1.getRelationships(
MyRelTypes.TEST ).iterator().hasNext() );
assertTrue( node2.getRelationships(
MyRelTypes.TEST ).iterator().hasNext() );
assertTrue( node1.getRelationships(
MyRelTypes.TEST, Direction.OUTGOING ).iterator().hasNext() );
assertTrue( node2.getRelationships(
MyRelTypes.TEST, Direction.INCOMING ).iterator().hasNext() );
}
@Test
public void testSimple2()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
for ( int i = 0; i < 3; i++ )
{
node1.createRelationshipTo( node2, MyRelTypes.TEST );
node1.createRelationshipTo( node2, MyRelTypes.TEST_TRAVERSAL );
node1.createRelationshipTo( node2, MyRelTypes.TEST2 );
}
allGetRelationshipMethods( node1, Direction.OUTGOING );
allGetRelationshipMethods( node2, Direction.INCOMING );
newTransaction();
allGetRelationshipMethods( node1, Direction.OUTGOING );
allGetRelationshipMethods( node2, Direction.INCOMING );
node1.getRelationships( MyRelTypes.TEST,
Direction.OUTGOING ).iterator().next().delete();
node1.getRelationships( MyRelTypes.TEST_TRAVERSAL,
Direction.OUTGOING ).iterator().next().delete();
node1.getRelationships( MyRelTypes.TEST2,
Direction.OUTGOING ).iterator().next().delete();
node1.createRelationshipTo( node2, MyRelTypes.TEST );
node1.createRelationshipTo( node2, MyRelTypes.TEST_TRAVERSAL );
node1.createRelationshipTo( node2, MyRelTypes.TEST2 );
allGetRelationshipMethods( node1, Direction.OUTGOING );
allGetRelationshipMethods( node2, Direction.INCOMING );
newTransaction();
allGetRelationshipMethods( node1, Direction.OUTGOING );
allGetRelationshipMethods( node2, Direction.INCOMING );
for ( Relationship rel : node1.getRelationships() )
{
rel.delete();
}
node1.delete();
node2.delete();
}
@Test
public void testSimple3()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
for ( int i = 0; i < 1; i++ )
{
node1.createRelationshipTo( node2, MyRelTypes.TEST );
node1.createRelationshipTo( node2, MyRelTypes.TEST_TRAVERSAL );
node1.createRelationshipTo( node2, MyRelTypes.TEST2 );
}
allGetRelationshipMethods2( node1, Direction.OUTGOING );
allGetRelationshipMethods2( node2, Direction.INCOMING );
newTransaction();
allGetRelationshipMethods2( node1, Direction.OUTGOING );
allGetRelationshipMethods2( node2, Direction.INCOMING );
node1.getRelationships( MyRelTypes.TEST,
Direction.OUTGOING ).iterator().next().delete();
node1.getRelationships( MyRelTypes.TEST_TRAVERSAL,
Direction.OUTGOING ).iterator().next().delete();
node1.getRelationships( MyRelTypes.TEST2,
Direction.OUTGOING ).iterator().next().delete();
node1.createRelationshipTo( node2, MyRelTypes.TEST );
node1.createRelationshipTo( node2, MyRelTypes.TEST_TRAVERSAL );
node1.createRelationshipTo( node2, MyRelTypes.TEST2 );
allGetRelationshipMethods2( node1, Direction.OUTGOING );
allGetRelationshipMethods2( node2, Direction.INCOMING );
newTransaction();
allGetRelationshipMethods2( node1, Direction.OUTGOING );
allGetRelationshipMethods2( node2, Direction.INCOMING );
for ( Relationship rel : node1.getRelationships() )
{
rel.delete();
}
node1.delete();
node2.delete();
}
@Test
public void testSimple4()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
for ( int i = 0; i < 2; i++ )
{
node1.createRelationshipTo( node2, MyRelTypes.TEST );
node1.createRelationshipTo( node2, MyRelTypes.TEST_TRAVERSAL );
node1.createRelationshipTo( node2, MyRelTypes.TEST2 );
}
allGetRelationshipMethods3( node1, Direction.OUTGOING );
allGetRelationshipMethods3( node2, Direction.INCOMING );
newTransaction();
allGetRelationshipMethods3( node1, Direction.OUTGOING );
allGetRelationshipMethods3( node2, Direction.INCOMING );
node1.getRelationships( MyRelTypes.TEST,
Direction.OUTGOING ).iterator().next().delete();
int count = 0;
for ( Relationship rel : node1.getRelationships( MyRelTypes.TEST_TRAVERSAL,
Direction.OUTGOING ) )
{
if ( count == 1 )
{
rel.delete();
}
count++;
}
node1.getRelationships( MyRelTypes.TEST2,
Direction.OUTGOING ).iterator().next().delete();
node1.createRelationshipTo( node2, MyRelTypes.TEST );
node1.createRelationshipTo( node2, MyRelTypes.TEST_TRAVERSAL );
node1.createRelationshipTo( node2, MyRelTypes.TEST2 );
allGetRelationshipMethods3( node1, Direction.OUTGOING );
allGetRelationshipMethods3( node2, Direction.INCOMING );
newTransaction();
allGetRelationshipMethods3( node1, Direction.OUTGOING );
allGetRelationshipMethods3( node2, Direction.INCOMING );
for ( Relationship rel : node1.getRelationships() )
{
rel.delete();
}
node1.delete();
node2.delete();
}
private void allGetRelationshipMethods( Node node, Direction dir )
{
countRelationships( 9, node.getRelationships() );
countRelationships( 9, node.getRelationships( dir ) );
countRelationships( 9, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST2, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 6, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST2 } ) );
countRelationships( 6, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 6, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST2, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 3, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST } ) );
countRelationships( 3, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST2 } ) );
countRelationships( 3, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 3, node.getRelationships( MyRelTypes.TEST, dir ) );
countRelationships( 3, node.getRelationships( MyRelTypes.TEST2, dir ) );
countRelationships( 3, node.getRelationships(
MyRelTypes.TEST_TRAVERSAL, dir ) );
}
private void allGetRelationshipMethods2( Node node, Direction dir )
{
countRelationships( 3, node.getRelationships() );
countRelationships( 3, node.getRelationships( dir ) );
countRelationships( 3, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST2, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 2, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST2 } ) );
countRelationships( 2, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 2, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST2, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 1, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST } ) );
countRelationships( 1, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST2 } ) );
countRelationships( 1, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 1, node.getRelationships( MyRelTypes.TEST, dir ) );
countRelationships( 1, node.getRelationships( MyRelTypes.TEST2, dir ) );
countRelationships( 1, node.getRelationships(
MyRelTypes.TEST_TRAVERSAL, dir ) );
}
private void allGetRelationshipMethods3( Node node, Direction dir )
{
countRelationships( 6, node.getRelationships() );
countRelationships( 6, node.getRelationships( dir ) );
countRelationships( 6, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST2, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 4, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST2 } ) );
countRelationships( 4, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 4, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST2, MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 2, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST } ) );
countRelationships( 2, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST2 } ) );
countRelationships( 2, node.getRelationships( new RelationshipType[] {
MyRelTypes.TEST_TRAVERSAL } ) );
countRelationships( 2, node.getRelationships( MyRelTypes.TEST, dir ) );
countRelationships( 2, node.getRelationships( MyRelTypes.TEST2, dir ) );
countRelationships( 2, node.getRelationships(
MyRelTypes.TEST_TRAVERSAL, dir ) );
}
private void countRelationships( int expectedCount,
Iterable<Relationship> rels )
{
int count = 0;
for ( Relationship r : rels )
{
count++;
}
assertEquals( expectedCount, count );
}
@Test
public void testRelationshipCreateAndDelete()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship relationship = node1.createRelationshipTo( node2,
MyRelTypes.TEST );
Relationship relArray1[] = getRelationshipArray( node1
.getRelationships() );
Relationship relArray2[] = getRelationshipArray( node2
.getRelationships() );
assertEquals( 1, relArray1.length );
assertEquals( relationship, relArray1[0] );
assertEquals( 1, relArray2.length );
assertEquals( relationship, relArray2[0] );
relArray1 = getRelationshipArray( node1
.getRelationships( MyRelTypes.TEST ) );
assertEquals( 1, relArray1.length );
assertEquals( relationship, relArray1[0] );
relArray2 = getRelationshipArray( node2
.getRelationships( MyRelTypes.TEST ) );
assertEquals( 1, relArray2.length );
assertEquals( relationship, relArray2[0] );
relArray1 = getRelationshipArray( node1.getRelationships(
MyRelTypes.TEST, Direction.OUTGOING ) );
assertEquals( 1, relArray1.length );
relArray2 = getRelationshipArray( node2.getRelationships(
MyRelTypes.TEST, Direction.INCOMING ) );
assertEquals( 1, relArray2.length );
relArray1 = getRelationshipArray( node1.getRelationships(
MyRelTypes.TEST, Direction.INCOMING ) );
assertEquals( 0, relArray1.length );
relArray2 = getRelationshipArray( node2.getRelationships(
MyRelTypes.TEST, Direction.OUTGOING ) );
assertEquals( 0, relArray2.length );
relationship.delete();
node2.delete();
node1.delete();
}
private Relationship[] getRelationshipArray(
Iterable<Relationship> relsIterable )
{
ArrayList<Relationship> relList = new ArrayList<Relationship>();
for ( Relationship rel : relsIterable )
{
relList.add( rel );
}
return relList.toArray( new Relationship[relList.size()] );
}
@Test
public void testDeleteWithRelationship()
{
// do some evil stuff
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship relationship = node1.createRelationshipTo( node2,
MyRelTypes.TEST );
node1.delete();
node2.delete();
try
{
getTransaction().success();
getTransaction().finish();
fail( "deleting node with relaitonship should not commit." );
}
catch ( Exception e )
{
// good
}
setTransaction( getGraphDb().beginTx() );
}
@Test
public void testDeletedRelationship()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship relationship = node1.createRelationshipTo( node2,
MyRelTypes.TEST );
relationship.delete();
try
{
relationship.setProperty( "key1", new Integer( 1 ) );
fail( "Adding property to deleted rel should throw exception." );
}
catch ( Exception e )
{ // good
}
node1.delete();
node2.delete();
}
@Test
public void testRelationshipAddProperty()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel1 = node1.createRelationshipTo( node2, MyRelTypes.TEST );
Relationship rel2 = node2.createRelationshipTo( node1, MyRelTypes.TEST );
try
{
rel1.setProperty( null, null );
fail( "Null argument should result in exception." );
}
catch ( IllegalArgumentException e )
{
}
Integer int1 = new Integer( 1 );
Integer int2 = new Integer( 2 );
String string1 = new String( "1" );
String string2 = new String( "2" );
// add property
rel1.setProperty( key1, int1 );
rel2.setProperty( key1, string1 );
rel1.setProperty( key2, string2 );
rel2.setProperty( key2, int2 );
assertTrue( rel1.hasProperty( key1 ) );
assertTrue( rel2.hasProperty( key1 ) );
assertTrue( rel1.hasProperty( key2 ) );
assertTrue( rel2.hasProperty( key2 ) );
assertTrue( !rel1.hasProperty( key3 ) );
assertTrue( !rel2.hasProperty( key3 ) );
assertEquals( int1, rel1.getProperty( key1 ) );
assertEquals( string1, rel2.getProperty( key1 ) );
assertEquals( string2, rel1.getProperty( key2 ) );
assertEquals( int2, rel2.getProperty( key2 ) );
getTransaction().failure();
}
@Test
public void testRelationshipRemoveProperty()
{
Integer int1 = new Integer( 1 );
Integer int2 = new Integer( 2 );
String string1 = new String( "1" );
String string2 = new String( "2" );
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel1 = node1.createRelationshipTo( node2, MyRelTypes.TEST );
Relationship rel2 = node2.createRelationshipTo( node1, MyRelTypes.TEST );
// verify that we can rely on PL to reomve non existing properties
try
{
if ( rel1.removeProperty( key1 ) != null )
{
fail( "Remove of non existing property should return null" );
}
}
catch ( NotFoundException e )
{
}
try
{
rel1.removeProperty( null );
fail( "Remove null property should throw exception." );
}
catch ( IllegalArgumentException e )
{
}
rel1.setProperty( key1, int1 );
rel2.setProperty( key1, string1 );
rel1.setProperty( key2, string2 );
rel2.setProperty( key2, int2 );
try
{
rel1.removeProperty( null );
fail( "Null argument should result in exception." );
}
catch ( IllegalArgumentException e )
{
}
// test remove property
assertEquals( int1, rel1.removeProperty( key1 ) );
assertEquals( string1, rel2.removeProperty( key1 ) );
// test remove of non exsisting property
try
{
if ( rel2.removeProperty( key1 ) != null )
{
fail( "Remove of non existing property should return null" );
}
}
catch ( NotFoundException e )
{
// have to set rollback only here
getTransaction().failure();
}
rel1.delete();
rel2.delete();
node1.delete();
node2.delete();
}
@Test
public void testRelationshipChangeProperty()
{
Integer int1 = new Integer( 1 );
Integer int2 = new Integer( 2 );
String string1 = new String( "1" );
String string2 = new String( "2" );
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel1 = node1.createRelationshipTo( node2, MyRelTypes.TEST );
Relationship rel2 = node2.createRelationshipTo( node1, MyRelTypes.TEST );
rel1.setProperty( key1, int1 );
rel2.setProperty( key1, string1 );
rel1.setProperty( key2, string2 );
rel2.setProperty( key2, int2 );
try
{
rel1.setProperty( null, null );
fail( "Null argument should result in exception." );
}
catch ( IllegalArgumentException e )
{
}
catch ( NotFoundException e )
{
fail( "wrong exception" );
}
// test type change of exsisting property
// cannot test this for now because of exceptions in PL
rel2.setProperty( key1, int1 );
rel1.delete();
rel2.delete();
node2.delete();
node1.delete();
}
@Test
public void testRelationshipChangeProperty2()
{
Integer int1 = new Integer( 1 );
Integer int2 = new Integer( 2 );
String string1 = new String( "1" );
String string2 = new String( "2" );
Boolean bool1 = new Boolean( true );
Boolean bool2 = new Boolean( false );
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel1 = node1.createRelationshipTo( node2, MyRelTypes.TEST );
rel1.setProperty( key1, int1 );
rel1.setProperty( key1, int2 );
assertEquals( int2, rel1.getProperty( key1 ) );
rel1.removeProperty( key1 );
rel1.setProperty( key1, string1 );
rel1.setProperty( key1, string2 );
assertEquals( string2, rel1.getProperty( key1 ) );
rel1.removeProperty( key1 );
rel1.setProperty( key1, bool1 );
rel1.setProperty( key1, bool2 );
assertEquals( bool2, rel1.getProperty( key1 ) );
rel1.removeProperty( key1 );
rel1.delete();
node2.delete();
node1.delete();
}
@Test
public void testRelGetProperties()
{
Integer int1 = new Integer( 1 );
Integer int2 = new Integer( 2 );
String string = new String( "3" );
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel1 = node1.createRelationshipTo( node2, MyRelTypes.TEST );
try
{
rel1.getProperty( key1 );
fail( "get non existing property din't throw exception" );
}
catch ( NotFoundException e )
{
}
try
{
rel1.getProperty( null );
fail( "get of null key din't throw exception" );
}
catch ( IllegalArgumentException e )
{
}
assertTrue( !rel1.hasProperty( key1 ) );
assertTrue( !rel1.hasProperty( null ) );
rel1.setProperty( key1, int1 );
rel1.setProperty( key2, int2 );
rel1.setProperty( key3, string );
assertTrue( rel1.hasProperty( key1 ) );
assertTrue( rel1.hasProperty( key2 ) );
assertTrue( rel1.hasProperty( key3 ) );
try
{
rel1.removeProperty( key3 );
}
catch ( NotFoundException e )
{
fail( "Remove of property failed." );
}
assertTrue( !rel1.hasProperty( key3 ) );
assertTrue( !rel1.hasProperty( null ) );
rel1.delete();
node2.delete();
node1.delete();
}
@Test
public void testDirectedRelationship()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel2 = node1.createRelationshipTo( node2, MyRelTypes.TEST );
Relationship rel3 = node2.createRelationshipTo( node1, MyRelTypes.TEST );
Node[] nodes = rel2.getNodes();
assertEquals( 2, nodes.length );
assertTrue( nodes[0].equals( node1 ) && nodes[1].equals( node2 ) );
nodes = rel3.getNodes();
assertEquals( 2, nodes.length );
assertTrue( nodes[0].equals( node2 ) && nodes[1].equals( node1 ) );
assertEquals( node1, rel2.getStartNode() );
assertEquals( node2, rel2.getEndNode() );
assertEquals( node2, rel3.getStartNode() );
assertEquals( node1, rel3.getEndNode() );
Relationship relArray[] = getRelationshipArray( node1.getRelationships(
MyRelTypes.TEST, Direction.OUTGOING ) );
assertEquals( 1, relArray.length );
assertEquals( rel2, relArray[0] );
relArray = getRelationshipArray( node1.getRelationships(
MyRelTypes.TEST, Direction.INCOMING ) );
assertEquals( 1, relArray.length );
assertEquals( rel3, relArray[0] );
relArray = getRelationshipArray( node2.getRelationships(
MyRelTypes.TEST, Direction.OUTGOING ) );
assertEquals( 1, relArray.length );
assertEquals( rel3, relArray[0] );
relArray = getRelationshipArray( node2.getRelationships(
MyRelTypes.TEST, Direction.INCOMING ) );
assertEquals( 1, relArray.length );
assertEquals( rel2, relArray[0] );
rel2.delete();
rel3.delete();
node1.delete();
node2.delete();
}
@Test
public void testRollbackDeleteRelationship()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel1 = node1.createRelationshipTo( node2, MyRelTypes.TEST );
newTransaction();
node1.delete();
rel1.delete();
getTransaction().failure();
getTransaction().finish();
setTransaction( getGraphDb().beginTx() );
node1.delete();
node2.delete();
rel1.delete();
}
@Test
public void testCreateRelationshipWithCommitts()// throws NotFoundException
{
Node n1 = getGraphDb().createNode();
newTransaction();
clearCache();
n1 = getGraphDb().getNodeById( (int) n1.getId() );
Node n2 = getGraphDb().createNode();
n1.createRelationshipTo( n2, MyRelTypes.TEST );
newTransaction();
Relationship[] relArray = getRelationshipArray( n1.getRelationships() );
assertEquals( 1, relArray.length );
relArray = getRelationshipArray( n1.getRelationships() );
relArray[0].delete();
n1.delete();
n2.delete();
}
@Test
public void testAddPropertyThenDelete()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel = node1.createRelationshipTo( node2, MyRelTypes.TEST );
rel.setProperty( "test", "test" );
newTransaction();
rel.setProperty( "test2", "test2" );
rel.delete();
node1.delete();
node2.delete();
newTransaction();
}
@Test
public void testRelationshipIsType()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel = node1.createRelationshipTo( node2, MyRelTypes.TEST );
assertTrue( rel.isType( MyRelTypes.TEST ) );
assertTrue( rel.isType( new RelationshipType()
{
public String name()
{
return MyRelTypes.TEST.name();
}
} ) );
assertFalse( rel.isType( MyRelTypes.TEST_TRAVERSAL ) );
rel.delete();
node1.delete();
node2.delete();
}
@Test
public void testChangeProperty()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel = node1.createRelationshipTo( node2, MyRelTypes.TEST );
rel.setProperty( "test", "test1" );
newTransaction();
rel.setProperty( "test", "test2" );
rel.removeProperty( "test" );
rel.setProperty( "test", "test3" );
assertEquals( "test3", rel.getProperty( "test" ) );
rel.removeProperty( "test" );
rel.setProperty( "test", "test4" );
newTransaction();
assertEquals( "test4", rel.getProperty( "test" ) );
}
@Test
public void testChangeProperty2()
{
Node node1 = getGraphDb().createNode();
Node node2 = getGraphDb().createNode();
Relationship rel = node1.createRelationshipTo( node2, MyRelTypes.TEST );
rel.setProperty( "test", "test1" );
newTransaction();
rel.removeProperty( "test" );
rel.setProperty( "test", "test3" );
assertEquals( "test3", rel.getProperty( "test" ) );
newTransaction();
assertEquals( "test3", rel.getProperty( "test" ) );
rel.removeProperty( "test" );
rel.setProperty( "test", "test4" );
newTransaction();
assertEquals( "test4", rel.getProperty( "test" ) );
}
}