mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01: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');
 | 
			
		||||
 | 
			
		||||
function storeEvent(event) {
 | 
			
		||||
    var sql = 'INSERT INTO events(type, user, data) VALUES ($1, $2, $3)';
 | 
			
		||||
    var params = [event.type,event.user,event.data];
 | 
			
		||||
    var sql = 'INSERT INTO events(type, created_by, data) VALUES ($1, $2, $3)';
 | 
			
		||||
    var params = [event.type, event.createdBy, event.data];
 | 
			
		||||
 | 
			
		||||
    return new Promise(function (resolve, reject) {
 | 
			
		||||
        dbPool.query(sql, params, function (err) {
 | 
			
		||||
@ -15,5 +15,5 @@ function storeEvent(event) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    store: storeEvent()
 | 
			
		||||
    store: storeEvent
 | 
			
		||||
};
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
var Promise = require('bluebird'),
 | 
			
		||||
    util = require('util'),
 | 
			
		||||
var util = require('util'),
 | 
			
		||||
    eventDb = require('./eventDb'),
 | 
			
		||||
    EventEmitter = require('events').EventEmitter;
 | 
			
		||||
 | 
			
		||||
function EventStore() {
 | 
			
		||||
@ -8,10 +8,10 @@ function EventStore() {
 | 
			
		||||
util.inherits(EventStore, EventEmitter);
 | 
			
		||||
 | 
			
		||||
EventStore.prototype.create = function (event) {
 | 
			
		||||
    return new Promise(function (resolve) {
 | 
			
		||||
        this.emit(event.type, event);
 | 
			
		||||
        resolve();
 | 
			
		||||
    }.bind(this));
 | 
			
		||||
    var that = this;
 | 
			
		||||
    return eventDb.store(event).then(function() {
 | 
			
		||||
        that.emit(event.type, event);
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = new EventStore();
 | 
			
		||||
@ -23,7 +23,7 @@ module.exports = function (app) {
 | 
			
		||||
 | 
			
		||||
    app.post('/features', function (req, res) {
 | 
			
		||||
        var newFeature = req.body,
 | 
			
		||||
            user = req.connection.remoteAddress;
 | 
			
		||||
            createdBy = req.connection.remoteAddress;
 | 
			
		||||
 | 
			
		||||
        db.getFeature(newFeature.name).then(function (feature) {
 | 
			
		||||
            if (feature) {
 | 
			
		||||
@ -32,7 +32,7 @@ module.exports = function (app) {
 | 
			
		||||
            } else {
 | 
			
		||||
                eventStore.create({
 | 
			
		||||
                    type: eventType.featureCreated,
 | 
			
		||||
                    user: user,
 | 
			
		||||
                    createdBy: createdBy,
 | 
			
		||||
                    data: newFeature
 | 
			
		||||
                }).then(function() {
 | 
			
		||||
                    res.status(201).end();
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,11 @@
 | 
			
		||||
var eventStore = require('./eventStore'),
 | 
			
		||||
    eventType = require('./eventType'),
 | 
			
		||||
    featuresMock = require('./featuresMock'),
 | 
			
		||||
    logger = require('./logger'),
 | 
			
		||||
    Promise = require('bluebird');
 | 
			
		||||
 | 
			
		||||
eventStore.on(eventType.featureCreated, function (event) {
 | 
			
		||||
        console.log('feature created event recieved', event);
 | 
			
		||||
        logger.info('feature created event recieved', event);
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -49,6 +49,7 @@
 | 
			
		||||
    "mocha": "1.20.1",
 | 
			
		||||
    "supertest": "0.13.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 eventType = require('../lib/eventType');
 | 
			
		||||
var eventStore = require('../lib/eventStore');
 | 
			
		||||
var assert = require('assert'),
 | 
			
		||||
    mockery = require('mockery'),
 | 
			
		||||
    eventType = require('../lib/eventType'),
 | 
			
		||||
    eventStore;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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 () {
 | 
			
		||||
        it('should emit event', function (done) {
 | 
			
		||||
            eventStore.once(eventType.featureCreated, function (x) {
 | 
			
		||||
@ -20,7 +39,7 @@ describe('EventStore', function () {
 | 
			
		||||
 | 
			
		||||
            eventStore.create({
 | 
			
		||||
                type: eventType.featureCreated,
 | 
			
		||||
                user: 'ole',
 | 
			
		||||
                createdBy: 'ole',
 | 
			
		||||
                data: eventData
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
var request = require('supertest');
 | 
			
		||||
var request = require('supertest'),
 | 
			
		||||
    mockery = require('mockery'),
 | 
			
		||||
 | 
			
		||||
request = request('http://localhost:4242');
 | 
			
		||||
 | 
			
		||||
@ -6,10 +7,21 @@ describe('The api', function () {
 | 
			
		||||
    var server;
 | 
			
		||||
 | 
			
		||||
    before(function () {
 | 
			
		||||
        mockery.enable({
 | 
			
		||||
            warnOnReplace: false,
 | 
			
		||||
            warnOnUnregistered: false,
 | 
			
		||||
            useCleanCache: true
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        mockery.registerSubstitute('./eventDb', '../test/eventDbMock');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        server = require('../server');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    after(function () {
 | 
			
		||||
        mockery.disable();
 | 
			
		||||
        mockery.deregisterAll();
 | 
			
		||||
        server.server.close();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user