diff --git a/src/appdb.js b/src/appdb.js index b9cf71b47..7588d7d73 100644 --- a/src/appdb.js +++ b/src/appdb.js @@ -60,7 +60,7 @@ var assert = require('assert'), var APPS_FIELDS_PREFIXED = [ 'apps.id', 'apps.appStoreId', 'apps.installationState', 'apps.installationProgress', 'apps.runState', 'apps.health', 'apps.containerId', 'apps.manifestJson', 'apps.httpPort', 'apps.location', 'apps.domain', 'apps.dnsRecordId', - 'apps.accessRestrictionJson', 'apps.restoreConfigJson', 'apps.oldConfigJson', 'apps.updateConfigJson', 'apps.memoryLimit', + 'apps.accessRestrictionJson', 'apps.restoreConfigJson', 'apps.oldConfigJson', 'apps.updateConfigJson', 'apps.memoryLimit', 'apps.altDomain', 'apps.xFrameOptions', 'apps.sso', 'apps.debugModeJson', 'apps.robotsTxt', 'apps.enableBackup', 'apps.creationTime', 'apps.updateTime' ].join(','); @@ -226,6 +226,7 @@ function add(id, appStoreId, manifest, location, domain, portBindings, data, cal database.transaction(queries, function (error) { if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, error.message)); + if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new DatabaseError(DatabaseError.NOT_FOUND, 'no such domain')); if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); callback(null); diff --git a/src/maildb.js b/src/maildb.js index 8f2b63c4b..103fb991f 100644 --- a/src/maildb.js +++ b/src/maildb.js @@ -38,6 +38,7 @@ function add(domain, callback) { database.query('INSERT INTO maildb (domain) VALUES (?)', [ domain ], function (error) { if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS, 'mail domain already exists')); + if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new DatabaseError(DatabaseError.NOT_FOUND), 'no such domain'); if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); callback(null); diff --git a/src/test/database-test.js b/src/test/database-test.js index 6ab6b0600..f4170166b 100644 --- a/src/test/database-test.js +++ b/src/test/database-test.js @@ -19,6 +19,7 @@ var appdb = require('../appdb.js'), groupdb = require('../groupdb.js'), hat = require('hat'), mailboxdb = require('../mailboxdb.js'), + maildb = require('../maildb.js'), settingsdb = require('../settingsdb.js'), tokendb = require('../tokendb.js'), userdb = require('../userdb.js'), @@ -1735,4 +1736,55 @@ describe('database', function () { }); }); }); + + describe('mail', function () { + const DOMAIN_0 = { + domain: 'foobar.com', + zoneName: 'foobar.com', + provider: 'digitalocean', + config: { token: 'abcd' } + }; + + const MAIL_DOMAIN_0 = { + domain: DOMAIN_0.domain, + enabled: false, + relay: { provider: 'cloudron-smtp' }, + catchAll: [ ], + mailFromValidation: true + }; + + before(function (done) { + domaindb.add(DOMAIN_0.domain, { zoneName: DOMAIN_0.zoneName, provider: DOMAIN_0.provider, config: DOMAIN_0.config }, done); + }); + + it('can add mail domain', function (done) { + maildb.add(MAIL_DOMAIN_0.domain, done); + }); + + it('cannot add same domain twice', function (done) { + maildb.add(MAIL_DOMAIN_0.domain, function (error) { + expect(error).to.be.ok(); + expect(error.reason).to.be(DatabaseError.ALREADY_EXISTS); + done(); + }); + }); + + it('cannot add non-existing domain', function (done) { + maildb.add(MAIL_DOMAIN_0.domain + 'nope', function (error) { + expect(error).to.be.ok(); + expect(error.reason).to.be(DatabaseError.NOT_FOUND); + done(); + }); + }); + + it('can get domain', function (done) { + maildb.get(MAIL_DOMAIN_0.domain, function (error, result) { + expect(error).to.equal(null); + expect(result).to.be.an('object'); + expect(result).to.eql(MAIL_DOMAIN_0); + + done(); + }); + }); + }); });