mirror of https://gitee.com/bigwinds/arangodb
finished tests for _create and _graph
This commit is contained in:
parent
1ac649cf94
commit
0c0c2773fa
|
@ -78,9 +78,9 @@ var isValidCollectionsParameter = function (x) {
|
|||
/// @brief find or create a collection by name
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
var findOrCreateCollectionByName = function (name, type) {
|
||||
var findOrCreateCollectionByName = function (name, type, noCreate) {
|
||||
var col = db._collection(name),res = false;
|
||||
if (col === null) {
|
||||
if (col === null && !noCreate) {
|
||||
if (type === ArangoCollection.TYPE_DOCUMENT) {
|
||||
col = db._create(name);
|
||||
} else {
|
||||
|
@ -95,6 +95,29 @@ var findOrCreateCollectionByName = function (name, type) {
|
|||
return res;
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief find or create a collection by name
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
var findOrCreateCollectionsByEdgeDefinitions = function (edgeDefinitions, noCreate) {
|
||||
var vertexCollections = {},
|
||||
edgeCollections = {};
|
||||
edgeDefinitions.forEach(function (e) {
|
||||
e.from.concat(e.to).forEach(function (v) {
|
||||
findOrCreateCollectionByName(v, ArangoCollection.TYPE_DOCUMENT, noCreate);
|
||||
vertexCollections[v] = db[v];
|
||||
});
|
||||
findOrCreateCollectionByName(e.collection, ArangoCollection.TYPE_EDGE, noCreate);
|
||||
edgeCollections[e.collection] = db[e.collection];
|
||||
});
|
||||
return [
|
||||
vertexCollections,
|
||||
edgeCollections
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// --SECTION-- module "org/arangodb/general-graph"
|
||||
// -----------------------------------------------------------------------------
|
||||
|
@ -170,7 +193,7 @@ var edgeDefinitions = function () {
|
|||
|
||||
var res = [], args = arguments;
|
||||
Object.keys(args).forEach(function (x) {
|
||||
res.push(args[x]);
|
||||
res.push(args[x]);
|
||||
});
|
||||
|
||||
return res;
|
||||
|
@ -187,20 +210,17 @@ var _create = function (graphName, edgeDefinitions) {
|
|||
var gdb = db["_graphs"],
|
||||
g,
|
||||
graphAlreadyExists = true,
|
||||
vertexCollections = {};
|
||||
edgeCollections = {};
|
||||
collections;
|
||||
|
||||
if (gdb === null) {
|
||||
throw "_graphs collection does not exist.";
|
||||
}
|
||||
|
||||
if (!graphName) {
|
||||
throw "a graph name is required to create a graph.";
|
||||
}
|
||||
if (!Array.isArray(edgeDefinitions) || edgeDefinitions.length === 0) {
|
||||
throw "at least one edge definition is required to create a graph.";
|
||||
}
|
||||
|
||||
try {
|
||||
g = gdb.document(graphName);
|
||||
} catch (e) {
|
||||
|
@ -214,21 +234,14 @@ var _create = function (graphName, edgeDefinitions) {
|
|||
throw "graph " + graphName + " already exists.";
|
||||
}
|
||||
|
||||
edgeDefinitions.forEach(function (e) {
|
||||
e.from.concat(e.to).forEach(function (v) {
|
||||
findOrCreateCollectionByName(v, ArangoCollection.TYPE_DOCUMENT);
|
||||
vertexCollections[v] = db[v];
|
||||
});
|
||||
findOrCreateCollectionByName(e.collection, ArangoCollection.TYPE_EDGE);
|
||||
edgeCollections[e.collection] = db[e.collection];
|
||||
});
|
||||
collections = findOrCreateCollectionsByEdgeDefinitions(edgeDefinitions, false);
|
||||
|
||||
gdb.save({
|
||||
'edgeDefinitions' : edgeDefinitions,
|
||||
'_key' : graphName
|
||||
});
|
||||
|
||||
return new Graph(graphName, edgeDefinitions, vertexCollections, edgeCollections);
|
||||
return new Graph(graphName, edgeDefinitions, collections[0], collections[1]);
|
||||
|
||||
};
|
||||
|
||||
|
@ -251,7 +264,6 @@ var Graph = function(graphName, edgeDefinitions, vertexCollections, edgeCollecti
|
|||
_.each(edgeCollections, function(obj, key) {
|
||||
self[key] = obj;
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -263,7 +275,7 @@ var Graph = function(graphName, edgeDefinitions, vertexCollections, edgeCollecti
|
|||
var _graph = function(graphName) {
|
||||
|
||||
var gdb = db["_graphs"],
|
||||
g;
|
||||
g, collections;
|
||||
|
||||
if (gdb === null) {
|
||||
throw "_graphs collection does not exist.";
|
||||
|
@ -272,11 +284,15 @@ var _graph = function(graphName) {
|
|||
try {
|
||||
g = gdb.document(graphName);
|
||||
} catch (e) {
|
||||
require("internal").print(e)
|
||||
throw e;
|
||||
}
|
||||
if (e.errorNum !== 1202) {
|
||||
throw e;
|
||||
}
|
||||
throw "graph " + graphName + " does not exists.";
|
||||
}
|
||||
|
||||
return new Graph(graphName, g.edgeDefinitions);
|
||||
collections = findOrCreateCollectionsByEdgeDefinitions(g.edgeDefinitions, true);
|
||||
|
||||
return new Graph(graphName, g.edgeDefinitions, collections[0], collections[1]);
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -223,33 +223,187 @@ function GeneralGraphCreationSuite() {
|
|||
|
||||
},
|
||||
|
||||
<<<<<<< HEAD
|
||||
|
||||
test_create : function () {
|
||||
try {
|
||||
arangodb.db._collection("_graphs").remove("_graphs/bla3")
|
||||
} catch (err) {
|
||||
=======
|
||||
/*test_create : function () {
|
||||
>>>>>>> 76b26f15ab96c6c655f4a61f3df27e5a36b84777
|
||||
|
||||
}
|
||||
|
||||
var a = graph._create(
|
||||
var a = graph._create(
|
||||
"bla3",
|
||||
graph.edgeDefinitions(
|
||||
graph._undirectedRelationDefinition("relationName", "vertexC1"),
|
||||
graph._directedRelationDefinition("relationName",
|
||||
graph._directedRelationDefinition("relationName2",
|
||||
["vertexC1", "vertexC2"], ["vertexC3", "vertexC4"]
|
||||
)
|
||||
)
|
||||
);
|
||||
require("console").log(JSON.stringify(a));
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC1'));
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC2'));
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC3'));
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC4'));
|
||||
assertTrue(a.__edgeCollections.hasOwnProperty('relationName'));
|
||||
assertTrue(a.__edgeCollections.hasOwnProperty('relationName2'));
|
||||
assertEqual(a.__edgeDefinitions, [
|
||||
{
|
||||
"collection" : "relationName",
|
||||
"from" : [
|
||||
"vertexC1"
|
||||
],
|
||||
"to" : [
|
||||
"vertexC1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"collection" : "relationName2",
|
||||
"from" : [
|
||||
"vertexC1",
|
||||
"vertexC2"
|
||||
],
|
||||
"to" : [
|
||||
"vertexC3",
|
||||
"vertexC4"
|
||||
]
|
||||
}
|
||||
]
|
||||
);
|
||||
},
|
||||
|
||||
assertEqual(a, "");
|
||||
test_create_WithOut_EdgeDefiniton : function () {
|
||||
var msg;
|
||||
try {
|
||||
arangodb.db._collection("_graphs").remove("_graphs/bla3")
|
||||
} catch (err) {
|
||||
}
|
||||
|
||||
try {
|
||||
var a = graph._create(
|
||||
"bla3",
|
||||
[]
|
||||
);
|
||||
} catch (err) {
|
||||
msg = err;
|
||||
}
|
||||
|
||||
assertEqual(msg, "at least one edge definition is required to create a graph.");
|
||||
|
||||
},
|
||||
|
||||
test_create_WithOut_Name : function () {
|
||||
var msg;
|
||||
try {
|
||||
arangodb.db._collection("_graphs").remove("_graphs/bla3")
|
||||
} catch (err) {
|
||||
}
|
||||
|
||||
try {
|
||||
var a = graph._create(
|
||||
"",
|
||||
graph.edgeDefinitions(
|
||||
graph._undirectedRelationDefinition("relationName", "vertexC1"),
|
||||
graph._directedRelationDefinition("relationName2",
|
||||
["vertexC1", "vertexC2"], ["vertexC3", "vertexC4"]
|
||||
)
|
||||
)
|
||||
);
|
||||
} catch (err) {
|
||||
msg = err;
|
||||
}
|
||||
|
||||
assertEqual(msg, "a graph name is required to create a graph.");
|
||||
|
||||
},
|
||||
|
||||
test_create_With_Already_Existing_Graph : function () {
|
||||
try {
|
||||
arangodb.db._collection("_graphs").remove("_graphs/bla3")
|
||||
} catch (err) {
|
||||
}
|
||||
graph._create(
|
||||
"bla3",
|
||||
graph.edgeDefinitions(
|
||||
graph._undirectedRelationDefinition("relationName", "vertexC1"),
|
||||
graph._directedRelationDefinition("relationName2",
|
||||
["vertexC1", "vertexC2"], ["vertexC3", "vertexC4"]
|
||||
)
|
||||
)
|
||||
);
|
||||
var msg;
|
||||
try {
|
||||
var a = graph._create(
|
||||
"bla3",
|
||||
graph.edgeDefinitions(
|
||||
graph._undirectedRelationDefinition("relationName", "vertexC1"),
|
||||
graph._directedRelationDefinition("relationName2",
|
||||
["vertexC1", "vertexC2"], ["vertexC3", "vertexC4"]
|
||||
)
|
||||
)
|
||||
);
|
||||
} catch (err) {
|
||||
msg = err;
|
||||
}
|
||||
|
||||
assertEqual(msg, "graph bla3 already exists.");
|
||||
|
||||
},
|
||||
|
||||
test_get_graph : function () {
|
||||
|
||||
try {
|
||||
arangodb.db._collection("_graphs").remove("_graphs/bla3")
|
||||
} catch (err) {
|
||||
}
|
||||
graph._create(
|
||||
"bla3",
|
||||
graph.edgeDefinitions(
|
||||
graph._undirectedRelationDefinition("relationName", "vertexC1"),
|
||||
graph._directedRelationDefinition("relationName2",
|
||||
["vertexC1", "vertexC2"], ["vertexC3", "vertexC4"]
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
var a = graph._graph("bla3");
|
||||
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC1'));
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC2'));
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC3'));
|
||||
assertTrue(a.__vertexCollections.hasOwnProperty('vertexC4'));
|
||||
assertTrue(a.__edgeCollections.hasOwnProperty('relationName'));
|
||||
assertTrue(a.__edgeCollections.hasOwnProperty('relationName2'));
|
||||
assertEqual(a.__edgeDefinitions, [
|
||||
{
|
||||
"collection" : "relationName",
|
||||
"from" : [
|
||||
"vertexC1"
|
||||
],
|
||||
"to" : [
|
||||
"vertexC1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"collection" : "relationName2",
|
||||
"from" : [
|
||||
"vertexC1",
|
||||
"vertexC2"
|
||||
],
|
||||
"to" : [
|
||||
"vertexC3",
|
||||
"vertexC4"
|
||||
]
|
||||
}
|
||||
]
|
||||
);
|
||||
},
|
||||
|
||||
test_get_graph_without_hit : function () {
|
||||
var msg;
|
||||
try {
|
||||
var a = graph._graph("bla4");
|
||||
} catch (e) {
|
||||
msg = e;
|
||||
}
|
||||
assertEqual(msg, "graph bla4 does not exists.");
|
||||
}
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue