This commit is contained in:
Josh Harvey 2017-03-22 00:51:51 +02:00
parent 340ad2b518
commit b7a93b89f5
5 changed files with 159 additions and 77 deletions

View file

@ -6,68 +6,27 @@ const argv = require('minimist')(process.argv.slice(2))
const pify = require('pify')
const db = require('./db')
const schema = require('../lamassu-schema.json')
const mapWithKey = _.map.convert({cap: false})
let settingsCache
function expandFixture (fixture) {
const deviceId = argv.machine
function findField (code) {
const field = _.find(_.matchesProperty('code', code), schema.fields)
const group = _.find(r => _.includes(code, r.fields), schema.groups)
if (!field || !group) {
throw new Error('No such field from fixture: ' + code)
}
return _.merge({cryptoScope: group.cryptoScope, machineScope: group.machineScope}, field)
}
function expand (value, code) {
const field = findField(code)
const machine = field.machineScope === 'specific'
? deviceId
: 'global'
const crypto = field.cryptoScope === 'specific'
? 'BTC'
: 'global'
return {
fieldLocator: {
fieldScope: {crypto, machine},
code,
fieldType: field.fieldType,
fieldClass: field.fieldClass
},
fieldValue: {
fieldType: field.fieldType,
value
}
}
}
return mapWithKey(expand, fixture)
}
function loadFixture () {
const fixture = argv.fixture
const deviceId = argv.machine
const machine = argv.machine
if (fixture && !deviceId) throw new Error('Missing --machine parameter for --fixture')
if (fixture && !machine) throw new Error('Missing --machine parameter for --fixture')
const fixturePath = fixture => path.resolve(__dirname, '..', 'test', 'fixtures', fixture + '.json')
const promise = fixture
? pify(fs.readFile)(fixturePath(fixture)).then(JSON.parse)
: Promise.resolve({})
: Promise.resolve([])
return promise
.then(expandFixture)
.then(values => _.map(v => {
return (v.fieldLocator.fieldScope.machine === 'machine')
? _.set('fieldLocator.fieldScope.machine', machine, v)
: v
}, values))
}
function isEquivalentField (a, b) {
@ -112,13 +71,15 @@ function loadConfig (versionId) {
}
function loadLatestConfig () {
if (argv.fixture) return loadFixture()
const sql = `select data
from user_config
where type=$1
order by id desc
limit 1`
return db.oneOrNone(sql, ['config'])
db.oneOrNone(sql, ['config'])
.then(row => row ? row.data.config : [])
}