1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-19 00:15:43 +01:00

fix tests

This commit is contained in:
ivaosthu 2016-11-10 21:15:16 +01:00
parent 0bd0924aee
commit 9f459e600c
13 changed files with 87 additions and 84 deletions

View File

@ -8,11 +8,8 @@ before_script:
- psql -c 'create database unleash_test;' -U postgres - psql -c 'create database unleash_test;' -U postgres
script: script:
- npm install - npm install
- npm run test:ci - npm run test
notifications: notifications:
hipchat:
rooms:
secure: GiIDk52xccnUKnevjLE+w6eUXg0jfV7oOmagw5VnOV5jXGUxdzMk/Q9um+oSClEPE51IvF76zoFEKPIX/CNdjgalEr+CZADy1gene/YRGrNgrXmYYmiU1/dNzelpla1WpKPrY2pkbOgKxrCR9ScID+pMs6vzvJnPwK9vu66W61U=
slack: slack:
secure: MroremSKwtQkwPbrXjgs9hIqKTCDKk7bAIXXzjcS6wXC9uRaFgwFaW8oO3vBxtWa4BL44EQBLE/rboWgqFER62+XgXNgEqGZqrcJHJvby4r+dUNMPI64OZvWdIiydIYxLo8C1C4x5PqBup0xuLq8h/SBnNvA2NLgkjuvzOi+v/Q= secure: MroremSKwtQkwPbrXjgs9hIqKTCDKk7bAIXXzjcS6wXC9uRaFgwFaW8oO3vBxtWa4BL44EQBLE/rboWgqFER62+XgXNgEqGZqrcJHJvby4r+dUNMPI64OZvWdIiydIYxLo8C1C4x5PqBup0xuLq8h/SBnNvA2NLgkjuvzOi+v/Q=
addons: addons:

View File

@ -3,9 +3,9 @@
__Warning: We are in the process of splitting up unleash into multiple packages in this repository, if you want to test the previous package see [previous tag](https://github.com/finn-no/unleash/tree/v1.0.0-alpha.2) __ __Warning: We are in the process of splitting up unleash into multiple packages in this repository, if you want to test the previous package see [previous tag](https://github.com/finn-no/unleash/tree/v1.0.0-alpha.2) __
[![Build Status](https://travis-ci.org/Unleash/unleash.svg?branch=master)](https://travis-ci.org/Unleash/unleash) [![Build Status](https://travis-ci.org/Unleash/unleash.svg?branch=master)](https://travis-ci.org/Unleash/unleash)
[![Coverage Status](https://coveralls.io/repos/github/Unleash/unleash/badge.svg?branch=master&path=packages/unleash-api)](https://coveralls.io/github/Unleash/unleash?branch=master) [![Coverage Status](https://coveralls.io/repos/github/Unleash/unleash/badge.svg?branch=master)](https://coveralls.io/github/Unleash/unleash?branch=master)
[![Dependency Status](https://david-dm.org/Unleash/unleash.svg?path=packages/unleash-api)](https://david-dm.org/Unleash/unleash?path=packages/unleash-api) [![Dependency Status](https://david-dm.org/Unleash/unleash.svg)](https://david-dm.org/Unleash/unleash?path=packages/unleash-api)
[![devDependency Status](https://david-dm.org/Unleash/unleash/dev-status.svg?path=packages/unleash-api)](https://david-dm.org/Unleash/unleash?path=packages/unleash-api#info=devD) [![devDependency Status](https://david-dm.org/Unleash/unleash/dev-status.svg)](https://david-dm.org/Unleash/unleash?path=packages/unleash-api#info=devD)
![Admin UI](https://cloud.githubusercontent.com/assets/572/5873775/3ddc1a66-a2fa-11e4-923c-0a9569605dad.png) ![Admin UI](https://cloud.githubusercontent.com/assets/572/5873775/3ddc1a66-a2fa-11e4-923c-0a9569605dad.png)
[Demo](http://unleash.herokuapp.com/) instance on Heroku [Demo](http://unleash.herokuapp.com/) instance on Heroku
@ -55,18 +55,19 @@ export TEST_DATABASE_URL=postgres://unleash_user:passord@localhost:5432/unleash_
// Install dependencies // Install dependencies
npm install npm install
// Run migrations in your local DBs (via unleash-api) // Build unleash-frontend
npm run db-migrate // (yes this is a bit wierd and be easier when we have a release of the frontend artifact).
DATABASE_URL=$TEST_DATABASE_URL npm run db-migrate // You can of course "npm link unleash-frontend" instead
cd node_modules/unleash-frontend && npm install
// Start server // Start server in development
npm start npm start:dev
// Admin dashboard // Admin dashboard
http://localhost:4242 http://localhost:4242
// Feature API: // Feature API:
http://localhost:4242/features http://localhost:4242/api/features
// Execute tests in all packages: // Execute tests in all packages:
npm test npm test

View File

@ -4,7 +4,7 @@
process.env.NODE_ENV = 'production'; process.env.NODE_ENV = 'production';
const program = require('commander'); const program = require('commander');
const unleash = require('../server.js'); const unleash = require('../server-prod.js');
program program

View File

@ -14,8 +14,7 @@ class ClientMetricsStore {
constructor (db) { constructor (db) {
this.db = db; this.db = db;
this._removeMetricsOlderThanOneHour(); setTimeout(() => this._removeMetricsOlderThanOneHour(), 10).unref();
setInterval(() => this._removeMetricsOlderThanOneHour(), 60 * 60 * 1000).unref(); setInterval(() => this._removeMetricsOlderThanOneHour(), 60 * 60 * 1000).unref();
} }

View File

@ -3,23 +3,14 @@
const DBMigrate = require('db-migrate'); const DBMigrate = require('db-migrate');
const path = require('path'); const path = require('path');
function findUnleashApiRoot () {
try {
return path.dirname(require.resolve('unleash-api/package.json'));
} catch (e) {}
try {
return path.dirname(require.resolve('../unleash-api/package.json'));
} catch (e) {}
return process.cwd();
}
function migrateDb (dbUri) { function migrateDb (dbUri) {
console.log(dbUri);
const dbmigrate = DBMigrate.getInstance(true, { const dbmigrate = DBMigrate.getInstance(true, {
cwd: findUnleashApiRoot(), cwd: __dirname,
config: { custom: dbUri }, config: { "custom": dbUri},
env: 'custom' } env: 'custom' }
); );
return dbmigrate.up(); return dbmigrate.up();
} }
module.exports = migrateDb; module.exports = migrateDb;

View File

@ -33,16 +33,14 @@
"unleash": "./bin/unleash.js" "unleash": "./bin/unleash.js"
}, },
"scripts": { "scripts": {
"db-migrate-and-start": "npm run db-migrate && npm run start", "start": "node server-dev.js",
"start": "node dev-server.js", "start:dev": "NODE_ENV=development supervisor --ignore ./node_modules/ server-dev.js",
"start:dev": "NODE_ENV=development supervisor --ignore ./node_modules/ dev-server.js",
"start:dev:pg": "pg_virtualenv npm run start:dev:pg-chain", "start:dev:pg": "pg_virtualenv npm run start:dev:pg-chain",
"start:dev:pg-chain": "export DATABASE_URL=postgres://$PGUSER:$PGPASSWORD@localhost:$PGPORT/postgres ; db-migrate up && npm run start:dev", "start:dev:pg-chain": "export DATABASE_URL=postgres://$PGUSER:$PGPASSWORD@localhost:$PGPORT/postgres ; db-migrate up && npm run start:dev",
"db-migrate": "db-migrate up", "db-migrate": "db-migrate up",
"db-migrate:down": "db-migrate down", "db-migrate:down": "db-migrate down",
"test": "export PORT=4243 ; mocha --recursive test && npm run test:coverage", "test": "export PORT=4243 ; mocha --recursive test && npm run test:coverage",
"test:unit": "mocha test/unit/**/*.js ", "test:unit": "mocha test/unit/**/*.js ",
"test:ci": "npm run db-migrate && npm run test",
"test:docker": "./scripts/docker-postgres.sh", "test:docker": "./scripts/docker-postgres.sh",
"test:watch": "mocha --watch test test/*", "test:watch": "mocha --watch test test/*",
"test:pg-virtualenv": "pg_virtualenv npm run test:pg-virtualenv-chai", "test:pg-virtualenv": "pg_virtualenv npm run test:pg-virtualenv-chai",
@ -52,10 +50,10 @@
}, },
"dependencies": { "dependencies": {
"body-parser": "1.15.2", "body-parser": "1.15.2",
"cookie-parser": "^1.4.1",
"commander": "^2.9.0", "commander": "^2.9.0",
"db-migrate": "0.10.0-beta.17", "cookie-parser": "^1.4.1",
"db-migrate-pg": "0.1.10", "db-migrate": "0.10.0-beta.20",
"db-migrate-pg": "0.1.11",
"deep-diff": "^0.3.3", "deep-diff": "^0.3.3",
"errorhandler": "^1.4.3", "errorhandler": "^1.4.3",
"express": "4.14.0", "express": "4.14.0",
@ -67,6 +65,7 @@
"moment": "^2.15.2", "moment": "^2.15.2",
"pg": "^6.1.0", "pg": "^6.1.0",
"serve-favicon": "^2.3.0", "serve-favicon": "^2.3.0",
"unleash-frontend": "github:unleash/unleash-frontend",
"yallist": "^2.0.0" "yallist": "^2.0.0"
}, },
"devDependencies": { "devDependencies": {

View File

@ -1,8 +1,16 @@
'use strict'; 'use strict';
const request = require('./test-helper').request; const specHelper = require('./util/test-helper');
let request;
describe('The event api', () => { describe('The event api', () => {
beforeEach(done => {
specHelper.setupApp().then((app) => {
request = app.request;
done();
});
});
it('returns events', done => { it('returns events', done => {
request request
.get('/api/events') .get('/api/events')

View File

@ -2,17 +2,19 @@
const logger = require('../../lib/logger'); const logger = require('../../lib/logger');
const assert = require('assert'); const assert = require('assert');
const specHelper = require('./test-helper'); const specHelper = require('./util/test-helper');
const request = specHelper.request;
const stringify = function (o) { const stringify = function (o) {
return JSON.stringify(o, null, ' '); return JSON.stringify(o, null, ' ');
}; };
let request;
describe('The features api', () => { describe('The features api', () => {
beforeEach(done => { beforeEach(done => {
specHelper.db.resetAndSetup() specHelper.setupApp().then((app) => {
.then(done.bind(null, null)) request = app.request;
.catch(done); done();
});
}); });
it('returns three feature toggles', done => { it('returns three feature toggles', done => {

View File

@ -1,18 +1,21 @@
'use strict'; 'use strict';
const assert = require('assert'); const assert = require('assert');
const specHelper = require('./test-helper'); const specHelper = require('./util/test-helper');
const request = specHelper.request;
const stringify = function (o) { const stringify = function (o) {
return JSON.stringify(o, null, ' '); return JSON.stringify(o, null, ' ');
}; };
let request;
describe('The archive features api', () => { describe('The archive features api', () => {
beforeEach(done => { beforeEach(done => {
specHelper.db.resetAndSetup() specHelper.setupApp().then((app) => {
.then(done.bind(null, null)) request = app.request;
.catch(done); done();
}); });
});
it('returns three archived toggles', done => { it('returns three archived toggles', done => {
request request

View File

@ -1,9 +1,17 @@
'use strict'; 'use strict';
const specHelper = require('./test-helper'); const specHelper = require('./util/test-helper');
const request = specHelper.request;
let request;
describe('The routes', () => { describe('The routes', () => {
beforeEach(done => {
specHelper.setupApp().then((app) => {
request = app.request;
done();
});
});
describe('healthcheck', () => { describe('healthcheck', () => {
it('returns health good', done => { it('returns health good', done => {
request.get('/health') request.get('/health')

View File

@ -1,13 +1,14 @@
'use strict'; 'use strict';
const specHelper = require('./test-helper'); const specHelper = require('./util/test-helper');
const request = specHelper.request; let request;
describe('The strategy api', () => { describe('The strategy api', () => {
beforeEach(done => { beforeEach(done => {
specHelper.db.resetAndSetup() specHelper.setupApp().then((app) => {
.then(done.bind(null, null)) request = app.request;
.catch(done); done();
});
}); });
it('gets all strategies', done => { it('gets all strategies', done => {

View File

@ -2,30 +2,25 @@
process.env.NODE_ENV = 'test'; process.env.NODE_ENV = 'test';
// Mute migrator
require('db-migrate-shared').log.silence(true);
const BPromise = require('bluebird'); const BPromise = require('bluebird');
let request = require('supertest'); let supertest = require('supertest');
const migrator = require('../../migrator');
const options = { const options = {
databaseUri: require('./database-config').getDatabaseUri(), databaseUri: require('./database-config').getDatabaseUri(),
}; };
const { createStores } = require('../../lib/db'); const migrator = require('../../../migrator');
const { createStores } = require('../../../lib/db');
const stores = createStores(options); process.env.DATABASE_URL = options.databaseUri
const app = require('../../app')({ const createApp = migrator(options.databaseUri).then(() => {
baseUriPath: '', const stores = createStores(options);
stores, const app = require('../../../app')({stores});
return { stores, request: supertest(app) };
}); });
BPromise.promisifyAll(request); function createStrategies (stores) {
request = request(app);
function createStrategies () {
return BPromise.map([ return BPromise.map([
{ {
name: 'default', name: 'default',
@ -42,7 +37,7 @@ function createStrategies () {
], strategy => stores.strategyStore._createStrategy(strategy)); ], strategy => stores.strategyStore._createStrategy(strategy));
} }
function createFeatures () { function createFeatures (stores) {
return BPromise.map([ return BPromise.map([
{ {
name: 'featureX', name: 'featureX',
@ -106,29 +101,28 @@ function createFeatures () {
], feature => stores.featureToggleStore._createFeature(feature)); ], feature => stores.featureToggleStore._createFeature(feature));
} }
function destroyStrategies () { function destroyStrategies (stores) {
return stores.db('strategies').del(); return stores.db('strategies').del();
} }
function destroyFeatures () { function destroyFeatures (stores) {
return stores.db('features').del(); return stores.db('features').del();
} }
function resetDatabase () { function resetDatabase (stores) {
return BPromise.all([destroyStrategies(), destroyFeatures()]); return BPromise.all([destroyStrategies(stores), destroyFeatures(stores)]);
} }
function setupDatabase () { function setupDatabase (stores) {
return BPromise.all([migrator(options.databaseUri), createStrategies(), createFeatures()]); return BPromise.all([createStrategies(stores), createFeatures(stores)]);
} }
module.exports = { module.exports = {
request, setupApp () {
db: { return createApp.then((app) => {
reset: resetDatabase, return resetDatabase(app.stores)
setup: setupDatabase, .then(() => setupDatabase(app.stores))
resetAndSetup () { .then(() => app);
return resetDatabase().then(setupDatabase); });
}, }
},
}; };