1
0
Fork 0

finished tests for _create and _graph

This commit is contained in:
scottashton 2014-05-19 09:45:43 +02:00
parent 1ac649cf94
commit 0c0c2773fa
2 changed files with 202 additions and 32 deletions

View File

@ -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]);
};
////////////////////////////////////////////////////////////////////////////////

View File

@ -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.");
}
};