    1   /**
    2    * Licensed to Neo Technology under one or more contributor
    3    * license agreements. See the NOTICE file distributed with
    4    * this work for additional information regarding copyright
    5    * ownership. Neo Technology licenses this file to you under
    6    * the Apache License, Version 2.0 (the "License"); you may
    7    * not use this file except in compliance with the License.
    8    * You may obtain a copy of the License at
    9    *
    10   * http://www.apache.org/licenses/LICENSE-2.0
    11   *
    12   * Unless required by applicable law or agreed to in writing,
    13   * software distributed under the License is distributed on an
    14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    15   * KIND, either express or implied. See the License for the
    16   * specific language governing permissions and limitations
    17   * under the License.
    18   */
    19  package org.neo4j.examples;
    20
    21  import org.junit.After;
    22  import org.junit.Before;
    23  import org.junit.Test;
    24  import org.neo4j.graphdb.GraphDatabaseService;
    25  import org.neo4j.graphdb.Node;
    26  import org.neo4j.graphdb.Transaction;
    27  import org.neo4j.kernel.EmbeddedGraphDatabase;
    28
    29  import java.io.File;
    30
    31  import static org.hamcrest.Matchers.greaterThan;
    32  import static org.hamcrest.Matchers.is;
    33  import static org.junit.Assert.assertThat;
    34
    35  /**
    36   * An example of unit testing with Neo4j.
    37   */
    38  public class Neo4jBasicTest
    39  {
    40      /**
    41       * Base directory for temporary database.
    42       */
    43      protected File testDirectory = new File( "target/var" );
    44
    45      /**
    46       * Full path to the temporary database.
    47       */
    48      protected File testDatabasePath = new File( testDirectory, "testdb" );
    49      protected GraphDatabaseService graphDb;
    50
    51
    52      /**
    53       * Create temporary database for each unit test.
    54       * <p/>
    55       * This will delete any existing database prior to creating a new one.
    56       */
    57      @Before
    58      public void prepareTestDatabase()
    59      {
    60          // START SNIPPET: beforeTest
    61          deleteFileOrDirectory( testDatabasePath );
    62          graphDb = new EmbeddedGraphDatabase( testDatabasePath.getAbsolutePath() );
    63          // END SNIPPET: beforeTest
    64      }
    65
    66      /**
    67       * Shutdown the database.
    68       */
    69      @After
    70      public void destroyTestDatabase()
    71      {
    72          // START SNIPPET: afterTest
    73          graphDb.shutdown();
    74          // END SNIPPET: afterTest
    75      }
    76
    77      protected void deleteFileOrDirectory( File path )
    78      {
    79          if ( path.exists() )
    80          {
    81              if ( path.isDirectory() )
    82              {
    83                  for ( File child : path.listFiles() )
    84                  {
    85                      deleteFileOrDirectory( child );
    86                  }
    87              }
    88              path.delete();
    89          }
    90      }
    91
    92
    93      @Test
    94      public void shouldCreateNode()
    95      {
    96          // START SNIPPET: unitTest
    97          Transaction tx = graphDb.beginTx();
    98
    99          Node n = null;
    100         try
    101         {
    102             n = graphDb.createNode();
    103             n.setProperty( "name", "Nancy" );
    104             tx.success();
    105         } catch ( Exception e )
    106         {
    107             tx.failure();
    108         } finally
    109         {
    110             tx.finish();
    111         }
    112
    113         // The node should have an id greater than 0, which is the id of the reference node.
    114         assertThat( n.getId(), is( greaterThan( 0l ) ) );
    115
    116         // Retrieve a node by using the id of the created node. The id's and property should match.
    117         Node foundNode = graphDb.getNodeById( n.getId() );
    118         assertThat( foundNode.getId(), is( n.getId() ) );
    119         assertThat( (String) foundNode.getProperty( "name" ), is( "Nancy" ) );
    120
    121         // END SNIPPET: unitTest
    122     }
    123
    124 }