diff --git a/src/appdb.js b/src/appdb.js index 056b8e728..60e0e8fa0 100644 --- a/src/appdb.js +++ b/src/appdb.js @@ -14,6 +14,7 @@ exports = module.exports = { setAddonConfig: setAddonConfig, getAddonConfig: getAddonConfig, getAddonConfigByAppId: getAddonConfigByAppId, + getAddonConfigByName: getAddonConfigByName, unsetAddonConfig: unsetAddonConfig, unsetAddonConfigByAppId: unsetAddonConfigByAppId, @@ -473,3 +474,17 @@ function getAddonConfigByAppId(appId, callback) { callback(null, results); }); } + +function getAddonConfigByName(appId, addonId, name, callback) { + assert.strictEqual(typeof appId, 'string'); + assert.strictEqual(typeof addonId, 'string'); + assert.strictEqual(typeof name, 'string'); + assert.strictEqual(typeof callback, 'function'); + + database.query('SELECT value FROM appAddonConfigs WHERE appId = ? AND addonId = ? AND name = ?', [ appId, addonId, name ], function (error, results) { + if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + + callback(null, results[0].value); + }); +} diff --git a/src/test/database-test.js b/src/test/database-test.js index a92b90add..466041eb3 100644 --- a/src/test/database-test.js +++ b/src/test/database-test.js @@ -789,7 +789,7 @@ describe('database', function () { }); it('setAddonConfig succeeds', function (done) { - appdb.setAddonConfig(APP_1.id, 'addonid1', [ { name: 'ENV1', value: 'env' }, { name: 'ENV2', value: 'env' } ], function (error) { + appdb.setAddonConfig(APP_1.id, 'addonid1', [ { name: 'ENV1', value: 'env' }, { name: 'ENV2', value: 'env2' } ], function (error) { expect(error).to.be(null); done(); }); @@ -805,7 +805,7 @@ describe('database', function () { it('getAddonConfig succeeds', function (done) { appdb.getAddonConfig(APP_1.id, 'addonid1', function (error, results) { expect(error).to.be(null); - expect(results).to.eql([ { name: 'ENV1', value: 'env' }, { name: 'ENV2', value: 'env' } ]); + expect(results).to.eql([ { name: 'ENV1', value: 'env' }, { name: 'ENV2', value: 'env2' } ]); done(); }); }); @@ -813,7 +813,22 @@ describe('database', function () { it('getAddonConfigByAppId succeeds', function (done) { appdb.getAddonConfigByAppId(APP_1.id, function (error, results) { expect(error).to.be(null); - expect(results).to.eql([ { name: 'ENV1', value: 'env' }, { name: 'ENV2', value: 'env' }, { name: 'ENV3', value: 'env' } ]); + expect(results).to.eql([ { name: 'ENV1', value: 'env' }, { name: 'ENV2', value: 'env2' }, { name: 'ENV3', value: 'env' } ]); + done(); + }); + }); + + it('getAddonConfigByName succeeds', function (done) { + appdb.getAddonConfigByName(APP_1.id, 'addonid1', 'ENV2', function (error, value) { + expect(error).to.be(null); + expect(value).to.be('env2'); + done(); + }); + }); + + it('getAddonConfigByName of unknown value succeeds', function (done) { + appdb.getAddonConfigByName(APP_1.id, 'addonid1', 'NOPE', function (error, value) { + expect(error.reason).to.be(DatabaseError.NOT_FOUND); done(); }); });