From ca6ebef72ca9e310ca0ea64100e1ef76dae06a88 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Wed, 5 Nov 2014 16:03:44 +0100 Subject: [PATCH] added test cases --- js/common/tests/shell-statement.js | 184 +++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) diff --git a/js/common/tests/shell-statement.js b/js/common/tests/shell-statement.js index c0ed8c7774..b1e2d0ee07 100644 --- a/js/common/tests/shell-statement.js +++ b/js/common/tests/shell-statement.js @@ -130,6 +130,7 @@ function StatementSuite () { try { st.parse(); + fail(); } catch (e) { assertEqual(ERRORS.ERROR_QUERY_PARSE.code, e.errorNum); @@ -146,6 +147,7 @@ function StatementSuite () { assertEqual([ "users" ], result.collections); assertEqual([ ], result.bindVars); + assertTrue(result.hasOwnProperty("ast")); }, //////////////////////////////////////////////////////////////////////////////// @@ -158,6 +160,7 @@ function StatementSuite () { assertEqual([ "friends", "users" ], result.collections.sort()); assertEqual([ ], result.bindVars); + assertTrue(result.hasOwnProperty("ast")); }, //////////////////////////////////////////////////////////////////////////////// @@ -170,6 +173,7 @@ function StatementSuite () { assertEqual([ ], result.collections); assertEqual([ "@users", "name" ], result.bindVars.sort()); + assertTrue(result.hasOwnProperty("ast")); }, //////////////////////////////////////////////////////////////////////////////// @@ -182,6 +186,185 @@ function StatementSuite () { assertEqual([ "friends" ], result.collections); assertEqual([ "@users", "name" ], result.bindVars.sort()); + assertTrue(result.hasOwnProperty("ast")); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test explain method +//////////////////////////////////////////////////////////////////////////////// + + testExplainError : function () { + var st = new ArangoStatement(db, { query : "for u in" }); + + try { + st.explain(); + fail(); + } + catch (e) { + assertEqual(ERRORS.ERROR_QUERY_PARSE.code, e.errorNum); + } + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test explain method +//////////////////////////////////////////////////////////////////////////////// + + testExplainOk : function () { + var st = new ArangoStatement(db, { query : "FOR i IN 1..10 RETURN i" }); + var result = st.explain(); + + assertEqual([ ], result.warnings); + assertTrue(result.hasOwnProperty("plan")); + assertFalse(result.hasOwnProperty("plans")); + + var plan = result.plan; + assertTrue(plan.hasOwnProperty("estimatedCost")); + assertTrue(plan.hasOwnProperty("rules")); + assertEqual([ ], plan.rules); + assertTrue(plan.hasOwnProperty("nodes")); + assertTrue(plan.hasOwnProperty("collections")); + assertEqual([ ], plan.collections); + assertTrue(plan.hasOwnProperty("variables")); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test explain method +//////////////////////////////////////////////////////////////////////////////// + + testExplainAllPlans : function () { + var st = new ArangoStatement(db, { query : "FOR i IN 1..10 RETURN i" }); + var result = st.explain({ allPlans: true }); + + assertEqual([ ], result.warnings); + assertFalse(result.hasOwnProperty("plan")); + assertTrue(result.hasOwnProperty("plans")); + + assertEqual(1, result.plans.length); + var plan = result.plans[0]; + assertTrue(plan.hasOwnProperty("estimatedCost")); + assertTrue(plan.hasOwnProperty("rules")); + assertEqual([ ], plan.rules); + assertTrue(plan.hasOwnProperty("nodes")); + assertTrue(plan.hasOwnProperty("collections")); + assertEqual([ ], plan.collections); + assertTrue(plan.hasOwnProperty("variables")); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test explain method, bind variables +//////////////////////////////////////////////////////////////////////////////// + + testExplainBindMissing : function () { + var st = new ArangoStatement(db, { query : "FOR i IN @@list FILTER i == @value RETURN i" }); + try { + st.explain(); + } + catch (e) { + assertEqual(ERRORS.ERROR_QUERY_BIND_PARAMETER_MISSING.code, e.errorNum); + } + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test explain method, bind variables +//////////////////////////////////////////////////////////////////////////////// + + testExplainBindInvalidType : function () { + var st = new ArangoStatement(db, { query : "FOR i IN @@list RETURN i" }); + st.bind("@list", [ 1, 2, 3 ]); + + try { + st.explain(); + } + catch (e) { + assertEqual(ERRORS.ERROR_QUERY_BIND_PARAMETER_TYPE.code, e.errorNum); + } + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test explain method, bind variables +//////////////////////////////////////////////////////////////////////////////// + + testExplainBindInvalid : function () { + var st = new ArangoStatement(db, { query : "FOR i IN @list FILTER i == @value RETURN i" }); + st.bind("list", [ 1, 2, 3 ]); + st.bind("value", 3); + st.bind("foo", "bar"); + + try { + st.explain(); + } + catch (e) { + assertEqual(ERRORS.ERROR_QUERY_BIND_PARAMETER_UNDECLARED.code, e.errorNum); + } + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test bind method, bind variables +//////////////////////////////////////////////////////////////////////////////// + + testExplainBind : function () { + var st = new ArangoStatement(db, { query : "FOR i IN @list FILTER i == @value RETURN i" }); + st.bind("list", [ 1, 2, 3 ]); + st.bind("value", 3); + var result = st.explain(); + + assertEqual([ ], result.warnings); + assertTrue(result.hasOwnProperty("plan")); + assertFalse(result.hasOwnProperty("plans")); + + var plan = result.plan; + assertTrue(plan.hasOwnProperty("estimatedCost")); + assertTrue(plan.hasOwnProperty("rules")); + assertEqual([ ], plan.rules); + assertTrue(plan.hasOwnProperty("nodes")); + assertTrue(plan.hasOwnProperty("collections")); + assertEqual([ ], plan.collections); + assertTrue(plan.hasOwnProperty("variables")); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test bind method, bind variables +//////////////////////////////////////////////////////////////////////////////// + + testExplainBindCollection : function () { + var st = new ArangoStatement(db, { query : "FOR i IN @@collection RETURN i" }); + st.bind("@collection", "_users"); + var result = st.explain(); + + assertEqual([ ], result.warnings); + assertTrue(result.hasOwnProperty("plan")); + assertFalse(result.hasOwnProperty("plans")); + + var plan = result.plan; + assertTrue(plan.hasOwnProperty("estimatedCost")); + assertTrue(plan.hasOwnProperty("rules")); + assertEqual([ ], plan.rules); + assertTrue(plan.hasOwnProperty("nodes")); + assertTrue(plan.hasOwnProperty("collections")); + assertEqual([ { "name" : "_users", "type" : "read" } ], plan.collections); + assertTrue(plan.hasOwnProperty("variables")); + }, + +//////////////////////////////////////////////////////////////////////////////// +/// @brief test bind method, bind variables +//////////////////////////////////////////////////////////////////////////////// + + testExplainBindWarnings : function () { + var st = new ArangoStatement(db, { query : "FOR i IN 1..10 RETURN 1 / 0" }); + var result = st.explain(); + + assertEqual(1, result.warnings.length); + assertEqual(ERRORS.ERROR_QUERY_DIVISION_BY_ZERO.code, result.warnings[0].code); + assertTrue(result.hasOwnProperty("plan")); + assertFalse(result.hasOwnProperty("plans")); + + var plan = result.plan; + assertTrue(plan.hasOwnProperty("estimatedCost")); + assertTrue(plan.hasOwnProperty("rules")); + assertTrue(plan.hasOwnProperty("nodes")); + assertTrue(plan.hasOwnProperty("collections")); + assertEqual([ ], plan.collections); + assertTrue(plan.hasOwnProperty("variables")); }, //////////////////////////////////////////////////////////////////////////////// @@ -192,6 +375,7 @@ function StatementSuite () { var st = new ArangoStatement(db, { query : "for u in" }); try { result = st.execute(); + fail(); } catch (e) { assertEqual(ERRORS.ERROR_QUERY_PARSE.code, e.errorNum);