mirror of https://gitee.com/bigwinds/arangodb
GraphViewer: Added Tests for joining of community nodes
This commit is contained in:
parent
9cd77a7829
commit
bd50d5c5f0
|
@ -54,6 +54,7 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
queries = {},
|
queries = {},
|
||||||
nodeCollection,
|
nodeCollection,
|
||||||
edgeCollection,
|
edgeCollection,
|
||||||
|
limit,
|
||||||
reducer,
|
reducer,
|
||||||
arangodb,
|
arangodb,
|
||||||
width,
|
width,
|
||||||
|
@ -267,7 +268,11 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
if (callback) {
|
if (callback) {
|
||||||
callback(result[0].vertex);
|
var n = insertNode(result[0].vertex);
|
||||||
|
if (limit < nodes.length) {
|
||||||
|
reducer.getCommunity(limit, n);
|
||||||
|
}
|
||||||
|
callback(n);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -534,8 +539,14 @@ function ArangoAdapter(nodes, edges, config) {
|
||||||
api.edge = api.base + "edge?collection=" + edgeCollection;
|
api.edge = api.base + "edge?collection=" + edgeCollection;
|
||||||
};
|
};
|
||||||
|
|
||||||
self.setNodeLimit = function (limit) {
|
self.setNodeLimit = function (pLimit, callback) {
|
||||||
|
limit = pLimit;
|
||||||
|
if (limit < nodes.length) {
|
||||||
|
reducer.getCommunity(limit);
|
||||||
|
if (callback !== undefined) {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -287,18 +287,21 @@ function NodeReducer(nodes, edges) {
|
||||||
populateValues(dQ, a, heap);
|
populateValues(dQ, a, heap);
|
||||||
var max = 0;
|
var max = 0;
|
||||||
while (communityDetectionStep(dQ, a, heap, coms)) {
|
while (communityDetectionStep(dQ, a, heap, coms)) {
|
||||||
|
// InfiniteLoopCheck should be removed!
|
||||||
max++;
|
max++;
|
||||||
if (max > 100) {
|
if (max > 100) {
|
||||||
break;
|
break;
|
||||||
//console.log(max);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//console.log(max);
|
|
||||||
res = _.pluck(_.values(coms), "com");
|
res = _.pluck(_.values(coms), "com");
|
||||||
|
if (focus !== undefined) {
|
||||||
dist = floatDist(focus._id);
|
dist = floatDist(focus._id);
|
||||||
res = res.filter(function(e) {return !_.contains(e, focus._id)});
|
res = res.filter(function(e) {return !_.contains(e, focus._id)});
|
||||||
res = res.filter(function(e) {return e.length > 1});
|
res = res.filter(function(e) {return e.length > 1});
|
||||||
res.sort(sortByDistance);
|
res.sort(sortByDistance);
|
||||||
|
} else {
|
||||||
|
res = res.filter(function(e) {return e.length > 1});
|
||||||
|
}
|
||||||
return res[0];
|
return res[0];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,12 +39,12 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
describe('Arango Adapter', function () {
|
describe('Arango Adapter', function () {
|
||||||
/*
|
|
||||||
describeInterface(new ArangoAdapter([], [], {
|
describeInterface(new ArangoAdapter([], [], {
|
||||||
nodeCollection: "",
|
nodeCollection: "",
|
||||||
edgeCollection: ""
|
edgeCollection: ""
|
||||||
}));
|
}));
|
||||||
*/
|
|
||||||
var adapter,
|
var adapter,
|
||||||
nodes,
|
nodes,
|
||||||
edges,
|
edges,
|
||||||
|
@ -272,6 +272,19 @@
|
||||||
requests;
|
requests;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
var self = this;
|
||||||
|
self.fakeReducerRequest = function() {};
|
||||||
|
spyOn(window, "NodeReducer").andCallFake(function(v, e) {
|
||||||
|
return {
|
||||||
|
getCommunity: function(limit, focus) {
|
||||||
|
if (focus !== undefined) {
|
||||||
|
self.fakeReducerRequest(limit, focus);
|
||||||
|
} else {
|
||||||
|
self.fakeReducerRequest(limit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
adapter = new ArangoAdapter(
|
adapter = new ArangoAdapter(
|
||||||
nodes,
|
nodes,
|
||||||
edges,
|
edges,
|
||||||
|
@ -420,7 +433,6 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
it('should be able to load a tree node from ArangoDB'
|
it('should be able to load a tree node from ArangoDB'
|
||||||
+ ' by internal attribute and value', function() {
|
+ ' by internal attribute and value', function() {
|
||||||
|
|
||||||
|
@ -613,11 +625,6 @@
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
|
||||||
runs(function() {
|
runs(function() {
|
||||||
var self = this;
|
|
||||||
this.fakeReducerRequest = function() {};
|
|
||||||
spyOn(window, "NodeReducer").andCallFake(function(v, e) {
|
|
||||||
this.getCommunity = self.fakeReducerRequest;
|
|
||||||
});
|
|
||||||
spyOn($, "ajax").andCallFake(function(request) {
|
spyOn($, "ajax").andCallFake(function(request) {
|
||||||
if (spyHook !== undefined) {
|
if (spyHook !== undefined) {
|
||||||
if(!spyHook(request)) {
|
if(!spyHook(request)) {
|
||||||
|
@ -850,16 +857,66 @@
|
||||||
adapter.setNodeLimit(6);
|
adapter.setNodeLimit(6);
|
||||||
spyOn(this, "fakeReducerRequest");
|
spyOn(this, "fakeReducerRequest");
|
||||||
adapter.loadNodeFromTreeById(c1, checkCallbackFunction);
|
adapter.loadNodeFromTreeById(c1, checkCallbackFunction);
|
||||||
expect(this.fakeReducerRequest).toHaveBeenCalledWith(6, c1);
|
expect(this.fakeReducerRequest).toHaveBeenCalledWith(6, nodeWithID(c1));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should render a reduced set of nodes if too many nodes are added', function() {
|
||||||
|
runs(function() {
|
||||||
|
adapter.setNodeLimit(6);
|
||||||
|
spyOn(this, "fakeReducerRequest").andCallFake(function() {
|
||||||
|
return [0, 1, 2, 3];
|
||||||
|
});
|
||||||
|
adapter.loadNodeFromTreeById(c1, checkCallbackFunction);
|
||||||
|
});
|
||||||
|
|
||||||
|
waitsFor(function() {
|
||||||
|
return callbackCheck;
|
||||||
|
});
|
||||||
|
|
||||||
|
runs(function() {
|
||||||
|
notExistNodes([c0, c1, c2, c3]);
|
||||||
|
existNodes([c4, c5, c6, c7]);
|
||||||
|
expect(nodes.length).toEqual(5);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
it('should not trigger the reducer if the limit is set large enough', function() {
|
it('should not trigger the reducer if the limit is set large enough', function() {
|
||||||
spyOn(this, "fakeReducerRequest");
|
spyOn(this, "fakeReducerRequest");
|
||||||
adapter.setNodeLimit(10);
|
adapter.setNodeLimit(10);
|
||||||
expect(this.fakeReducerRequest).not.toHaveBeenCalled();
|
expect(this.fakeReducerRequest).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should trigger the reducer if the limit is set too small', function() {
|
||||||
|
spyOn(this, "fakeReducerRequest");
|
||||||
|
adapter.setNodeLimit(2);
|
||||||
|
expect(this.fakeReducerRequest).toHaveBeenCalledWith(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should reshape all objects if limit is set too small', function() {
|
||||||
|
var called = false;
|
||||||
|
var callback = function() {
|
||||||
|
called = true;
|
||||||
|
};
|
||||||
|
spyOn(this, "fakeReducerRequest").andCallFake(function() {
|
||||||
|
return [0, 1, 2];
|
||||||
|
});
|
||||||
|
adapter.setNodeLimit(2, callback);
|
||||||
|
|
||||||
|
notExistNodes([c0, c1, c2]);
|
||||||
|
existNodes([c3]);
|
||||||
|
expect(nodes.length).toEqual(2);
|
||||||
|
|
||||||
|
expect(called).toBeTruthy();
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
describe('that has loaded several queries', function() {
|
describe('that has loaded several queries', function() {
|
||||||
var c8, c9, e2_8;
|
var c8, c9, e2_8;
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ var describeInterface = function (testee) {
|
||||||
expect(testee).toHaveFunction("createNode", 2);
|
expect(testee).toHaveFunction("createNode", 2);
|
||||||
expect(testee).toHaveFunction("deleteNode", 2);
|
expect(testee).toHaveFunction("deleteNode", 2);
|
||||||
expect(testee).toHaveFunction("patchNode", 3);
|
expect(testee).toHaveFunction("patchNode", 3);
|
||||||
expect(testee).toHaveFunction("setNodeLimit", 1);
|
expect(testee).toHaveFunction("setNodeLimit", 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue