axiom
Version:
Environment setup/runtime standardization for Node.js applications.
131 lines (97 loc) • 3.66 kB
text/coffeescript
path = require 'path'
should = require 'should'
_ = require 'lodash'
logger = require 'torch'
core = require '../lib/core'
proj1Dir = path.join __dirname, '../sample/project1'
describe 'core.init', ->
before ->
@retriever =
projectRoot: proj1Dir
afterEach ->
core.reset()
it 'should load axiom-base', (done) ->
core.init {}, @retriever
core.request 'base.runtime', {}, (err, result) ->
should.not.exist err
should.exist result
result.should.eql {message: 'axiom-base'}
done()
it 'should dynamically load a module based on name', (done) ->
data = {greeting: 'hello!'}
config =
modules: ['sample']
core.init config, @retriever
core.request 'sample.echo', data, (err, result) ->
should.not.exist err
should.exist result
result.should.eql data
done()
it 'should not init a module that is blacklisted', (done) ->
config =
blacklist: ['sample']
modules: ['sample']
core.init config, @retriever
core.request 'sample.echo', {greeting: 'hello!'}, (err, result) ->
should.exist err
err.message.should.eql "No responders for request: 'sample.echo'"
should.not.exist result
done()
it "should load a global 'axiom' file from the project root", (done) ->
internal = require '../lib/core/internal'
axiomFile = require path.join(proj1Dir, 'axiom')
should.exist axiomFile
core.init {}, @retriever
internal.config.should.include axiomFile
done()
it "should assume an 'axiom_configs' folder containing config overrides", (done) ->
core.init {modules: ['sample']}, @retriever
sampleExtension = require path.join(proj1Dir, 'node_modules/axiom-sample')
# Given an extension with a service and corresponding config entry
defaultSampleConfig = sampleExtension.config.whatsMyContext
should.exist defaultSampleConfig
# And a config override in the local project
overrideConfigPath = path.join proj1Dir, 'axiom_configs/sample'
overrideConfig = require(overrideConfigPath).whatsMyContext
should.exist overrideConfig
expectedConfig = _.merge {}, defaultSampleConfig, overrideConfig
# When the service is called
core.request 'sample.whatsMyContext', {}, (err, config) ->
should.not.exist err
# Then the resulting @config should be the default merged with the override
should.exist config
config.should.eql expectedConfig
done()
it "should expose an injected 'retriever' in 'util'", (done) ->
defaultRetriever = @retriever
# Given a mock test 'retriever'
mockRetriever =
retrieve: (name...) -> {}
retrieveExtension: (name...) -> {}
# And a test service
server =
services:
"run/prepare": (args, fin) ->
should.exist @util
# Then @util should include the mock retriever
@util.should.include mockRetriever
# And not the default retriever
@util.should.not.include defaultRetriever
fin()
# When core is initialized with the mock retriever
core.init {}, mockRetriever
# And the service is loaded
core.load "server", server
# And the service is called
core.request "server.run/prepare", {}, (err, result) ->
# It should return without its assertions failing
should.not.exist err
done()
it "should load an appExtension", (done) ->
config =
appExtensions:
doStuff: 'appExtensions/doStuff'
core.init config, @retriever
core.request 'doStuff.doStuff', {}, (err, result) ->
result.should.eql {status: 'stuff is done'}
done()