package org.ff4j.neo4j; /* * #%L * ff4j-store-neo4j * %% * Copyright (C) 2013 - 2016 FF4J * %% * 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. * #L% */ import org.ff4j.core.Feature; import org.ff4j.core.FlippingStrategy; import org.ff4j.exception.GroupNotFoundException; import org.ff4j.neo4j.store.FeatureStoreNeo4J; import org.ff4j.property.Property; import org.ff4j.property.PropertyString; import org.ff4j.strategy.PonderationStrategy; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.test.TestGraphDatabaseFactory; import static org.ff4j.neo4j.FF4jNeo4jConstants.*; public class FeatureStoreNeo4jLimitTest { /** DataBase instance. */ protected static GraphDatabaseService graphDb; /** store. **/ protected FeatureStoreNeo4J testedStore = new FeatureStoreNeo4J(graphDb); /** * Create temporary database for each unit test. */ @BeforeClass public static void prepareTestDatabase() { // Embedded DATABASE graphDb = new TestGraphDatabaseFactory().newImpermanentDatabaseBuilder() .setConfig(GraphDatabaseSettings.string_block_size, "300") .setConfig(GraphDatabaseSettings.array_block_size, "300") .newGraphDatabase(); // Init Schema in a first Transaction try (Transaction tx = graphDb.beginTx() ) { graphDb.schema().constraintFor(FF4jNeo4jLabels.FF4J_FEATURE)// .assertPropertyIsUnique(NODEFEATURE_ATT_UID)// .create(); graphDb.schema().constraintFor(FF4jNeo4jLabels.FF4J_FEATURE_GROUP)// .assertPropertyIsUnique(NODEGROUP_ATT_NAME )// .create(); // An index is automatically place // graphDb.schema().indexFor(FF4jNeo4jLabels.FF4J_FEATURE).on(NODEFEATURE_ATT_UID).create(); tx.success(); } } @Test public void testDefaultInit() { Assert.assertNotNull(new FeatureStoreNeo4J()); } @Test public void testDeleteLastElement() { try (Transaction tx= graphDb.beginTx() ) { graphDb.execute("CREATE " + " (g0:FF4J_FEATURE_GROUP { name:'g0' }),\n" + " (f1:FF4J_FEATURE { uid:'f1', enable:false, description:'second', roles:['USER'] }),\n" + " (f1)-[:MEMBER_OF]->(g0);"); tx.success(); } // Remove last testedStore.delete("f1"); Assert.assertFalse(testedStore.existGroup("g0")); } @Test public void testChangeGroup() { try (Transaction tx= graphDb.beginTx() ) { graphDb.execute("CREATE " + " (h0:FF4J_FEATURE_GROUP { name:'h0' }),\n" + " (h1:FF4J_FEATURE { uid:'h1', enable:false, description:'second', roles:['USER'] }),\n" + " (h1)-[:MEMBER_OF]->(h0);"); tx.success(); } Feature f1 = testedStore.read("h1"); Property<?> newP = new PropertyString("ppp", "vvv"); newP.setDescription("a description"); f1.addProperty(newP); FlippingStrategy fs = new PonderationStrategy(0.1); fs.getInitParams().put("p1", "v1"); fs.getInitParams().put("p2","v2"); f1.setFlippingStrategy(fs); f1.setGroup("g2"); testedStore.update(f1); Assert.assertEquals("g2", testedStore.read("h1").getGroup()); f1.getFlippingStrategy().getInitParams().put("p3", "v3"); testedStore.update(f1); testedStore.setGraphDb(testedStore.getGraphDb()); } @Test(expected = GroupNotFoundException.class) public void testRemoveFromInvalidGroup() { try (Transaction tx= graphDb.beginTx() ) { graphDb.execute("CREATE (x1:FF4J_FEATURE { uid:'x1', enable:false });"); tx.success(); } testedStore.removeFromGroup("x1", "invalidGroup"); } @AfterClass public static void destroyTestDatabase() { graphDb.shutdown(); } }