UNPKG

gardener

Version:

A node process manager for couchapps that depend on npm modules, or have npm modules bundled with them.

256 lines (218 loc) 9.47 kB
var assert = require('assert'); var generate_watch_list = require('../lib/watchlist'), utils = require('../lib/utils'); describe('Build watch tree', function(){ it('should watch all dbs', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a','b','c','d','e']; var includes = []; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('couch', wl.base_type); assert.deepEqual(['a','b','c','d','e'], wl.dbs); }); it('should watch one db', function(){ var base_url = 'http://localhost:5984/db'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['db','b','c','d','e']; var includes = []; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('db', wl.base_type); assert.deepEqual(['db'], wl.dbs); }); it('should watch nothing, if db not available', function(){ var base_url = 'http://localhost:5984/db'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a','b','c','d','e']; var includes = []; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('db', wl.base_type); assert.deepEqual([], wl.dbs); }); it('should watch one design doc', function(){ var base_url = 'http://localhost:5984/db/_design/abba'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['db','b','c','d','e']; var includes = []; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('design', wl.base_type); assert.deepEqual(['db'], wl.dbs); }); it('should watch nothing, if design doc db not available', function(){ var base_url = 'http://localhost:5984/db/_design/abba'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a','b','c','d','e']; var includes = []; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('design', wl.base_type); assert.deepEqual([], wl.dbs); }); it('Exclude Filter', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a','b','c','d','e']; var includes = []; var excludes = ["b" ,"c" , "x", "s"]; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('couch', wl.base_type); assert.deepEqual(['a','d','e'], wl.dbs); }); it('Include Filter. Only poll specified databases, core, awesome and cool, and the design doc hot in the maybe db', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a','b','c','d','e']; var includes = ["b" ,"c" , "x", "s"]; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('couch', wl.base_type); assert.deepEqual(['b','c'], wl.dbs); }); it('handles ddoc includes.', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a']; var includes = ['a/_design/awesome']; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.deepEqual(['a'], wl.dbs); assert.deepEqual(['_design/awesome'], wl.ddocs.includes.a); }); it('handles ddoc excludes with an exclude.', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a']; var includes = []; var excludes = ['a', 'a/_design/awesome']; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.deepEqual([], wl.dbs); assert.deepEqual(['_design/awesome'], wl.ddocs.excludes.a); }); it('handles ddoc excludes with an exclude 2.', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a','b']; var includes = ['a']; var excludes = ['a/_design/awesome']; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.deepEqual(['a'], wl.dbs); assert.deepEqual(['_design/awesome'], wl.ddocs.excludes.a); }); it('handles ddoc excludes with an exclude 3.', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['a','b']; var includes = []; var excludes = ['a/_design/awesome']; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.deepEqual(['a', 'b'], wl.dbs); assert.deepEqual(['_design/awesome'], wl.ddocs.excludes.a); }); it('takes a db as a base url, and design docs includes dont need db name', function(){ var base_url = 'http://localhost:5984/db'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['db','b','c','d','e']; var includes = ['_design/awesome']; var excludes = []; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('db', wl.base_type); assert.deepEqual(['db'], wl.dbs); assert.deepEqual(['_design/awesome'], wl.ddocs.includes.db); }); it('takes a db as a base url, and design docs excludes dont need db name', function(){ var base_url = 'http://localhost:5984/db'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['db','b','c','d','e']; var includes = []; var excludes = ['_design/awesome']; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('db', wl.base_type); assert.deepEqual(['db'], wl.dbs); assert.deepEqual(['_design/awesome'], wl.ddocs.excludes.db); }); it('Mix and match 2. dbs and ddocs. Exclude always wins. In this case gardener has nothing to watch', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['code','b','c','d','e']; var includes = ['code/_design/neat']; var excludes = ['code']; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('couch', wl.base_type); assert.deepEqual(['_design/neat'], wl.ddocs.includes.code); assert.deepEqual([], wl.dbs); }); it('Mix and match 3. dbs and ddocs. Exclude the sucky design doc', function(){ var base_url = 'http://localhost:5984/'; var couch_url = 'http://localhost:5984/'; var all_dbs = ['code','b','c','d','e']; var includes = ['code']; var excludes = ['code/_design/sucky']; var wl = generate_watch_list(base_url, couch_url, all_dbs, includes, excludes); assert.equal('couch', wl.base_type); assert.deepEqual(['_design/sucky'], wl.ddocs.excludes.code); assert.deepEqual(['code'], wl.dbs); }); }); describe('Filter ddocs from all design docs', function(){ it('should handle an undefined filter', function(){ var rows = [ {id: '_design/cool'}, {id: '_design/uncool'} ], filter = null; var finish = utils.filterDDocs(rows, filter); assert.equal(2, finish.length); }); it('should handle an undefined includes', function(){ var rows = [ {id: '_design/a'}, {id: '_design/b'} ], filter = { includes: null, excludes: [] }; var finish = utils.filterDDocs(rows, filter); assert.equal(2, finish.length); }); it('should handle an undefined excludes', function(){ var rows = [ {id: '_design/a'}, {id: '_design/b'} ], filter = { includes: [], excludes: null }; var finish = utils.filterDDocs(rows, filter); assert.equal(2, finish.length); }); it('should include a single ddoc', function(){ var rows = [ {id: '_design/cool'}, {id: '_design/uncool'} ], filter = { includes: ['_design/cool'] }; var finish = utils.filterDDocs(rows, filter); assert.deepEqual([{'id': '_design/cool'}], finish); }); it('should exclude a single ddoc', function(){ var rows = [ {id: '_design/cool'}, {id: '_design/uncool'} ], filter = { excludes: ['_design/uncool'] }; var finish = utils.filterDDocs(rows, filter); assert.deepEqual([{'id': '_design/cool'}], finish); }); }); describe('utils', function(){ it('should get the ddoc name', function(){ var ddoc = 'http://localhost:5984/kujua-base/_design/kujua-base'; var result = utils.get_ddoc_name(ddoc); assert.equal('kujua-base', result); }); });