diff --git a/src/test/user-test.js b/src/test/user-test.js index 1600b09c7..091853fd9 100644 --- a/src/test/user-test.js +++ b/src/test/user-test.js @@ -106,6 +106,30 @@ describe('User', function () { }); }); + describe('getOwner', function() { + before(cleanupUsers); + after(cleanupUsers); + + it('fails because there is no owner', function (done) { + user.getOwner(function (error) { + expect(error.reason).to.be(UserError.NOT_FOUND); + done(); + }); + }); + + it('succeeds', function (done) { + createUser(function (error) { + if (error) return done(error); + + user.getOwner(function (error, owner) { + expect(error).to.be(null); + expect(owner.email).to.be(EMAIL); + done(); + }); + }); + }); + }); + describe('verify', function () { before(createUser); after(cleanupUsers); diff --git a/src/user.js b/src/user.js index ae345294d..d785a4d83 100644 --- a/src/user.js +++ b/src/user.js @@ -17,7 +17,8 @@ exports = module.exports = { setPassword: setPassword, changePassword: changePassword, update: updateUser, - createOwner: createOwner + createOwner: createOwner, + getOwner: getOwner }; var assert = require('assert'), @@ -382,3 +383,11 @@ function createOwner(username, password, email, callback) { }); } +function getOwner(callback) { + userdb.getOwner(function (error, owner) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new UserError(UserError.NOT_FOUND)); + if (error) return callback(new UserError(UserError.INTERNAL_ERROR, error)); + + return callback(null, owner); + }); +} diff --git a/src/userdb.js b/src/userdb.js index 38bf603cc..b0baae525 100644 --- a/src/userdb.js +++ b/src/userdb.js @@ -6,6 +6,7 @@ exports = module.exports = { getByEmail: getByEmail, getByAccessToken: getByAccessToken, getByResetToken: getByResetToken, + getOwner: getOwner, getAll: getAll, getAllAdmins: getAllAdmins, add: add, @@ -56,6 +57,18 @@ function getByEmail(email, callback) { }); } +function getOwner(callback) { + assert.strictEqual(typeof callback, 'function'); + + // the first created user it the admin + database.query('SELECT ' + USERS_FIELDS + ' FROM users WHERE admin=1 ORDER BY createdAt LIMIT 1', function (error, result) { + if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (result.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + + callback(null, result[0]); + }); +} + function getByResetToken(resetToken, callback) { assert.strictEqual(typeof resetToken, 'string'); assert.strictEqual(typeof callback, 'function');