diff --git a/tests/drivers/.gitignore b/tests/drivers/.gitignore index af3a656dd..a64611924 100644 --- a/tests/drivers/.gitignore +++ b/tests/drivers/.gitignore @@ -11,8 +11,11 @@ java/**/*.class java/**/*.jar # javascript driver -javascript/**/node_modules -javascript/**/package-lock.json +javascript/websockify-js/ + +# node driver +node/**/node_modules +node/**/package-lock.json # python driver python/ve3 diff --git a/tests/drivers/csharp/v4_1/Basic/Program.cs b/tests/drivers/csharp/v4_1/Basic/Program.cs deleted file mode 100644 index 3290006b9..000000000 --- a/tests/drivers/csharp/v4_1/Basic/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Linq; -using Neo4j.Driver; - -public class Basic { - public static void Main(string[] args) { - using(var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.None, (ConfigBuilder builder) => builder.WithEncryptionLevel(EncryptionLevel.None))) - using(var session = driver.Session()) - { - session.Run("MATCH (n) DETACH DELETE n").Consume(); - session.Run("CREATE (alice:Person {name: \"Alice\", age: 22})").Consume(); - var result = session.Run("MATCH (n) RETURN n").First(); - var alice = (INode) result["n"]; - Console.WriteLine(alice["name"]); - Console.WriteLine(string.Join(", ", alice.Labels)); - Console.WriteLine(alice["age"]); - } - Console.WriteLine("All ok!"); - } -} diff --git a/tests/drivers/csharp/v4_1/Basic/Basic.csproj b/tests/drivers/csharp/v4_1/DocsHowToQuery/DocsHowToQuery.csproj similarity index 100% rename from tests/drivers/csharp/v4_1/Basic/Basic.csproj rename to tests/drivers/csharp/v4_1/DocsHowToQuery/DocsHowToQuery.csproj diff --git a/tests/drivers/csharp/v4_1/DocsHowToQuery/Program.cs b/tests/drivers/csharp/v4_1/DocsHowToQuery/Program.cs new file mode 100644 index 000000000..ef09a7f09 --- /dev/null +++ b/tests/drivers/csharp/v4_1/DocsHowToQuery/Program.cs @@ -0,0 +1,36 @@ +using System; +using System.Linq; +using Neo4j.Driver; + +public class Basic { + public static void Main(string[] args) { + using(var driver = GraphDatabase.Driver( + "bolt://localhost:7687", AuthTokens.None, + (ConfigBuilder builder) => builder.WithEncryptionLevel(EncryptionLevel.None))) + using(var session = driver.Session()) + { + session.Run("MATCH (n) DETACH DELETE n;").Consume(); + Console.WriteLine("Database cleared."); + + session.Run("CREATE (alice:Person {name: \"Alice\", age: 22});").Consume(); + Console.WriteLine("Record created."); + + var node = (INode) session.Run("MATCH (n) RETURN n;").First()["n"]; + Console.WriteLine("Record matched."); + + var label = string.Join("", node.Labels); + var name = node["name"]; + var age = (long) node["age"]; + + if (!label.Equals("Person") || !name.Equals("Alice") || !age.Equals(22)) { + Console.WriteLine("Data doesn't match!"); + System.Environment.Exit(1); + } + + Console.WriteLine("Label: " + label); + Console.WriteLine("name: " + name); + Console.WriteLine("age: " + age); + } + Console.WriteLine("All ok!"); + } +} diff --git a/tests/drivers/csharp/v4_1/run.sh b/tests/drivers/csharp/v4_1/run.sh index d2c72f210..1d8fa6f76 100755 --- a/tests/drivers/csharp/v4_1/run.sh +++ b/tests/drivers/csharp/v4_1/run.sh @@ -12,9 +12,9 @@ for i in dotnet; do done for i in *; do - if [ ! -d $i ]; then + if [ ! -d $i ]; then continue - fi + fi pushd $i dotnet publish -c release --self-contained --runtime linux-x64 --framework netcoreapp2.1 -o build/ ./build/$i diff --git a/tests/drivers/go/v4/basic.go b/tests/drivers/go/v4/basic.go deleted file mode 100644 index dffd8eba8..000000000 --- a/tests/drivers/go/v4/basic.go +++ /dev/null @@ -1,67 +0,0 @@ -package main - -import "github.com/neo4j/neo4j-go-driver/neo4j" -import "fmt" -import "log" - -func handle_error(err error) { - log.Fatal("Error occured: %s", err) -} - -func main() { - configForNeo4j40 := func(conf *neo4j.Config) { conf.Encrypted = false } - - driver, err := neo4j.NewDriver("bolt://localhost:7687", neo4j.BasicAuth("", "", ""), configForNeo4j40) - if err != nil { - log.Fatal("An error occurred opening conn: %s", err) - } - - defer driver.Close() - - sessionConfig := neo4j.SessionConfig{AccessMode: neo4j.AccessModeWrite} - session, err := driver.NewSession(sessionConfig) - if err != nil { - log.Fatal("An error occured while creating a session: %s", err) - } - - defer session.Close() - - result, err := session.Run("MATCH (n) DETACH DELETE n", map[string]interface{}{}) - if err != nil { - handle_error(err) - } - _, err = result.Consume() - if err != nil { - handle_error(err) - } - - result, err = session.Run(`CREATE (alice:Person {name: "Alice", age: 22})`, map[string]interface{}{}) - if err != nil { - handle_error(err) - } - _, err = result.Consume() - if err != nil { - handle_error(err) - } - - result, err = session.Run("MATCH (n) RETURN n", map[string]interface{}{}) - if err != nil { - handle_error(err) - } - - if !result.Next() { - log.Fatal("Missing result") - } - - node_record, has_column := result.Record().Get("n") - if !has_column { - log.Fatal("Wrong result returned") - } - node_value := node_record.(neo4j.Node) - - fmt.Println(node_value.Props()["name"]) - fmt.Println(node_value.Labels()) - fmt.Println(node_value.Props()["age"]) - - fmt.Println("All ok!") -} diff --git a/tests/drivers/go/v4/docs_how_to_query.go b/tests/drivers/go/v4/docs_how_to_query.go new file mode 100644 index 000000000..0eb36f905 --- /dev/null +++ b/tests/drivers/go/v4/docs_how_to_query.go @@ -0,0 +1,69 @@ +package main + +import "github.com/neo4j/neo4j-go-driver/neo4j" +import "fmt" +import "log" + +func handle_if_error(err error) { + if err != nil { + log.Fatal("Error occured: %s", err) + } +} + +func main() { + configForNeo4j40 := func(conf *neo4j.Config) { conf.Encrypted = false } + driver, err := neo4j.NewDriver("bolt://localhost:7687", + neo4j.BasicAuth("", "", ""), + configForNeo4j40) + if err != nil { + log.Fatal("An error occurred opening conn: %s", err) + } + defer driver.Close() + + sessionConfig := neo4j.SessionConfig{AccessMode: neo4j.AccessModeWrite} + session, err := driver.NewSession(sessionConfig) + if err != nil { + log.Fatal("An error occured while creating a session: %s", err) + } + defer session.Close() + + result, err := session.Run("MATCH (n) DETACH DELETE n;", + map[string]interface{}{}) + handle_if_error(err) + _, err = result.Consume() + handle_if_error(err) + fmt.Println("Database cleared.") + + result, err = session.Run(`CREATE (alice:Person {name: "Alice", age: 22});`, + map[string]interface{}{}) + handle_if_error(err) + _, err = result.Consume() + handle_if_error(err) + fmt.Println("Record created.") + + result, err = session.Run("MATCH (n) RETURN n;", map[string]interface{}{}) + handle_if_error(err) + if !result.Next() { + log.Fatal("Missing result.") + } + node_record, has_column := result.Record().Get("n") + if !has_column { + log.Fatal("Wrong result returned.") + } + node_value := node_record.(neo4j.Node) + fmt.Println("Record matched.") + + label := node_value.Labels()[0] + name := node_value.Props()["name"] + age := node_value.Props()["age"] + + if label != "Person" && name != "Alice" && age != 22 { + log.Fatal("Data doesn't match.") + } + + fmt.Println("Label", label) + fmt.Println("name", name) + fmt.Println("age", age) + + fmt.Println("All ok!") +} diff --git a/tests/drivers/go/v4/run.sh b/tests/drivers/go/v4/run.sh index 82dbe1872..d1145951d 100755 --- a/tests/drivers/go/v4/run.sh +++ b/tests/drivers/go/v4/run.sh @@ -10,5 +10,5 @@ done go get github.com/neo4j/neo4j-go-driver/neo4j -go run basic.go +go run docs_how_to_query.go go run transactions.go diff --git a/tests/drivers/java/v4_1/Basic.java b/tests/drivers/java/v4_1/Basic.java deleted file mode 100644 index 54089863e..000000000 --- a/tests/drivers/java/v4_1/Basic.java +++ /dev/null @@ -1,38 +0,0 @@ -import org.neo4j.driver.*; -import org.neo4j.driver.types.*; -import static org.neo4j.driver.Values.parameters; -import java.util.*; - -public class Basic { - public static void main(String[] args) { - Config config = Config.builder().withoutEncryption().build(); - Driver driver = GraphDatabase.driver( "bolt://localhost:7687", AuthTokens.basic( "neo4j", "1234" ), config ); - - try ( Session session = driver.session() ) { - Result rs1 = session.run( "MATCH (n) DETACH DELETE n" ); - System.out.println( "Database cleared." ); - - Result rs2 = session.run( "CREATE (alice: Person {name: 'Alice', age: 22})" ); - System.out.println( "Record created." ); - - Result rs3 = session.run( "MATCH (n) RETURN n" ); - System.out.println( "Record matched." ); - - List records = rs3.list(); - Record record = records.get( 0 ); - Node node = record.get( "n" ).asNode(); - if ( !node.get("name").asString().equals( "Alice" ) || node.get("age").asInt() != 22 ) { - System.out.println( "Data doesn't match!" ); - System.exit( 1 ); - } - - System.out.println( "All ok!" ); - } - catch ( Exception e ) { - System.out.println( e ); - System.exit( 1 ); - } - - driver.close(); - } -} diff --git a/tests/drivers/java/v4_1/DocsHowToQuery.java b/tests/drivers/java/v4_1/DocsHowToQuery.java new file mode 100644 index 000000000..f6a684731 --- /dev/null +++ b/tests/drivers/java/v4_1/DocsHowToQuery.java @@ -0,0 +1,40 @@ +import java.util.*; +import org.neo4j.driver.*; + +public class DocsHowToQuery { + public static void main(String[] args) { + var config = Config.builder().withoutEncryption().build(); + var driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("", ""), config); + + try (var session = driver.session()) { + session.run("MATCH (n) DETACH DELETE n;"); + System.out.println("Database cleared."); + + session.run("CREATE (alice:Person {name: 'Alice', age: 22});"); + System.out.println("Record created."); + + var node = session.run("MATCH (n) RETURN n;").list().get(0).get("n").asNode(); + System.out.println("Record matched."); + + var label = node.labels().iterator().next(); + var name = node.get("name").asString(); + var age = node.get("age").asInt(); + + if (!label.equals("Person") || !name.equals("Alice") || age != 22) { + System.out.println("Data doesn't match!"); + System.exit(1); + } + + System.out.println("Label: " + label); + System.out.println("name: " + name); + System.out.println("age: " + age); + + System.out.println("All ok!"); + } catch (Exception e) { + System.out.println(e); + System.exit(1); + } + + driver.close(); + } +} diff --git a/tests/drivers/java/v4_1/run.sh b/tests/drivers/java/v4_1/run.sh index f1a881051..a8e70f4e4 100755 --- a/tests/drivers/java/v4_1/run.sh +++ b/tests/drivers/java/v4_1/run.sh @@ -22,11 +22,11 @@ if [ ! -f $REACTIVE_STREAM_DEP ]; then wget -nv https://repo1.maven.org/maven2/org/reactivestreams/reactive-streams/1.0.3/reactive-streams-1.0.3.jar -O $REACTIVE_STREAM_DEP || exit 1 fi -javac -classpath .:$DRIVER:$REACTIVE_STREAM_DEP Basic.java -java -classpath .:$DRIVER:$REACTIVE_STREAM_DEP Basic +javac -classpath .:$DRIVER:$REACTIVE_STREAM_DEP DocsHowToQuery.java +java -classpath .:$DRIVER:$REACTIVE_STREAM_DEP DocsHowToQuery javac -classpath .:$DRIVER:$REACTIVE_STREAM_DEP MaxQueryLength.java java -classpath .:$DRIVER:$REACTIVE_STREAM_DEP MaxQueryLength javac -classpath .:$DRIVER:$REACTIVE_STREAM_DEP Transactions.java -java -classpath .:$DRIVER:$REACTIVE_STREAM_DEP Transactions +java -classpath .:$DRIVER:$REACTIVE_STREAM_DEP Transactions diff --git a/tests/drivers/javascript/README.md b/tests/drivers/javascript/README.md new file mode 100644 index 000000000..05153ac50 --- /dev/null +++ b/tests/drivers/javascript/README.md @@ -0,0 +1,11 @@ +# JavaScript Example + +This example is publicly available [here]( +https://docs.memgraph.com/memgraph/how-to-guides-overview/query-memgraph-programmatically#javascript-example). +It's NOT automatically executed within the CI system because setting up the +environment to executed and test JavaScript from HTML is too much effort for +too little gain. It's possible to open HTML and test the functionality +manually. + +IMPORTANT: `setup.sh` + `docs_how_to_query.html` and relevant docs page have +to be in sync. diff --git a/tests/drivers/javascript/docs_how_to_query.html b/tests/drivers/javascript/docs_how_to_query.html new file mode 100644 index 000000000..af02da5f7 --- /dev/null +++ b/tests/drivers/javascript/docs_how_to_query.html @@ -0,0 +1,50 @@ + + + + + Javascript Browser Example | Memgraph + + + +

Check console for Cypher query outputs...

+ + + diff --git a/tests/drivers/javascript/setup.sh b/tests/drivers/javascript/setup.sh new file mode 100755 index 000000000..3ab082290 --- /dev/null +++ b/tests/drivers/javascript/setup.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +if [ ! -d "websockify-js" ]; then + git clone https://github.com/novnc/websockify-js.git +fi +cd websockify-js/websockify +npm install +./websockify.js 9999 :7687 diff --git a/tests/drivers/javascript/v1/basic.js b/tests/drivers/node/v1/basic.js similarity index 100% rename from tests/drivers/javascript/v1/basic.js rename to tests/drivers/node/v1/basic.js diff --git a/tests/drivers/javascript/v1/max_query_length.js b/tests/drivers/node/v1/max_query_length.js similarity index 100% rename from tests/drivers/javascript/v1/max_query_length.js rename to tests/drivers/node/v1/max_query_length.js diff --git a/tests/drivers/javascript/v1/run.sh b/tests/drivers/node/v1/run.sh similarity index 100% rename from tests/drivers/javascript/v1/run.sh rename to tests/drivers/node/v1/run.sh diff --git a/tests/drivers/javascript/v4_1/basic.js b/tests/drivers/node/v4_1/docs_how_to_query.js similarity index 58% rename from tests/drivers/javascript/v4_1/basic.js rename to tests/drivers/node/v4_1/docs_how_to_query.js index e9995a216..0e9f5f7e7 100644 --- a/tests/drivers/javascript/v4_1/basic.js +++ b/tests/drivers/node/v4_1/docs_how_to_query.js @@ -1,6 +1,6 @@ var neo4j = require('neo4j-driver'); var driver = neo4j.driver("bolt://localhost:7687", - neo4j.auth.basic("neo4j", "1234"), + neo4j.auth.basic("", ""), { encrypted: 'ENCRYPTION_OFF' }); var session = driver.session(); @@ -18,17 +18,23 @@ function run_query(query, callback) { }); } -run_query("MATCH (n) DETACH DELETE n", function (result) { +run_query("MATCH (n) DETACH DELETE n;", function (result) { console.log("Database cleared."); - run_query("CREATE (alice: Person {name: 'Alice', age: 22})", function (result) { + run_query("CREATE (alice:Person {name: 'Alice', age: 22});", function (result) { console.log("Record created."); run_query("MATCH (n) RETURN n", function (result) { console.log("Record matched."); - var alice = result.records[0].get("n"); - if(alice.labels[0] != "Person" || alice.properties["name"] != "Alice"){ + const alice = result.records[0].get("n"); + const label = alice.labels[0]; + const name = alice.properties["name"]; + const age = alice.properties["age"]; + if(label != "Person" || name != "Alice" || age != 22){ console.log("Data doesn't match!"); die(); } + console.log("Label: " + label); + console.log("name: " + name); + console.log("age: " + age); console.log("All ok!"); driver.close(); }); diff --git a/tests/drivers/javascript/v4_1/max_query_length.js b/tests/drivers/node/v4_1/max_query_length.js similarity index 100% rename from tests/drivers/javascript/v4_1/max_query_length.js rename to tests/drivers/node/v4_1/max_query_length.js diff --git a/tests/drivers/javascript/v4_1/run.sh b/tests/drivers/node/v4_1/run.sh similarity index 92% rename from tests/drivers/javascript/v4_1/run.sh rename to tests/drivers/node/v4_1/run.sh index 1fba71dac..e4178dcbe 100755 --- a/tests/drivers/javascript/v4_1/run.sh +++ b/tests/drivers/node/v4_1/run.sh @@ -13,5 +13,5 @@ if [ ! -d node_modules ]; then npm install neo4j-driver fi -node basic.js +node docs_how_to_query.js node max_query_length.js diff --git a/tests/drivers/python/v4_1/basic.py b/tests/drivers/python/v4_1/basic.py deleted file mode 100644 index fb02f79e4..000000000 --- a/tests/drivers/python/v4_1/basic.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -from neo4j import GraphDatabase, basic_auth - -driver = GraphDatabase.driver("bolt://localhost:7687", - auth=basic_auth("", ""), - encrypted=False) -session = driver.session() - -session.run('MATCH (n) DETACH DELETE n').consume() -session.run('CREATE (alice:Person {name: "Alice", age: 22})').consume() - -returned_result_set = session.run('MATCH (n) RETURN n') -returned_result = returned_result_set.single() -alice = returned_result["n"] - -print(alice['name']) -print(set(alice.labels)) -print(alice['age']) - -session.close() -driver.close() - -print("All ok!") diff --git a/tests/drivers/python/v4_1/docs_how_to_query.py b/tests/drivers/python/v4_1/docs_how_to_query.py new file mode 100644 index 000000000..7fd0a440a --- /dev/null +++ b/tests/drivers/python/v4_1/docs_how_to_query.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import sys +from neo4j import GraphDatabase, basic_auth + +driver = GraphDatabase.driver('bolt://localhost:7687', + auth=basic_auth('', ''), + encrypted=False) +session = driver.session() + +session.run('MATCH (n) DETACH DELETE n').consume() +print('Database cleared.') + +session.run('CREATE (alice:Person {name: "Alice", age: 22})').consume() +print('Record created.') + +node = session.run('MATCH (n) RETURN n').single()['n'] +print('Record matched.') + +label = list(node.labels)[0] +name = node['name'] +age = node['age'] + +if label != 'Person' or name != 'Alice' or age != 22: + print('Data does not match') + sys.exit(1) + +print('Label: %s' % label) +print('name: %s' % name) +print('age: %s' % age) + +session.close() +driver.close() + +print('All ok!') diff --git a/tests/drivers/python/v4_1/run.sh b/tests/drivers/python/v4_1/run.sh index 354f9ef39..6fc26d33d 100755 --- a/tests/drivers/python/v4_1/run.sh +++ b/tests/drivers/python/v4_1/run.sh @@ -28,6 +28,6 @@ fi source ve3/bin/activate # execute test -python3 basic.py || exit 1 +python3 docs_how_to_query.py || exit 1 python3 max_query_length.py || exit 1 python3 transactions.py || exit 1