mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-24 01:18:01 +02:00
#18 storing events when they are created.
Also introduced mockery to mock db-access. Here we probably need better modularisation and/or better dependecy management (injecting of deps?).
This commit is contained in:
parent
7868ba3f67
commit
c991fed69c
@ -2,8 +2,8 @@ var Promise = require('bluebird'),
|
|||||||
dbPool = require('./dbPool');
|
dbPool = require('./dbPool');
|
||||||
|
|
||||||
function storeEvent(event) {
|
function storeEvent(event) {
|
||||||
var sql = 'INSERT INTO events(type, user, data) VALUES ($1, $2, $3)';
|
var sql = 'INSERT INTO events(type, created_by, data) VALUES ($1, $2, $3)';
|
||||||
var params = [event.type,event.user,event.data];
|
var params = [event.type, event.createdBy, event.data];
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
dbPool.query(sql, params, function (err) {
|
dbPool.query(sql, params, function (err) {
|
||||||
@ -15,5 +15,5 @@ function storeEvent(event) {
|
|||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
store: storeEvent()
|
store: storeEvent
|
||||||
};
|
};
|
@ -1,5 +1,5 @@
|
|||||||
var Promise = require('bluebird'),
|
var util = require('util'),
|
||||||
util = require('util'),
|
eventDb = require('./eventDb'),
|
||||||
EventEmitter = require('events').EventEmitter;
|
EventEmitter = require('events').EventEmitter;
|
||||||
|
|
||||||
function EventStore() {
|
function EventStore() {
|
||||||
@ -8,10 +8,10 @@ function EventStore() {
|
|||||||
util.inherits(EventStore, EventEmitter);
|
util.inherits(EventStore, EventEmitter);
|
||||||
|
|
||||||
EventStore.prototype.create = function (event) {
|
EventStore.prototype.create = function (event) {
|
||||||
return new Promise(function (resolve) {
|
var that = this;
|
||||||
this.emit(event.type, event);
|
return eventDb.store(event).then(function() {
|
||||||
resolve();
|
that.emit(event.type, event);
|
||||||
}.bind(this));
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = new EventStore();
|
module.exports = new EventStore();
|
@ -23,7 +23,7 @@ module.exports = function (app) {
|
|||||||
|
|
||||||
app.post('/features', function (req, res) {
|
app.post('/features', function (req, res) {
|
||||||
var newFeature = req.body,
|
var newFeature = req.body,
|
||||||
user = req.connection.remoteAddress;
|
createdBy = req.connection.remoteAddress;
|
||||||
|
|
||||||
db.getFeature(newFeature.name).then(function (feature) {
|
db.getFeature(newFeature.name).then(function (feature) {
|
||||||
if (feature) {
|
if (feature) {
|
||||||
@ -32,7 +32,7 @@ module.exports = function (app) {
|
|||||||
} else {
|
} else {
|
||||||
eventStore.create({
|
eventStore.create({
|
||||||
type: eventType.featureCreated,
|
type: eventType.featureCreated,
|
||||||
user: user,
|
createdBy: createdBy,
|
||||||
data: newFeature
|
data: newFeature
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
res.status(201).end();
|
res.status(201).end();
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
var eventStore = require('./eventStore'),
|
var eventStore = require('./eventStore'),
|
||||||
eventType = require('./eventType'),
|
eventType = require('./eventType'),
|
||||||
featuresMock = require('./featuresMock'),
|
featuresMock = require('./featuresMock'),
|
||||||
|
logger = require('./logger'),
|
||||||
Promise = require('bluebird');
|
Promise = require('bluebird');
|
||||||
|
|
||||||
eventStore.on(eventType.featureCreated, function (event) {
|
eventStore.on(eventType.featureCreated, function (event) {
|
||||||
console.log('feature created event recieved', event);
|
logger.info('feature created event recieved', event);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,54 +1,55 @@
|
|||||||
{
|
{
|
||||||
"name": "unleash-server",
|
"name": "unleash-server",
|
||||||
"description": "unleash your features",
|
"description": "unleash your features",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"unleash",
|
"unleash",
|
||||||
"feature toggle",
|
"feature toggle",
|
||||||
"feature",
|
"feature",
|
||||||
"toggle"
|
"toggle"
|
||||||
],
|
],
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "ssh://git@github.com:finn-no/unleash.git"
|
"url": "ssh://git@github.com:finn-no/unleash.git"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/finn-no/unleash/issues"
|
"url": "https://github.com/finn-no/unleash/issues"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node server.js",
|
"start": "node server.js",
|
||||||
"start-dev": "NODE_ENV=local supervisor --ignore ./node_modules/,./public/js server.js",
|
"start-dev": "NODE_ENV=local supervisor --ignore ./node_modules/,./public/js server.js",
|
||||||
"test": "jshint server.js lib public/scripts test && mocha test test/*",
|
"test": "jshint server.js lib public/scripts test && mocha test test/*",
|
||||||
"tdd": "mocha --watch test test/*",
|
"tdd": "mocha --watch test test/*",
|
||||||
"test-bamboo-ci": "mocha test test/*",
|
"test-bamboo-ci": "mocha test test/*",
|
||||||
"db-create": "createdb unleash_${NODE_ENV:-dev}",
|
"db-create": "createdb unleash_${NODE_ENV:-dev}",
|
||||||
"db-drop": "dropdb unleash_${NODE_ENV:-dev}",
|
"db-drop": "dropdb unleash_${NODE_ENV:-dev}",
|
||||||
"db-migrate-up": "db-migrate --config config/database.json up",
|
"db-migrate-up": "db-migrate --config config/database.json up",
|
||||||
"db-migrate-down": "db-migrate --config config/database.json down",
|
"db-migrate-down": "db-migrate --config config/database.json down",
|
||||||
"db-setup": "npm run db-create; npm run db-migrate-up"
|
"db-setup": "npm run db-create; npm run db-migrate-up"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bluebird": "2.2.2",
|
"bluebird": "2.2.2",
|
||||||
"body-parser": "1.4.3",
|
"body-parser": "1.4.3",
|
||||||
"db-migrate": "^0.7.1",
|
"db-migrate": "^0.7.1",
|
||||||
"errorhandler": "1.1.1",
|
"errorhandler": "1.1.1",
|
||||||
"express": "4.9.8",
|
"express": "4.9.8",
|
||||||
"express-validator": "2.6.0",
|
"express-validator": "2.6.0",
|
||||||
"ini": "1.3.0",
|
"ini": "1.3.0",
|
||||||
"log4js": "0.6.21",
|
"log4js": "0.6.21",
|
||||||
"nconf": "0.6.9",
|
"nconf": "0.6.9",
|
||||||
"pg": "^3.6.1",
|
"pg": "^3.6.1",
|
||||||
"any-db": "2.1.0",
|
"any-db": "2.1.0",
|
||||||
"any-db-pool": "2.1.0",
|
"any-db-pool": "2.1.0",
|
||||||
"any-db-postgres": "2.1.3"
|
"any-db-postgres": "2.1.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"chai": "1.9.1",
|
"chai": "1.9.1",
|
||||||
"jshint": "2.5.2",
|
"jshint": "2.5.2",
|
||||||
"mocha": "1.20.1",
|
"mocha": "1.20.1",
|
||||||
"supertest": "0.13.0",
|
"supertest": "0.13.0",
|
||||||
"supervisor": "~0.6.0",
|
"supervisor": "~0.6.0",
|
||||||
"xmlbuilder": "^2.4.4"
|
"xmlbuilder": "^2.4.4",
|
||||||
}
|
"mockery": "~1.4.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
13
unleash-server/test/eventDbMock.js
Normal file
13
unleash-server/test/eventDbMock.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
var Promise = require('bluebird');
|
||||||
|
|
||||||
|
function storeEvent(event) {
|
||||||
|
console.log('using eventDbMock to store: ', event);
|
||||||
|
return new Promise(function (resolve) {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
store: storeEvent
|
||||||
|
};
|
@ -1,8 +1,27 @@
|
|||||||
var assert = require('assert');
|
var assert = require('assert'),
|
||||||
var eventType = require('../lib/eventType');
|
mockery = require('mockery'),
|
||||||
var eventStore = require('../lib/eventStore');
|
eventType = require('../lib/eventType'),
|
||||||
|
eventStore;
|
||||||
|
|
||||||
|
|
||||||
describe('EventStore', function () {
|
describe('EventStore', function () {
|
||||||
|
before(function () {
|
||||||
|
mockery.enable({
|
||||||
|
warnOnReplace: false,
|
||||||
|
warnOnUnregistered: false,
|
||||||
|
useCleanCache: true
|
||||||
|
});
|
||||||
|
|
||||||
|
mockery.registerSubstitute('./eventDb', '../test/eventDbMock');
|
||||||
|
|
||||||
|
eventStore = require('../lib/eventStore');
|
||||||
|
});
|
||||||
|
|
||||||
|
after(function () {
|
||||||
|
mockery.disable();
|
||||||
|
mockery.deregisterAll();
|
||||||
|
});
|
||||||
|
|
||||||
describe('#create()', function () {
|
describe('#create()', function () {
|
||||||
it('should emit event', function (done) {
|
it('should emit event', function (done) {
|
||||||
eventStore.once(eventType.featureCreated, function (x) {
|
eventStore.once(eventType.featureCreated, function (x) {
|
||||||
@ -20,7 +39,7 @@ describe('EventStore', function () {
|
|||||||
|
|
||||||
eventStore.create({
|
eventStore.create({
|
||||||
type: eventType.featureCreated,
|
type: eventType.featureCreated,
|
||||||
user: 'ole',
|
createdBy: 'ole',
|
||||||
data: eventData
|
data: eventData
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
var request = require('supertest');
|
var request = require('supertest'),
|
||||||
|
mockery = require('mockery'),
|
||||||
|
|
||||||
request = request('http://localhost:4242');
|
request = request('http://localhost:4242');
|
||||||
|
|
||||||
@ -6,10 +7,21 @@ describe('The api', function () {
|
|||||||
var server;
|
var server;
|
||||||
|
|
||||||
before(function () {
|
before(function () {
|
||||||
|
mockery.enable({
|
||||||
|
warnOnReplace: false,
|
||||||
|
warnOnUnregistered: false,
|
||||||
|
useCleanCache: true
|
||||||
|
});
|
||||||
|
|
||||||
|
mockery.registerSubstitute('./eventDb', '../test/eventDbMock');
|
||||||
|
|
||||||
|
|
||||||
server = require('../server');
|
server = require('../server');
|
||||||
});
|
});
|
||||||
|
|
||||||
after(function () {
|
after(function () {
|
||||||
|
mockery.disable();
|
||||||
|
mockery.deregisterAll();
|
||||||
server.server.close();
|
server.server.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user