refactor(init logic): changes init logic so tests can start & stop a full server independently
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
'use strict'
|
||||
|
||||
let http = require( 'http' )
|
||||
const express = require( 'express' )
|
||||
const logger = require( 'morgan-debug' )
|
||||
const bodyParser = require( 'body-parser' )
|
||||
@@ -7,13 +8,17 @@ const debug = require( 'debug' )( 'speckle:errors' )
|
||||
const { ApolloServer } = require( 'apollo-server-express' )
|
||||
|
||||
const { contextApiTokenHelper } = require( './modules/shared' )
|
||||
const knex = require('./db/knex')
|
||||
const knex = require( './db/knex' )
|
||||
|
||||
/**
|
||||
* Initialises the express application together with the graphql server middleware.
|
||||
* @return {[type]} an express applicaiton and the graphql server
|
||||
*/
|
||||
exports.init = async ( ) => {
|
||||
|
||||
const app = express( )
|
||||
|
||||
await knex.migrate.latest()
|
||||
|
||||
await knex.migrate.latest( )
|
||||
|
||||
if ( process.env.NODE_ENV !== 'test' ) {
|
||||
app.use( logger( 'speckle', 'dev', {} ) )
|
||||
@@ -53,4 +58,41 @@ exports.init = async ( ) => {
|
||||
} )
|
||||
|
||||
return { app, graphqlServer }
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a http server, hoisting the express app to it.
|
||||
* @param {[type]} app [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
exports.startHttp = async ( app ) => {
|
||||
let port = process.env.PORT || 3000
|
||||
app.set( 'port', port )
|
||||
|
||||
let server = http.createServer( app )
|
||||
|
||||
server.on( 'error', error => {
|
||||
let bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port
|
||||
|
||||
switch ( error.code ) {
|
||||
case 'EACCES':
|
||||
console.error( bind + ' whattt requires elevated privileges' )
|
||||
process.exit( 1 )
|
||||
break
|
||||
case 'EADDRINUSE':
|
||||
console.error( bind + ' is already in use' )
|
||||
process.exit( 1 )
|
||||
break
|
||||
default:
|
||||
throw error
|
||||
}
|
||||
} )
|
||||
|
||||
server.on( 'listening', ( ) => {
|
||||
console.log( `Listening on ${server.address().port}` )
|
||||
} )
|
||||
|
||||
server.listen( port )
|
||||
|
||||
return { server }
|
||||
}
|
||||
@@ -3,42 +3,9 @@
|
||||
'use strict'
|
||||
|
||||
let debug = require( 'debug' )( 'www:server' )
|
||||
let http = require( 'http' )
|
||||
let { init, startHttp } = require( '../app' )
|
||||
|
||||
|
||||
let { init } = require( '../app' )
|
||||
|
||||
init( ).
|
||||
then( ( { app } ) => {
|
||||
let port = process.env.PORT || 3000
|
||||
|
||||
app.set( 'port', port )
|
||||
|
||||
let server = http.createServer( app )
|
||||
|
||||
server.on( 'error', error => {
|
||||
let bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port
|
||||
|
||||
switch ( error.code ) {
|
||||
case 'EACCES':
|
||||
console.error( bind + ' whattt requires elevated privileges' )
|
||||
process.exit( 1 )
|
||||
break
|
||||
case 'EADDRINUSE':
|
||||
console.error( bind + ' is already in use' )
|
||||
process.exit( 1 )
|
||||
break
|
||||
default:
|
||||
throw error
|
||||
}
|
||||
} )
|
||||
|
||||
server.on( 'listening', ( ) => {
|
||||
debug( `Listening on ${server.address().port}` )
|
||||
} )
|
||||
|
||||
server.listen( port )
|
||||
} )
|
||||
.catch( err => {
|
||||
debug( err )
|
||||
})
|
||||
init( ).then( ( { app } ) => startHttp( app ) )
|
||||
.catch( err => {
|
||||
debug( err )
|
||||
} )
|
||||
@@ -3,7 +3,7 @@ const chaiHttp = require( 'chai-http' )
|
||||
const assert = require( 'assert' )
|
||||
const root = require( 'app-root-path' )
|
||||
|
||||
const { init } = require( `${root}/app` )
|
||||
const { init, startHttp } = require( `${root}/app` )
|
||||
|
||||
const expect = chai.expect
|
||||
chai.use( chaiHttp )
|
||||
@@ -15,34 +15,37 @@ const { createUser, createToken } = require( '../users/services' )
|
||||
describe( 'GraphQL API Core', ( ) => {
|
||||
let userA = { name: 'd1', username: 'd1', email: 'd.1@speckle.systems', password: 'wow' }
|
||||
let userB = { name: 'd2', username: 'd2', email: 'd.2@speckle.systems', password: 'wow' }
|
||||
let app
|
||||
let testServer
|
||||
let addr
|
||||
|
||||
before( async ( ) => {
|
||||
await knex.migrate.latest( )
|
||||
// let app = await init( )
|
||||
require( `${root}/bin/www` )
|
||||
|
||||
let { app } = await init( )
|
||||
let { server } = await startHttp( app )
|
||||
testServer = server
|
||||
|
||||
userA.id = await createUser( userA )
|
||||
userA.token = `Bearer ${(await createToken( userA.id, 'test token user A', [ 'streams:read', 'streams:write', 'user:read', 'token:create', 'token:read' ] ))}`
|
||||
userB.id = await createUser( userB )
|
||||
userB.token = `Bearer ${(await createToken( userB.id, 'test token user B', [ 'streams:read', 'streams:write', 'user:read', 'token:create', 'token:read' ] ))}`
|
||||
|
||||
addr = `http://localhost:${process.env.PORT || 3000}`
|
||||
} )
|
||||
|
||||
after( async ( ) => {
|
||||
await knex.migrate.rollback( )
|
||||
testServer.close()
|
||||
} )
|
||||
|
||||
describe( 'Mutations', ( ) => {
|
||||
it( 'Should create a stream', async ( ) => {
|
||||
// const res = await chai.request(app).post('/graphql').send().set()
|
||||
assert.fail('todo')
|
||||
} )
|
||||
} )
|
||||
|
||||
describe( 'Queries', ( ) => {
|
||||
it( 'Should retrieve my profile', async ( ) => {
|
||||
const res = await chai.request( 'http://localhost:3000' ).post( '/graphql' ).set( 'Authorization', userA.token ).send( {
|
||||
const res = await chai.request( addr ).post( '/graphql' ).set( 'Authorization', userA.token ).send( {
|
||||
query: `
|
||||
{
|
||||
user {
|
||||
|
||||
+4
-4
@@ -4,10 +4,10 @@
|
||||
"description": "speckle server",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "NODE_ENV=development DEBUG=www:server,speckle:* nodemon ./bin/www --watch . --watch ./bin/www -e js,graphql,env",
|
||||
"test": "DEBUG=speckle:test,speckle:errors NODE_ENV=test nyc nyc --reporter=html mocha -s 0 --exit",
|
||||
"test-watch": "DEBUG=speckle:test,speckle:errors NODE_ENV=test mocha --watch -s 0 --exit",
|
||||
"test-graph": "DEBUG=speckle:test,speckle:errors NODE_ENV=test mocha ./modules/core/tests/graph.spec.js --watch -s 0 --exit --no-config"
|
||||
"dev": "PORT=3000 NODE_ENV=development DEBUG=www:server,speckle:* nodemon ./bin/www --watch . --watch ./bin/www -e js,graphql,env",
|
||||
"test": "PORT=3001 DEBUG=speckle:test,speckle:errors NODE_ENV=test nyc nyc --reporter=html mocha -s 0 --exit",
|
||||
"test-watch": "PORT=3001 DEBUG=speckle:test,speckle:errors NODE_ENV=test mocha --watch -s 0 --exit",
|
||||
"test-graph": "PORT=3001 DEBUG=speckle:test,speckle:errors NODE_ENV=test mocha ./modules/core/tests/graph.spec.js --watch -s 0 --exit --no-config"
|
||||
},
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
|
||||
Reference in New Issue
Block a user