Skip to content

Instantly share code, notes, and snippets.

@ferm10n
Last active July 25, 2017 17:39
Show Gist options
  • Save ferm10n/e653a84891513e77f4ce7ecf3253ef86 to your computer and use it in GitHub Desktop.
Save ferm10n/e653a84891513e77f4ce7ecf3253ef86 to your computer and use it in GitHub Desktop.
const mockRequire = require('mock-require')
const testingUtils = require('./testing_utils') // calls chai.should()
const test = testingUtils.test // exported tap
let mockSql = {
connect: function () {
return Promise.resolve({
on: () => {}
})
},
query: function () {
return Promise.resolve()
}
}
mockSql.Request = function () {
this.query = mockSql.query
}
mockRequire('mssql', mockSql)
let resources = require('../resources')
test('ResourceDescriptor', t => {
t.test('sql errors cause a disconnect', async t => {
let ResourceDescriptor = resources.ResourceDescriptor
let disconnected = false
mockSql.connect = () => Promise.resolve({
on: () => {},
close: () => {
disconnected = true
}
})
mockSql.query = function () {
let err = new Error()
err.code = 'EREQUEST'
return Promise.reject(err)
}
let rd = new ResourceDescriptor()
try {
await rd.doQuery('vplannerdemo', 'oopsie query')
} catch (err) {
err.code.should.equal('EREQUEST')
disconnected.should.equal(true)
}
})
t.test('assignValidator(s)', t => {
let ResourceDescriptor = resources.ResourceDescriptor
t.throws(() => {
new ResourceDescriptor().assignValidator(5)
}, 'fieldName is required')
t.throws(() => {
new ResourceDescriptor().assignValidator('fieldName')
}, 'validator method is required')
// FUTURE: t.test('rejects a null ID')
// FUTURE: t.test('rejects a blank ID')
// FUTURE: t.test('rejects an invalid ID')
t.end()
})
t.test('danger mode', async t => {
let r = new resources.ResourceInserter('table')
r.dangerousMode.should.equal(false)
r.setDangerous(true)
r.dangerousMode.should.equal(true)
await r.insert({
'field': 'value'
})
})
t.end()
})
test('ResourceSelector', async t => {
t.plan(1)
let ResourceSelector = resources.ResourceSelector
// t.skip('use supplied values to generate inputs')
mockSql.connect = function (siteName) {
return Promise.resolve({ on: () => {} })
}
mockSql.query = function () { return Promise.resolve([]) }
try {
await (new ResourceSelector()).doQuery('VPlannerDemo', 'select * from Users where UserName=\'ghostUser\'')
throw new Error()
} catch (err) {
t.equal(err.statusCode, 404, '404 is given on query without results')
}
})
// describe('ResourceUpdater', () => {
// it('should only allow registered fields to be updated')
// })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment