diff --git a/src/mailboxdb.js b/src/mailboxdb.js index 37f15e46f..d040101b3 100644 --- a/src/mailboxdb.js +++ b/src/mailboxdb.js @@ -18,6 +18,8 @@ exports = module.exports = { getByOwnerId: getByOwnerId, delByOwnerId: delByOwnerId, + updateName: updateName, + _clear: clear, TYPE_USER: 'user', @@ -80,6 +82,20 @@ function delByOwnerId(id, callback) { }); } +function updateName(oldName, newName, callback) { + assert.strictEqual(typeof oldName, 'string'); + assert.strictEqual(typeof newName, 'string'); + assert.strictEqual(typeof callback, 'function'); + + database.query('UPDATE mailboxes SET name=? WHERE name=?', [ newName, oldName ], function (error, result) { + if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, 'mailbox already exists')); + if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + + callback(null); + }); +} + function getMailbox(name, callback) { assert.strictEqual(typeof name, 'string'); assert.strictEqual(typeof callback, 'function'); diff --git a/src/test/database-test.js b/src/test/database-test.js index 1753be61c..05c69f04b 100644 --- a/src/test/database-test.js +++ b/src/test/database-test.js @@ -1440,6 +1440,23 @@ describe('database', function () { }); }); + it('can change name', function (done) { + mailboxdb.updateName('support', 'support3', function (error) { + expect(error).to.be(null); + + mailboxdb.updateName('support3', 'support', done); + }); + }); + + it('cannot change name to existing one', function (done) { + mailboxdb.updateName('support', 'support2', function (error) { + expect(error).to.be.ok(); + expect(error.reason).to.eql(DatabaseError.ALREADY_EXISTS); + + done(); + }); + }); + it('unset aliases', function (done) { mailboxdb.setAliasesForName('support', [ ], function (error) { expect(error).to.be(null);