UNPKG

node-sitefile

Version:

Bootstrap Express webserver for misc. resources using Sitefile

205 lines (150 loc) 5.78 kB
# Id: node-sitefile/0.0.5 test/mocha/lib_sitefile_index.coffee chai = require 'chai' expect = chai.expect path = require 'path' _ = require 'lodash' lib = require '../../lib/sitefile' pkg = require '../../package.json' Ajv = require 'ajv' tu = require '../test-utils' describe 'Module sitefile', -> lib.log_enabled = false describe '.version', -> it 'should be valid semver', -> expect( lib.version ).to.match /^[0-9]+\.[0-9]+\.[0-9]+/ it 'should equal package versions', -> expect( lib.version ).to.eql pkg.version describe '.get_local_sitefile_name', -> it 'should use options', -> ctx = {} sitefile_fn = lib.get_local_sitefile_name ctx expect( _.keys( ctx) ).to.eql [ 'basename', 'exts', 'fn', 'ext', 'lfn' ] it 'should export default option values', -> ctx = {} sitefile_fn = lib.get_local_sitefile_name ctx expect( ctx.lfn ).to.eql sitefile_fn expect( ctx.fn ).to.eql 'Sitefile.yaml' expect( ctx.basename ).to.eql 'Sitefile' expect( ctx.ext ).to.eql '.yaml' expect( ctx.exts ).to.eql [ '.json' '.yml' '.yaml' ] it 'should pick up the local Sitefile.yaml', -> ctx = {} sitefile_fn = lib.get_local_sitefile_name ctx lfn = path.join process.cwd(), 'Sitefile.yaml' expect( sitefile_fn ).to.eql( lfn ) it 'should pick up Sitefiles for all extensions' it 'should throw "No Sitefile"' describe '.prepare_context', -> it 'Should return an object', -> ctx = lib.prepare_context() #expect( ctx ).to.eqlDefined() #expect( ctx ).to.eqlTruthy() expect( ctx ).to.be.an.object describe 'accepts options', -> it 'object', -> ctx = {} lib.prepare_context ctx it 'Should export options', -> ctx = {} lib.prepare_context ctx sfctx = ( "basename bundles config config_envs config_name cwd envname "+ "ext exts fn lfn log noderoot paths pkg pkg_file proc routes "+ "site sitefile sitefilerc static verbose version" ).split ' ' ctxkys = _.keys( ctx ) ctxkys.sort() expect( ctxkys ).to.eql sfctx it 'Should load the config', -> ctx = lib.prepare_context() expect( ctx.config ).to.be.an.object it 'Should load rc ', -> ctx = lib.prepare_context() expect( ctx.sitefilerc ).to.eql pkg.version it 'Should load the sitefile', -> ctx = lib.prepare_context() expect( ctx.sitefile ).to.be.an.object expect( ctx.sitefile.sitefile ).to.eql pkg.version describe 'local Sitefile', -> it 'contains references, globalized after loading', -> ctx = lib.prepare_context() expect( ctx.get 'sitefile.options.global.rst2html.stylesheets' ).to.eql { $ref: '#/sitefile/defs/stylesheets/default' } obj = ctx.resolve 'sitefile.options.global.rst2html.stylesheets' expect( obj ).to.be.an.array describe 'load sitefile', -> sitefile = { sitefile: '0.0.4' routes: _du: 'du:**/*.rst' _gv: 'gv:**/*.gv' '': 'redir:main' 'default.css': 'sass:default.sass' 'default.js': 'coffee:default.coffee' path: "Sitefile.yml" } it 'has expected sitefile routes/options (site 2)', -> stu = new tu.SitefileTestUtils 'example/site/2' obj = stu.get_sitefile() expect( obj ).to.eql sitefile sitefile_2 = { sitefile: '0.0.5-dev' routes: {} options: global: du: link_stylesheets: true scripts: $ref: '#/sitefile/defs/scripts/default' defs: scripts: default: [ '/vendor/jquery.js' ] path: "Sitefile.yml" } it 'has expected sitefile routes/options (site 3, JSON)', -> stu = new tu.SitefileTestUtils 'example/site/3' obj = stu.get_sitefile() sitefile_2.path = "Sitefile.json" expect( obj ).to.eql sitefile_2 it 'has expected sitefile routes/options (site 4, YAML)', -> stu = new tu.SitefileTestUtils 'example/site/4' obj = stu.get_sitefile() sitefile_2.path = "Sitefile.yml" expect( obj ).to.eql sitefile_2 describe "uses JSON schema", -> stu = new tu.SitefileTestUtils() stu.load_schema 'ex1', 'example/json-schema.json' stu.load_schema 'ac_full', 'var/autocomplete-schema.json' stu.load_schema 'ac_simple', 'var/autocomplete-schema-1.json' it "to validate and invalidate data", -> ex1 = stu.schema.ex1 expect( ex1 1.5 ).to.equal true expect( ex1 5 ).to.equal true expect( ex1 4 ).to.equal true expect( ex1 4.5 ).to.equal false expect( ex1 2.5 ).to.equal true expect( ex1 3.5 ).to.equal false ac_simple = stu.schema.ac_simple expect( ac_simple ["string"] ).to.equal true expect( ac_simple [{"foo":"string"}] ).to.equal false expect( ac_simple [{"label":"Foo"}] ).to.equal false ac_full = stu.schema.ac_full expect( ac_full ["string"] ).to.equal true expect( ac_full [{"foo":"string"}] ).to.equal false expect( ac_full [{"label":"Foo"}] ).to.equal true expect( ac_full [{"category":"Foo"}] ).to.equal false expect( ac_full [{"label":"Foo", "category":"Notes"}] ).to.equal true it "to validate AC data (Simple)", -> stu.req_json_file_valid \ "../example/autocomplete-data-2.json", stu.schema.ac_simple it "to (in)validate AC data (Full)", -> v = stu.schema.ac_full Promise.all [ stu.req_json_file_valid "../example/autocomplete-data.json", v stu.req_json_file_valid "../example/data.json", v, false stu.req_json_file_valid "../example/autocomplete-data-1.json", v, false ]