mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
add tests for context admin api
This commit is contained in:
parent
ab0fc2ecfa
commit
09329e1104
@ -54,7 +54,10 @@ function logStore(name, module) {
|
|||||||
|
|
||||||
function init(_settings) {
|
function init(_settings) {
|
||||||
settings = _settings;
|
settings = _settings;
|
||||||
|
contexts = {};
|
||||||
stores = {};
|
stores = {};
|
||||||
|
storeList = [];
|
||||||
|
hasConfiguredStore = false;
|
||||||
var seed = settings.functionGlobalContext || {};
|
var seed = settings.functionGlobalContext || {};
|
||||||
contexts['global'] = createContext("global",seed);
|
contexts['global'] = createContext("global",seed);
|
||||||
stores["_"] = new memory();
|
stores["_"] = new memory();
|
||||||
|
@ -22,6 +22,210 @@ var sinon = require('sinon');
|
|||||||
var when = require('when');
|
var when = require('when');
|
||||||
|
|
||||||
var context = require("../../../../red/api/admin/context");
|
var context = require("../../../../red/api/admin/context");
|
||||||
|
var Context = require("../../../../red/runtime/nodes/context");
|
||||||
|
var Util = require("../../../../red/runtime/util");
|
||||||
|
|
||||||
describe("api/admin/context", function() {
|
describe("api/admin/context", function() {
|
||||||
|
var app = undefined;
|
||||||
|
|
||||||
|
before(function (done) {
|
||||||
|
var node_context = undefined;
|
||||||
|
app = express();
|
||||||
|
app.use(bodyParser.json());
|
||||||
|
app.get("/context/:scope(global)", context.get);
|
||||||
|
app.get("/context/:scope(global)/*", context.get);
|
||||||
|
app.get("/context/:scope(node|flow)/:id", context.get);
|
||||||
|
app.get("/context/:scope(node|flow)/:id/*", context.get);
|
||||||
|
|
||||||
|
context.init({
|
||||||
|
settings: {
|
||||||
|
},
|
||||||
|
log:{warn:function(){},_:function(){},audit:function(){}},
|
||||||
|
nodes: {
|
||||||
|
listContextStores: Context.listStores,
|
||||||
|
getContext: Context.get,
|
||||||
|
getNode: function(id) {
|
||||||
|
if (id === 'NID') {
|
||||||
|
return {
|
||||||
|
id: 'NID',
|
||||||
|
context: function () {
|
||||||
|
return node_context;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
util: Util
|
||||||
|
});
|
||||||
|
|
||||||
|
Context.init({
|
||||||
|
contextStorage: {
|
||||||
|
memory0: {
|
||||||
|
module: "memory"
|
||||||
|
},
|
||||||
|
memory1: {
|
||||||
|
module: "memory"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Context.load().then(function () {
|
||||||
|
var ctx = Context.get("NID", "FID");
|
||||||
|
node_context = ctx;
|
||||||
|
ctx.set("foo", "n_v00", "memory0");
|
||||||
|
ctx.set("bar", "n_v01", "memory0");
|
||||||
|
ctx.set("baz", "n_v10", "memory1");
|
||||||
|
ctx.set("bar", "n_v11", "memory1");
|
||||||
|
ctx.flow.set("foo", "f_v00", "memory0");
|
||||||
|
ctx.flow.set("bar", "f_v01", "memory0");
|
||||||
|
ctx.flow.set("baz", "f_v10", "memory1");
|
||||||
|
ctx.flow.set("bar", "f_v11", "memory1");
|
||||||
|
ctx.global.set("foo", "g_v00", "memory0");
|
||||||
|
ctx.global.set("bar", "g_v01", "memory0");
|
||||||
|
ctx.global.set("baz", "g_v10", "memory1");
|
||||||
|
ctx.global.set("bar", "g_v11", "memory1");
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
after(function () {
|
||||||
|
Context.clean({allNodes:{}});
|
||||||
|
Context.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
function check_mem(body, mem, name, val) {
|
||||||
|
var mem0 = body[mem];
|
||||||
|
mem0.should.have.property(name);
|
||||||
|
mem0[name].should.deepEqual(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_scope(scope, prefix, id) {
|
||||||
|
describe('# '+scope, function () {
|
||||||
|
var xid = id ? ("/"+id) : "";
|
||||||
|
|
||||||
|
it('should return '+scope+' contexts', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/context/'+scope+xid)
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect(200)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
var body = res.body;
|
||||||
|
body.should.have.key('memory0', 'memory1');
|
||||||
|
check_mem(body, 'memory0',
|
||||||
|
'foo', {msg:prefix+'_v00', format:'string[5]'});
|
||||||
|
check_mem(body, 'memory0',
|
||||||
|
'bar', {msg:prefix+'_v01', format:'string[5]'});
|
||||||
|
check_mem(body, 'memory1',
|
||||||
|
'baz', {msg:prefix+'_v10', format:'string[5]'});
|
||||||
|
check_mem(body, 'memory1',
|
||||||
|
'bar', {msg:prefix+'_v11', format:'string[5]'});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return a value from default '+scope+' context', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/context/'+scope+xid+'/foo')
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect(200)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
var body = res.body;
|
||||||
|
body.should.deepEqual({msg: prefix+'_v00', format: 'string[5]'});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return a value from specified '+scope+' context', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/context/'+scope+xid+'/bar?store=memory1')
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect(200)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
var body = res.body;
|
||||||
|
body.should.deepEqual({msg: prefix+'_v11', format: 'string[5]', store: 'memory1'});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return specified '+scope+' store', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/context/'+scope+xid+'?store=memory1')
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect(200)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
var body = res.body;
|
||||||
|
body.should.deepEqual({
|
||||||
|
memory1: {
|
||||||
|
baz: { msg: prefix+'_v10', format: 'string[5]' },
|
||||||
|
bar: { msg: prefix+'_v11', format: 'string[5]' }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return undefined for unknown key of default '+scope+' store', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/context/'+scope+xid+'/unknown')
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect(200)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
var body = res.body;
|
||||||
|
body.should.deepEqual({msg:'(undefined)', format:'undefined'});
|
||||||
|
done();
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should cause error for unknown '+scope+' store', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/context/'+scope+xid+'?store=unknown')
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect(200)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done();
|
||||||
|
}
|
||||||
|
done("unexpected");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
check_scope("global", "g", undefined);
|
||||||
|
check_scope("node", "n", "NID");
|
||||||
|
check_scope("flow", "f", "FID");
|
||||||
|
|
||||||
|
describe("# errors", function () {
|
||||||
|
it('should cause error for unknown scope', function (done) {
|
||||||
|
request(app)
|
||||||
|
.get('/context/scope')
|
||||||
|
.set('Accept', 'application/json')
|
||||||
|
.expect(200)
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
return done();
|
||||||
|
}
|
||||||
|
done("unexpected");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user