diff --git a/src/test/acme2-test.js b/src/test/acme2-test.js index f6965221b..63dcfa47e 100644 --- a/src/test/acme2-test.js +++ b/src/test/acme2-test.js @@ -10,8 +10,10 @@ const acme2 = require('../acme2.js'), expect = require('expect.js'); describe('Acme2', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup } = common; + + before(setup); + after(cleanup); describe('getChallengeSubdomain', function () { it('non-wildcard', function () { diff --git a/src/test/apppasswords-test.js b/src/test/apppasswords-test.js index 83e12e2cc..dfa0c3096 100644 --- a/src/test/apppasswords-test.js +++ b/src/test/apppasswords-test.js @@ -14,19 +14,19 @@ const appPasswords = require('../apppasswords.js'), users = require('../users.js'); describe('App passwords', function () { - const { setup, cleanup, ADMIN } = common; + const { setup, cleanup, admin } = common; before(setup); after(cleanup); let id, password; it('cannot add bad app password', async function () { - const [error] = await safe(appPasswords.add(ADMIN.id, 'appid', 'x'.repeat(201))); + const [error] = await safe(appPasswords.add(admin.id, 'appid', 'x'.repeat(201))); expect(error.reason).to.be(BoxError.BAD_FIELD); }); it('can add app password', async function () { - const result = await appPasswords.add(ADMIN.id, 'appid', 'spark'); + const result = await appPasswords.add(admin.id, 'appid', 'spark'); expect(result.id).to.be.a('string'); expect(result.password).to.be.a('string'); id = result.id; @@ -46,7 +46,7 @@ describe('App passwords', function () { }); it('can get app passwords', async function () { - const results = await appPasswords.list(ADMIN.id); + const results = await appPasswords.list(admin.id); expect(results.length).to.be(1); expect(results[0].hashedPassword).to.be.a('string'); expect(results[0].name).to.be('spark'); @@ -54,25 +54,25 @@ describe('App passwords', function () { }); it('can verify app password', async function () { - const result = await users.verify(ADMIN.id, password, 'appid'); + const result = await users.verify(admin.id, password, 'appid'); expect(result).to.be.ok(); expect(result.appPassword).to.be(true); }); it('can verify non-app password', async function () { - const result = await users.verify(ADMIN.id, ADMIN.password, 'appid'); + const result = await users.verify(admin.id, admin.password, 'appid'); expect(result).to.be.ok(); expect(result.appPassword).to.be(undefined); }); it('cannot verify bad password', async function () { - const [error, result] = await safe(users.verify(ADMIN.id, 'bad', 'appid')); + const [error, result] = await safe(users.verify(admin.id, 'bad', 'appid')); expect(result).to.not.be.ok(); expect(error.reason).to.be(BoxError.INVALID_CREDENTIALS); }); it('cannot verify password for another app', async function () { - const [error, result] = await safe(users.verify(ADMIN.id, password, 'appid2')); + const [error, result] = await safe(users.verify(admin.id, password, 'appid2')); expect(result).to.not.be.ok(); expect(error.reason).to.be(BoxError.INVALID_CREDENTIALS); }); @@ -82,7 +82,7 @@ describe('App passwords', function () { }); it('cannot verify deleted app password', async function () { - const [error] = await safe(users.verify(ADMIN.id, password, 'appid')); + const [error] = await safe(users.verify(admin.id, password, 'appid')); expect(error.reason).to.be(BoxError.INVALID_CREDENTIALS); }); diff --git a/src/test/appstore-test.js b/src/test/appstore-test.js index edc452ef5..2c128e75f 100644 --- a/src/test/appstore-test.js +++ b/src/test/appstore-test.js @@ -10,27 +10,22 @@ const appstore = require('../appstore.js'), common = require('./common.js'), expect = require('expect.js'), - nock = require('nock'), - settings = require('../settings.js'), - settingsdb = require('../settingsdb.js'); + nock = require('nock'); -const APPSTORE_TOKEN = 'appstoretoken'; const APP_ID = 'appid'; const APPSTORE_APP_ID = 'appstoreappid'; describe('Appstore', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup, appstoreToken, mockApiServerOrigin } = common; + + before(setup); + after(cleanup); beforeEach(nock.cleanAll); - it('can set cloudron token', function (done) { - settingsdb.set(settings.CLOUDRON_TOKEN_KEY, APPSTORE_TOKEN, done); - }); - it('can purchase an app', function (done) { - var scope1 = nock(common.MOCK_API_SERVER_ORIGIN) - .post(`/api/v1/cloudronapps?accessToken=${APPSTORE_TOKEN}`, function () { return true; }) + const scope1 = nock(mockApiServerOrigin) + .post(`/api/v1/cloudronapps?accessToken=${appstoreToken}`, function () { return true; }) .reply(201, {}); appstore.purchaseApp({ appId: APP_ID, appstoreId: APPSTORE_APP_ID, manifestId: APPSTORE_APP_ID }, function (error) { @@ -42,12 +37,12 @@ describe('Appstore', function () { }); it('unpurchase succeeds if app was never purchased', function (done) { - var scope1 = nock(common.MOCK_API_SERVER_ORIGIN) - .get(`/api/v1/cloudronapps/${APP_ID}?accessToken=${APPSTORE_TOKEN}`) + const scope1 = nock(mockApiServerOrigin) + .get(`/api/v1/cloudronapps/${APP_ID}?accessToken=${appstoreToken}`) .reply(404, {}); - var scope2 = nock(common.MOCK_API_SERVER_ORIGIN) - .delete(`/api/v1/cloudronapps/${APP_ID}?accessToken=${APPSTORE_TOKEN}`, function () { return true; }) + const scope2 = nock(mockApiServerOrigin) + .delete(`/api/v1/cloudronapps/${APP_ID}?accessToken=${appstoreToken}`, function () { return true; }) .reply(204, {}); appstore.unpurchaseApp(APP_ID, { appstoreId: APPSTORE_APP_ID, manifestId: APPSTORE_APP_ID }, function (error) { @@ -60,12 +55,12 @@ describe('Appstore', function () { }); it('can unpurchase an app', function (done) { - var scope1 = nock(common.MOCK_API_SERVER_ORIGIN) - .get(`/api/v1/cloudronapps/${APP_ID}?accessToken=${APPSTORE_TOKEN}`) + const scope1 = nock(mockApiServerOrigin) + .get(`/api/v1/cloudronapps/${APP_ID}?accessToken=${appstoreToken}`) .reply(200, {}); - var scope2 = nock(common.MOCK_API_SERVER_ORIGIN) - .delete(`/api/v1/cloudronapps/${APP_ID}?accessToken=${APPSTORE_TOKEN}`, function () { return true; }) + const scope2 = nock(mockApiServerOrigin) + .delete(`/api/v1/cloudronapps/${APP_ID}?accessToken=${appstoreToken}`, function () { return true; }) .reply(204, {}); appstore.unpurchaseApp(APP_ID, { appstoreId: APPSTORE_APP_ID, manifestId: APPSTORE_APP_ID }, function (error) { diff --git a/src/test/backupcleaner-test.js b/src/test/backupcleaner-test.js index 349649d73..cbf9139ed 100644 --- a/src/test/backupcleaner-test.js +++ b/src/test/backupcleaner-test.js @@ -17,7 +17,7 @@ const backupCleaner = require('../backupcleaner.js'), tasks = require('../tasks.js'); describe('backup cleaner', function () { - const { setup, cleanup, APP } = common; + const { setup, cleanup, app } = common; before(setup); after(cleanup); @@ -139,7 +139,7 @@ describe('backup cleaner', function () { const BACKUP_0_APP_0 = { // backup of installed app id: 'backup-app-00', - identifier: APP.id, + identifier: app.id, encryptionVersion: null, packageVersion: '1.0.0', type: backups.BACKUP_TYPE_APP, @@ -179,7 +179,7 @@ describe('backup cleaner', function () { packageVersion: '1.0.0', type: backups.BACKUP_TYPE_APP, state: backups.BACKUP_STATE_NORMAL, - identifier: APP.id, + identifier: app.id, dependsOn: [], manifest: null, format: 'tgz' diff --git a/src/test/common.js b/src/test/common.js index 6b842ca66..1e88be3e9 100644 --- a/src/test/common.js +++ b/src/test/common.js @@ -47,7 +47,7 @@ const MANIFEST = { } }; -const DOMAIN = { +const domain = { domain: 'example.com', zoneName: 'example.com', provider: 'noop', @@ -57,9 +57,9 @@ const DOMAIN = { wellKnown: null }; -const AUDIT_SOURCE = { ip: '1.2.3.4' }; +const auditSource = { ip: '1.2.3.4' }; -const ADMIN = { +const admin = { id: null, username: 'testadmin', password: 'secret123', @@ -76,7 +76,7 @@ const ADMIN = { active: true, }; -const USER = { +const user = { id: null, username: 'user', password: '123secret', @@ -93,20 +93,20 @@ const USER = { active: true, }; -const APP = { +const app = { id: 'appid', appStoreId: 'appStoreId', installationState: apps.ISTATE_PENDING_INSTALL, runState: 'running', location: 'applocation', - domain: DOMAIN.domain, - fqdn: DOMAIN.domain + '.' + 'applocation', + domain: domain.domain, + fqdn: domain.domain + '.' + 'applocation', manifest: MANIFEST, containerId: 'someid', portBindings: null, accessRestriction: null, memoryLimit: 0, - mailboxDomain: DOMAIN.domain, + mailboxDomain: domain.domain, alternateDomains: [], aliasDomains: [] }; @@ -117,22 +117,22 @@ exports = module.exports = { setup, cleanup, - MOCK_API_SERVER_ORIGIN: 'http://localhost:6060', + mockApiServerOrigin: 'http://localhost:6060', DASHBOARD_DOMAIN: 'test.example.com', DASHBOARD_FQDN: 'my.test.example.com', - APP, - ADMIN, - AUDIT_SOURCE, - DOMAIN, + app, + admin, + auditSource, + domain, MANIFEST, - USER, - APPSTORE_TOKEN: 'atoken', + user, + appstoreToken: 'atoken', MAILBOX_NAME: 'support', - MAILBOX: `support@${DOMAIN.domain}`, + MAILBOX: `support@${domain.domain}`, ALIAS_NAME: 'alsosupport', - ALIAS: `alsosupport@${DOMAIN.domain}` + ALIAS: `alsosupport@${domain.domain}` }; function createTree(root, obj) { @@ -163,11 +163,11 @@ function domainSetup(done) { async.series([ database.initialize, database._clear, - settings._setApiServerOrigin.bind(null, exports.MOCK_API_SERVER_ORIGIN), + settings._setApiServerOrigin.bind(null, exports.mockApiServerOrigin), settings.setDashboardLocation.bind(null, exports.DASHBOARD_DOMAIN, exports.DASHBOARD_FQDN), settings.initCache, blobs.initSecrets, - domains.add.bind(null, DOMAIN.domain, DOMAIN, AUDIT_SOURCE), + domains.add.bind(null, domain.domain, domain, auditSource), ], done); } @@ -175,17 +175,17 @@ function setup(done) { async.series([ domainSetup, async function createOwner() { - const result = await users.createOwner(ADMIN.email, ADMIN.username, ADMIN.password, ADMIN.displayName, AUDIT_SOURCE); - ADMIN.id = result; + const result = await users.createOwner(admin.email, admin.username, admin.password, admin.displayName, auditSource); + admin.id = result; }, - appdb.add.bind(null, APP.id, APP.appStoreId, APP.manifest, APP.location, APP.domain, APP.portBindings, APP), - settingsdb.set.bind(null, settings.CLOUDRON_TOKEN_KEY, exports.APPSTORE_TOKEN), // appstore token + appdb.add.bind(null, app.id, app.appStoreId, app.manifest, app.location, app.domain, app.portBindings, app), + settingsdb.set.bind(null, settings.CLOUDRON_TOKEN_KEY, exports.appstoreToken), // appstore token async function createUser() { - const result = await users.add(USER.email, USER, AUDIT_SOURCE); - USER.id = result; + const result = await users.add(user.email, user, auditSource); + user.id = result; }, - (done) => mailboxdb.addMailbox(exports.MAILBOX_NAME, DOMAIN.domain, { ownerId: USER.id, ownerType: mail.OWNERTYPE_USER, active: true }, done), - (done) => mailboxdb.setAliasesForName(exports.MAILBOX_NAME, DOMAIN.domain, [ { name: exports.ALIAS_NAME, domain: DOMAIN.domain} ], done), + (done) => mailboxdb.addMailbox(exports.MAILBOX_NAME, domain.domain, { ownerId: user.id, ownerType: mail.OWNERTYPE_USER, active: true }, done), + (done) => mailboxdb.setAliasesForName(exports.MAILBOX_NAME, domain.domain, [ { name: exports.ALIAS_NAME, domain: domain.domain} ], done), tasks.stopAllTasks, ], done); diff --git a/src/test/dns-test.js b/src/test/dns-test.js index 85004428a..4ef65d8d7 100644 --- a/src/test/dns-test.js +++ b/src/test/dns-test.js @@ -15,23 +15,23 @@ const AWS = require('aws-sdk'), nock = require('nock'), _ = require('underscore'); -const { AUDIT_SOURCE, DOMAIN } = common; -const DOMAIN_0 = Object.assign({}, DOMAIN); // make a copy - describe('dns provider', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup, auditSource, domain } = common; + const domainCopy = Object.assign({}, domain); // make a copy + + before(setup); + after(cleanup); describe('noop', function () { before(function (done) { - DOMAIN_0.provider = 'noop'; - DOMAIN_0.config = {}; + domainCopy.provider = 'noop'; + domainCopy.config = {}; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('upsert succeeds', function (done) { - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); done(); @@ -39,7 +39,7 @@ describe('dns provider', function () { }); it('get succeeds', function (done) { - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(result).to.be.an(Array); expect(result.length).to.eql(0); @@ -49,7 +49,7 @@ describe('dns provider', function () { }); it('del succeeds', function (done) { - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); done(); @@ -62,12 +62,12 @@ describe('dns provider', function () { var DIGITALOCEAN_ENDPOINT = 'https://api.digitalocean.com'; before(function (done) { - DOMAIN_0.provider = 'digitalocean'; - DOMAIN_0.config = { + domainCopy.provider = 'digitalocean'; + domainCopy.config = { token: TOKEN }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('upsert non-existing record succeeds', function (done) { @@ -84,13 +84,13 @@ describe('dns provider', function () { }; var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .get('/v2/domains/' + DOMAIN_0.zoneName + '/records') + .get('/v2/domains/' + domainCopy.zoneName + '/records') .reply(200, { domain_records: [] }); var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .post('/v2/domains/' + DOMAIN_0.zoneName + '/records') + .post('/v2/domains/' + domainCopy.zoneName + '/records') .reply(201, { domain_record: DOMAIN_RECORD_0 }); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -133,13 +133,13 @@ describe('dns provider', function () { }; var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .get('/v2/domains/' + DOMAIN_0.zoneName + '/records') + .get('/v2/domains/' + domainCopy.zoneName + '/records') .reply(200, { domain_records: [DOMAIN_RECORD_0, DOMAIN_RECORD_1] }); var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .put('/v2/domains/' + DOMAIN_0.zoneName + '/records/' + DOMAIN_RECORD_1.id) + .put('/v2/domains/' + domainCopy.zoneName + '/records/' + DOMAIN_RECORD_1.id) .reply(200, { domain_record: DOMAIN_RECORD_1_NEW }); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', [DOMAIN_RECORD_1_NEW.data], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', [DOMAIN_RECORD_1_NEW.data], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -212,19 +212,19 @@ describe('dns provider', function () { }; var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .get('/v2/domains/' + DOMAIN_0.zoneName + '/records') + .get('/v2/domains/' + domainCopy.zoneName + '/records') .reply(200, { domain_records: [DOMAIN_RECORD_0, DOMAIN_RECORD_1, DOMAIN_RECORD_2] }); var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .put('/v2/domains/' + DOMAIN_0.zoneName + '/records/' + DOMAIN_RECORD_1.id) + .put('/v2/domains/' + domainCopy.zoneName + '/records/' + DOMAIN_RECORD_1.id) .reply(200, { domain_record: DOMAIN_RECORD_1_NEW }); var req3 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .put('/v2/domains/' + DOMAIN_0.zoneName + '/records/' + DOMAIN_RECORD_2.id) + .put('/v2/domains/' + domainCopy.zoneName + '/records/' + DOMAIN_RECORD_2.id) .reply(200, { domain_record: DOMAIN_RECORD_2_NEW }); var req4 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .post('/v2/domains/' + DOMAIN_0.zoneName + '/records') + .post('/v2/domains/' + domainCopy.zoneName + '/records') .reply(201, { domain_record: DOMAIN_RECORD_2_NEW }); - domains.upsertDnsRecords('', DOMAIN_0.domain, 'TXT', [DOMAIN_RECORD_2_NEW.data, DOMAIN_RECORD_1_NEW.data, DOMAIN_RECORD_3_NEW.data], function (error) { + domains.upsertDnsRecords('', domainCopy.domain, 'TXT', [DOMAIN_RECORD_2_NEW.data, DOMAIN_RECORD_1_NEW.data, DOMAIN_RECORD_3_NEW.data], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -259,10 +259,10 @@ describe('dns provider', function () { }; var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .get('/v2/domains/' + DOMAIN_0.zoneName + '/records') + .get('/v2/domains/' + domainCopy.zoneName + '/records') .reply(200, { domain_records: [DOMAIN_RECORD_0, DOMAIN_RECORD_1] }); - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(result).to.be.an(Array); expect(result.length).to.eql(1); @@ -297,13 +297,13 @@ describe('dns provider', function () { }; var req1 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .get('/v2/domains/' + DOMAIN_0.zoneName + '/records') + .get('/v2/domains/' + domainCopy.zoneName + '/records') .reply(200, { domain_records: [DOMAIN_RECORD_0, DOMAIN_RECORD_1] }); var req2 = nock(DIGITALOCEAN_ENDPOINT).filteringRequestBody(function () { return false; }) - .delete('/v2/domains/' + DOMAIN_0.zoneName + '/records/' + DOMAIN_RECORD_1.id) + .delete('/v2/domains/' + domainCopy.zoneName + '/records/' + DOMAIN_RECORD_1.id) .reply(204, {}); - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -318,13 +318,13 @@ describe('dns provider', function () { var GODADDY_API = 'https://api.godaddy.com/v1/domains'; before(function (done) { - DOMAIN_0.provider = 'godaddy'; - DOMAIN_0.config = { + domainCopy.provider = 'godaddy'; + domainCopy.config = { apiKey: KEY, apiSecret: SECRET }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('upsert record succeeds', function (done) { @@ -336,10 +336,10 @@ describe('dns provider', function () { }]; var req1 = nock(GODADDY_API) - .put('/' + DOMAIN_0.zoneName + '/records/A/test', DOMAIN_RECORD_0) + .put('/' + domainCopy.zoneName + '/records/A/test', DOMAIN_RECORD_0) .reply(200, {}); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); @@ -356,10 +356,10 @@ describe('dns provider', function () { }]; var req1 = nock(GODADDY_API) - .get('/' + DOMAIN_0.zoneName + '/records/A/test') + .get('/' + domainCopy.zoneName + '/records/A/test') .reply(200, DOMAIN_RECORD_0); - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(result).to.be.an(Array); expect(result.length).to.eql(1); @@ -384,14 +384,14 @@ describe('dns provider', function () { }]; var req1 = nock(GODADDY_API) - .get('/' + DOMAIN_0.zoneName + '/records/A/test') + .get('/' + domainCopy.zoneName + '/records/A/test') .reply(200, DOMAIN_RECORD_0); var req2 = nock(GODADDY_API) - .put('/' + DOMAIN_0.zoneName + '/records/A/test', DOMAIN_RECORD_1) + .put('/' + domainCopy.zoneName + '/records/A/test', DOMAIN_RECORD_1) .reply(200, {}); - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -406,12 +406,12 @@ describe('dns provider', function () { var GANDI_API = 'https://dns.api.gandi.net/api/v5'; before(function (done) { - DOMAIN_0.provider = 'gandi'; - DOMAIN_0.config = { + domainCopy.provider = 'gandi'; + domainCopy.config = { token: TOKEN }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('upsert record succeeds', function (done) { @@ -423,10 +423,10 @@ describe('dns provider', function () { }; var req1 = nock(GANDI_API) - .put('/domains/' + DOMAIN_0.zoneName + '/records/test/A', DOMAIN_RECORD_0) + .put('/domains/' + domainCopy.zoneName + '/records/test/A', DOMAIN_RECORD_0) .reply(201, { message: 'Zone Record Created' }); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); @@ -445,10 +445,10 @@ describe('dns provider', function () { }; var req1 = nock(GANDI_API) - .get('/domains/' + DOMAIN_0.zoneName + '/records/test/A') + .get('/domains/' + domainCopy.zoneName + '/records/test/A') .reply(200, DOMAIN_RECORD_0); - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(result).to.be.an(Array); expect(result.length).to.eql(1); @@ -463,10 +463,10 @@ describe('dns provider', function () { nock.cleanAll(); var req2 = nock(GANDI_API) - .delete('/domains/' + DOMAIN_0.zoneName + '/records/test/A') + .delete('/domains/' + domainCopy.zoneName + '/records/test/A') .reply(204, {}); - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req2.isDone()).to.be.ok(); @@ -480,13 +480,13 @@ describe('dns provider', function () { const NAMECOM_API = 'https://api.name.com/v4'; before(function (done) { - DOMAIN_0.provider = 'namecom'; - DOMAIN_0.config = { + domainCopy.provider = 'namecom'; + domainCopy.config = { username: 'fake', token: TOKEN }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('upsert record succeeds', function (done) { @@ -500,14 +500,14 @@ describe('dns provider', function () { }; var req1 = nock(NAMECOM_API) - .get(`/domains/${DOMAIN_0.zoneName}/records`) + .get(`/domains/${domainCopy.zoneName}/records`) .reply(200, { records: [] }); var req2 = nock(NAMECOM_API) - .post(`/domains/${DOMAIN_0.zoneName}/records`, DOMAIN_RECORD_0) + .post(`/domains/${domainCopy.zoneName}/records`, DOMAIN_RECORD_0) .reply(200, {}); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -527,10 +527,10 @@ describe('dns provider', function () { }; var req1 = nock(NAMECOM_API) - .get(`/domains/${DOMAIN_0.zoneName}/records`) + .get(`/domains/${domainCopy.zoneName}/records`) .reply(200, { records: [DOMAIN_RECORD_0] }); - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(result).to.be.an(Array); expect(result.length).to.eql(1); @@ -553,14 +553,14 @@ describe('dns provider', function () { }; var req1 = nock(NAMECOM_API) - .get(`/domains/${DOMAIN_0.zoneName}/records`) + .get(`/domains/${domainCopy.zoneName}/records`) .reply(200, { records: [DOMAIN_RECORD_0] }); var req2 = nock(NAMECOM_API) - .delete(`/domains/${DOMAIN_0.zoneName}/records/${DOMAIN_RECORD_0.id}`) + .delete(`/domains/${domainCopy.zoneName}/records/${DOMAIN_RECORD_0.id}`) .reply(200, {}); - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -592,13 +592,13 @@ describe('dns provider', function () { `; before(function (done) { - DOMAIN_0.provider = 'namecheap'; - DOMAIN_0.config = { + domainCopy.provider = 'namecheap'; + domainCopy.config = { username: username, token: token }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); beforeEach(function () { @@ -629,8 +629,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.getHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1] + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1] }) .reply(200, GET_HOSTS_RETURN); @@ -641,8 +641,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.setHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1], + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1], TTL1: '300', HostName1: '@', @@ -665,7 +665,7 @@ describe('dns provider', function () { }) .reply(200, SET_HOSTS_RETURN); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -698,8 +698,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.getHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1] + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1] }) .reply(200, GET_HOSTS_RETURN); @@ -710,8 +710,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.setHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1], + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1], TTL1: '300', HostName1: '@', @@ -744,7 +744,7 @@ describe('dns provider', function () { }) .reply(200, SET_HOSTS_RETURN); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'TXT', ['1.2.3.4', '2.3.4.5', '3.4.5.6'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'TXT', ['1.2.3.4', '2.3.4.5', '3.4.5.6'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -777,8 +777,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.getHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1] + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1] }) .reply(200, GET_HOSTS_RETURN); @@ -789,8 +789,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.setHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1], + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1], TTL1: '300', HostName1: '@', @@ -808,7 +808,7 @@ describe('dns provider', function () { }) .reply(200, SET_HOSTS_RETURN); - domains.upsertDnsRecords('www', DOMAIN_0.domain, 'CNAME', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('www', domainCopy.domain, 'CNAME', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -842,12 +842,12 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.getHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1] + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1] }) .reply(200, GET_HOSTS_RETURN); - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(result).to.be.an(Array); @@ -882,8 +882,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.getHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1] + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1] }) .reply(200, GET_HOSTS_RETURN); @@ -894,8 +894,8 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.setHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1], + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1], TTL1: '300', HostName1: '@', @@ -908,7 +908,7 @@ describe('dns provider', function () { }) .reply(200, SET_HOSTS_RETURN); - domains.removeDnsRecords('www', DOMAIN_0.domain, 'CNAME', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('www', domainCopy.domain, 'CNAME', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); expect(req2.isDone()).to.be.ok(); @@ -941,12 +941,12 @@ describe('dns provider', function () { UserName: username, ClientIp: '127.0.0.1', Command: 'namecheap.domains.dns.getHosts', - SLD: DOMAIN_0.zoneName.split('.')[0], - TLD: DOMAIN_0.zoneName.split('.')[1] + SLD: domainCopy.zoneName.split('.')[0], + TLD: domainCopy.zoneName.split('.')[1] }) .reply(200, GET_HOSTS_RETURN); - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(req1.isDone()).to.be.ok(); @@ -963,8 +963,8 @@ describe('dns provider', function () { var AWS_HOSTED_ZONES = null; before(function (done) { - DOMAIN_0.provider = 'route53'; - DOMAIN_0.config = { + domainCopy.provider = 'route53'; + domainCopy.config = { accessKeyId: 'unused', secretAccessKey: 'unused' }; @@ -972,7 +972,7 @@ describe('dns provider', function () { AWS_HOSTED_ZONES = { HostedZones: [{ Id: '/hostedzone/Z34G16B38TNZ9L', - Name: DOMAIN_0.zoneName + '.', + Name: domainCopy.zoneName + '.', CallerReference: '305AFD59-9D73-4502-B020-F4E6F889CB30', ResourceRecordSetCount: 2, ChangeInfo: { @@ -1018,8 +1018,8 @@ describe('dns provider', function () { function Route53Mock(cfg) { expect(cfg).to.eql({ - accessKeyId: DOMAIN_0.config.accessKeyId, - secretAccessKey: DOMAIN_0.config.secretAccessKey, + accessKeyId: domainCopy.config.accessKeyId, + secretAccessKey: domainCopy.config.secretAccessKey, region: 'us-east-1' }); } @@ -1034,7 +1034,7 @@ describe('dns provider', function () { AWS._originalRoute53 = AWS.Route53; AWS.Route53 = Route53Mock; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); after(function () { @@ -1052,7 +1052,7 @@ describe('dns provider', function () { } }]); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(awsAnswerQueue.length).to.eql(0); @@ -1070,7 +1070,7 @@ describe('dns provider', function () { } }]); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(awsAnswerQueue.length).to.eql(0); @@ -1088,7 +1088,7 @@ describe('dns provider', function () { } }]); - domains.upsertDnsRecords('', DOMAIN_0.domain, 'TXT', ['first', 'second', 'third'], function (error) { + domains.upsertDnsRecords('', domainCopy.domain, 'TXT', ['first', 'second', 'third'], function (error) { expect(error).to.eql(null); expect(awsAnswerQueue.length).to.eql(0); @@ -1100,7 +1100,7 @@ describe('dns provider', function () { awsAnswerQueue.push([null, AWS_HOSTED_ZONES]); awsAnswerQueue.push([null, { ResourceRecordSets: [{ - Name: 'test.' + DOMAIN_0.zoneName + '.', + Name: 'test.' + domainCopy.zoneName + '.', Type: 'A', ResourceRecords: [{ Value: '1.2.3.4' @@ -1108,7 +1108,7 @@ describe('dns provider', function () { }] }]); - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(result).to.be.an(Array); expect(result.length).to.eql(1); @@ -1129,7 +1129,7 @@ describe('dns provider', function () { } }]); - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(awsAnswerQueue.length).to.eql(0); @@ -1144,8 +1144,8 @@ describe('dns provider', function () { var _OriginalGCDNS; before(function (done) { - DOMAIN_0.provider = 'gcdns'; - DOMAIN_0.config = { + domainCopy.provider = 'gcdns'; + domainCopy.config = { projectId: 'my-dns-proj', credentials: { 'client_email': '123456789349-compute@developer.gserviceaccount.com', @@ -1185,12 +1185,12 @@ describe('dns provider', function () { zone.deleteRecords = mockery(recordQueue || zoneQueue); return zone; } - HOSTED_ZONES = [fakeZone(DOMAIN_0.domain), fakeZone('cloudron.us')]; + HOSTED_ZONES = [fakeZone(domainCopy.domain), fakeZone('cloudron.us')]; _OriginalGCDNS = GCDNS.prototype.getZones; GCDNS.prototype.getZones = mockery(zoneQueue); - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); after(function () { @@ -1203,7 +1203,7 @@ describe('dns provider', function () { zoneQueue.push([null, []]); // getRecords zoneQueue.push([null, { id: '1' }]); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(zoneQueue.length).to.eql(0); @@ -1216,7 +1216,7 @@ describe('dns provider', function () { zoneQueue.push([null, [new GCDNS().zone('test').record('A', { 'name': 'test', data: ['5.6.7.8'], ttl: 1 })]]); zoneQueue.push([null, { id: '2' }]); - domains.upsertDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.upsertDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(zoneQueue.length).to.eql(0); @@ -1229,7 +1229,7 @@ describe('dns provider', function () { zoneQueue.push([null, []]); // getRecords zoneQueue.push([null, { id: '3' }]); - domains.upsertDnsRecords('', DOMAIN_0.domain, 'TXT', ['first', 'second', 'third'], function (error) { + domains.upsertDnsRecords('', domainCopy.domain, 'TXT', ['first', 'second', 'third'], function (error) { expect(error).to.eql(null); expect(zoneQueue.length).to.eql(0); @@ -1241,7 +1241,7 @@ describe('dns provider', function () { zoneQueue.push([null, HOSTED_ZONES]); zoneQueue.push([null, [new GCDNS().zone('test').record('A', { 'name': 'test', data: ['1.2.3.4', '5.6.7.8'], ttl: 1 })]]); - domains.getDnsRecords('test', DOMAIN_0.domain, 'A', function (error, result) { + domains.getDnsRecords('test', domainCopy.domain, 'A', function (error, result) { expect(error).to.eql(null); expect(result).to.be.an(Array); expect(result.length).to.eql(2); @@ -1257,7 +1257,7 @@ describe('dns provider', function () { zoneQueue.push([null, [new GCDNS().zone('test').record('A', { 'name': 'test', data: ['5.6.7.8'], ttl: 1 })]]); zoneQueue.push([null, { id: '5' }]); - domains.removeDnsRecords('test', DOMAIN_0.domain, 'A', ['1.2.3.4'], function (error) { + domains.removeDnsRecords('test', domainCopy.domain, 'A', ['1.2.3.4'], function (error) { expect(error).to.eql(null); expect(zoneQueue.length).to.eql(0); diff --git a/src/test/eventlog-test.js b/src/test/eventlog-test.js index d23884e38..ff8ae19fe 100644 --- a/src/test/eventlog-test.js +++ b/src/test/eventlog-test.js @@ -6,8 +6,7 @@ 'use strict'; -const async = require('async'), - common = require('./common.js'), +const common = require('./common.js'), database = require('../database.js'), delay = require('delay'), eventlog = require('../eventlog.js'), @@ -15,22 +14,21 @@ const async = require('async'), notifications = require('../notifications.js'); describe('Eventlog', function () { - before(function (done) { - async.series([ - common.setup, - eventlog._clear // domain add events - ], done); + const { setup, cleanup } = common; + + before(setup); + after(cleanup); + + let eventId; + + it('clear', async function () { + await eventlog._clear(); }); - after(common.cleanup); - - var eventId; - it('add succeeds', async function () { const id = await eventlog.add('some.event', { ip: '1.2.3.4' }, { appId: 'thatapp' }); expect(id).to.be.a('string'); - console.log(id); eventId = id; }); diff --git a/src/test/groups-test.js b/src/test/groups-test.js index 68eb1f519..b0ef7f17a 100644 --- a/src/test/groups-test.js +++ b/src/test/groups-test.js @@ -13,7 +13,7 @@ const BoxError = require('../boxerror.js'), safe = require('safetydance'); describe('Groups', function () { - const { setup, cleanup, ADMIN, USER } = common; + const { setup, cleanup, admin, user } = common; before(setup); after(cleanup); @@ -84,21 +84,21 @@ describe('Groups', function () { }); it('isMember returns false', async function () { - const isMember = await groups.isMember(group0Object.id, ADMIN.id); + const isMember = await groups.isMember(group0Object.id, admin.id); expect(isMember).to.be(false); }); it('can add member to the group', async function () { - await groups.addMember(group0Object.id, ADMIN.id); + await groups.addMember(group0Object.id, admin.id); }); it('cannot add same member to the group', async function () { - const [error] = await safe(groups.addMember(group0Object.id, ADMIN.id)); + const [error] = await safe(groups.addMember(group0Object.id, admin.id)); expect(error.reason).to.be(BoxError.ALREADY_EXISTS); }); it('isMember returns true', async function () { - const isMember = await groups.isMember(group0Object.id, ADMIN.id); + const isMember = await groups.isMember(group0Object.id, admin.id); expect(isMember).to.be(true); }); @@ -108,22 +108,22 @@ describe('Groups', function () { }); it('cannot add non-existent group', async function () { - const [error] = await safe(groups.addMember('randomgroup', ADMIN.id)); + const [error] = await safe(groups.addMember('randomgroup', admin.id)); expect(error.reason).to.be(BoxError.NOT_FOUND); }); it('can set members', async function () { - await groups.setMembers(group0Object.id, [ ADMIN.id, USER.id ]); + await groups.setMembers(group0Object.id, [ admin.id, user.id ]); }); it('cannot set duplicate members', async function () { - const [error] = await safe(groups.setMembers(group0Object.id, [ ADMIN.id, USER.id, ADMIN.id ])); + const [error] = await safe(groups.setMembers(group0Object.id, [ admin.id, user.id, admin.id ])); expect(error.reason).to.be(BoxError.CONFLICT); }); it('can list users of group', async function () { const result = await groups.getMembers(group0Object.id); - expect(result).to.eql([ ADMIN.id, USER.id ]); + expect(result).to.eql([ admin.id, user.id ]); }); it('cannot list members of non-existent group', async function () { @@ -137,35 +137,35 @@ describe('Groups', function () { }); it('cannot remove member from non-existent group', async function () { - const [error] = await safe(groups.removeMember('randomgroup', ADMIN.id)); + const [error] = await safe(groups.removeMember('randomgroup', admin.id)); expect(error.reason).to.be(BoxError.NOT_FOUND); }); it('can remove existing member', async function () { - await groups.removeMember(group0Object.id, USER.id); + await groups.removeMember(group0Object.id, user.id); }); it('can getWithMembers', async function () { const result = await groups.getWithMembers(group0Object.id); expect(result.name).to.be(group0Name); - expect(result.userIds).to.eql([ ADMIN.id ]); + expect(result.userIds).to.eql([ admin.id ]); }); it('can set groups', async function () { - await groups.setMembership(ADMIN.id, [ group0Object.id ]); + await groups.setMembership(admin.id, [ group0Object.id ]); }); it('cannot set user to same group twice', async function () { - const [error] = await safe(groups.setMembership(ADMIN.id, [ group0Object.id, group0Object.id ])); + const [error] = await safe(groups.setMembership(admin.id, [ group0Object.id, group0Object.id ])); expect(error.reason).to.be(BoxError.CONFLICT); }); it('can set user to multiple groups', async function () { - await groups.setMembership(ADMIN.id, [ group0Object.id, group1Object.id ]); + await groups.setMembership(admin.id, [ group0Object.id, group1Object.id ]); }); it('can get groups membership', async function () { - const groupIds = await groups.getMembership(ADMIN.id); + const groupIds = await groups.getMembership(admin.id); expect(groupIds.length).to.be(2); expect(groupIds.sort()).to.eql([ group0Object.id, group1Object.id ].sort()); }); @@ -181,7 +181,7 @@ describe('Groups', function () { const result = await groups.listWithMembers(); expect(result.length).to.be(2); expect(result[0].name).to.be(group0Name); - expect(result[1].userIds).to.eql([ ADMIN.id ]); + expect(result[1].userIds).to.eql([ admin.id ]); expect(result[1].name).to.be(group1Name); }); @@ -191,7 +191,7 @@ describe('Groups', function () { }); it('can delete valid group', async function () { - await groups.setMembers(group0Object.id, [ ADMIN.id, USER.id ]); // ensure group has some members + await groups.setMembers(group0Object.id, [ admin.id, user.id ]); // ensure group has some members await groups.remove(group0Object.id); }); diff --git a/src/test/janitor-test.js b/src/test/janitor-test.js index 8b1b602cc..6c3f0b102 100644 --- a/src/test/janitor-test.js +++ b/src/test/janitor-test.js @@ -12,8 +12,10 @@ const common = require('./common.js'), tokens = require('../tokens.js'); describe('janitor', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup } = common; + + before(setup); + after(cleanup); const token1 = { name: 'token1', diff --git a/src/test/mail-test.js b/src/test/mail-test.js index 72c23426f..9a1cdb8b5 100644 --- a/src/test/mail-test.js +++ b/src/test/mail-test.js @@ -10,14 +10,14 @@ const common = require('./common.js'), mail = require('../mail.js'); describe('Mail', function () { - const { setup, cleanup, DOMAIN, AUDIT_SOURCE } = common; + const { setup, cleanup, domain, auditSource } = common; before(setup); after(cleanup); describe('values', function () { it('can get default', async function () { - const mailConfig = await mail.getDomain(DOMAIN.domain); + const mailConfig = await mail.getDomain(domain.domain); expect(mailConfig.enabled).to.be(false); expect(mailConfig.mailFromValidation).to.be(true); expect(mailConfig.catchAll).to.eql([]); @@ -28,45 +28,45 @@ describe('Mail', function () { const result = await mail.listDomains(); expect(result).to.be.an(Array); expect(result[0]).to.be.an('object'); - expect(result[0].domain).to.eql(DOMAIN.domain); + expect(result[0].domain).to.eql(domain.domain); }); it('can set mail from validation', async function () { - await mail.setMailFromValidation(DOMAIN.domain, false); + await mail.setMailFromValidation(domain.domain, false); - const mailConfig = await mail.getDomain(DOMAIN.domain); + const mailConfig = await mail.getDomain(domain.domain); expect(mailConfig.mailFromValidation).to.be(false); }); it('can set catch all address', async function () { - await mail.setCatchAllAddress(DOMAIN.domain, [ 'user1', 'user2' ]); + await mail.setCatchAllAddress(domain.domain, [ 'user1', 'user2' ]); - const mailConfig = await mail.getDomain(DOMAIN.domain); + const mailConfig = await mail.getDomain(domain.domain); expect(mailConfig.catchAll).to.eql([ 'user1', 'user2' ]); }); it('can set mail relay', async function () { const relay = { provider: 'external-smtp', host: 'mx.foo.com', port: 25 }; - await mail.setMailRelay(DOMAIN.domain, relay, { skipVerify: true }); + await mail.setMailRelay(domain.domain, relay, { skipVerify: true }); - const mailConfig = await mail.getDomain(DOMAIN.domain); + const mailConfig = await mail.getDomain(domain.domain); expect(mailConfig.relay).to.eql(relay); }); it('can set banner', async function () { const banner = { text: 'text', html: 'html' }; - await mail.setBanner(DOMAIN.domain, banner); + await mail.setBanner(domain.domain, banner); - const mailConfig = await mail.getDomain(DOMAIN.domain); + const mailConfig = await mail.getDomain(domain.domain); expect(mailConfig.banner).to.eql(banner); }); it('can enable mail', async function () { - await mail.setMailEnabled(DOMAIN.domain, true, AUDIT_SOURCE); + await mail.setMailEnabled(domain.domain, true, auditSource); - const mailConfig = await mail.getDomain(DOMAIN.domain); + const mailConfig = await mail.getDomain(domain.domain); expect(mailConfig.enabled).to.be(true); }); }); diff --git a/src/test/network-test.js b/src/test/network-test.js index fcefa7966..e7da7e41b 100644 --- a/src/test/network-test.js +++ b/src/test/network-test.js @@ -13,8 +13,10 @@ const BoxError = require('../boxerror.js'), paths = require('../paths.js'); describe('Network', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup } = common; + + before(setup); + after(cleanup); describe('Blocklist', function () { diff --git a/src/test/notifications-test.js b/src/test/notifications-test.js index 85a2a767b..3141069f1 100644 --- a/src/test/notifications-test.js +++ b/src/test/notifications-test.js @@ -21,8 +21,10 @@ const EVENT_0 = { }; describe('Notifications', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup } = common; + + before(setup); + after(cleanup); let notificationIds = []; diff --git a/src/test/reverseproxy-test.js b/src/test/reverseproxy-test.js index 22f8449de..e84759288 100644 --- a/src/test/reverseproxy-test.js +++ b/src/test/reverseproxy-test.js @@ -12,12 +12,12 @@ const common = require('./common.js'), paths = require('../paths.js'), reverseProxy = require('../reverseproxy.js'); -const { DOMAIN, AUDIT_SOURCE, APP } = common; -const DOMAIN_0 = Object.assign({}, DOMAIN); - describe('Certificates', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup, domain, auditSource, app } = common; + const domainCopy = Object.assign({}, domain); + + before(setup); + after(cleanup); describe('validateCertificate', function () { let foobarDomain = { @@ -142,13 +142,13 @@ describe('Certificates', function () { describe('getApi - letsencrypt-prod', function () { before(function (done) { - DOMAIN_0.tlsConfig = { provider: 'letsencrypt-prod' }; + domainCopy.tlsConfig = { provider: 'letsencrypt-prod' }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('returns prod acme in prod cloudron', async function () { - const { acmeApi, apiOptions } = await reverseProxy._getAcmeApi(DOMAIN_0); + const { acmeApi, apiOptions } = await reverseProxy._getAcmeApi(domainCopy); expect(acmeApi._name).to.be('acme'); expect(apiOptions.prod).to.be(true); }); @@ -156,13 +156,13 @@ describe('Certificates', function () { describe('getApi - letsencrypt-staging', function () { before(function (done) { - DOMAIN_0.tlsConfig = { provider: 'letsencrypt-staging' }; + domainCopy.tlsConfig = { provider: 'letsencrypt-staging' }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('returns staging acme in prod cloudron', async function () { - const { acmeApi, apiOptions } = await reverseProxy._getAcmeApi(DOMAIN_0); + const { acmeApi, apiOptions } = await reverseProxy._getAcmeApi(domainCopy); expect(acmeApi._name).to.be('acme'); expect(apiOptions.prod).to.be(false); }); @@ -170,22 +170,22 @@ describe('Certificates', function () { describe('configureApp', function () { before(function (done) { - DOMAIN_0.tlsConfig = { provider: 'fallback' }; + domainCopy.tlsConfig = { provider: 'fallback' }; - domains.update(DOMAIN_0.domain, DOMAIN_0, AUDIT_SOURCE, done); + domains.update(domainCopy.domain, domainCopy, auditSource, done); }); it('configure nginx correctly', function (done) { - reverseProxy.configureApp(APP, AUDIT_SOURCE, function (error) { - expect(fs.existsSync(paths.NGINX_APPCONFIG_DIR + '/' + APP.id + '.conf')); + reverseProxy.configureApp(app, auditSource, function (error) { + expect(fs.existsSync(paths.NGINX_APPCONFIG_DIR + '/' + app.id + '.conf')); expect(error).to.be(null); done(); }); }); it('unconfigure nginx', function (done) { - reverseProxy.unconfigureApp(APP, function (error) { - expect(!fs.existsSync(paths.NGINX_APPCONFIG_DIR + '/' + APP.id + '.conf')); + reverseProxy.unconfigureApp(app, function (error) { + expect(!fs.existsSync(paths.NGINX_APPCONFIG_DIR + '/' + app.id + '.conf')); expect(error).to.be(null); done(); }); diff --git a/src/test/shell-test.js b/src/test/shell-test.js index 4f445f1e7..d9804e08d 100644 --- a/src/test/shell-test.js +++ b/src/test/shell-test.js @@ -11,7 +11,7 @@ const expect = require('expect.js'), describe('shell', function () { it('can run valid program', function (done) { - var cp = shell.spawn('test', 'ls', [ '-l' ], { }, function (error) { + let cp = shell.spawn('test', 'ls', [ '-l' ], { }, function (error) { expect(cp).to.be.ok(); expect(error).to.be(null); done(); @@ -40,7 +40,7 @@ describe('shell', function () { }); it('can sudo valid program', function (done) { - var RELOAD_NGINX_CMD = path.join(__dirname, '../src/scripts/restartservice.sh'); + let RELOAD_NGINX_CMD = path.join(__dirname, '../src/scripts/restartservice.sh'); shell.sudo('test', [ RELOAD_NGINX_CMD, 'nginx' ], {}, function (error) { expect(error).to.be.ok(); done(); diff --git a/src/test/sysinfo-test.js b/src/test/sysinfo-test.js index 86f05008d..54092247c 100644 --- a/src/test/sysinfo-test.js +++ b/src/test/sysinfo-test.js @@ -3,7 +3,7 @@ 'use strict'; -var expect = require('expect.js'), +const expect = require('expect.js'), sysinfo = require('../sysinfo.js'); describe('config', function () { diff --git a/src/test/system-test.js b/src/test/system-test.js index 453fab455..298228d28 100644 --- a/src/test/system-test.js +++ b/src/test/system-test.js @@ -11,8 +11,10 @@ const common = require('./common.js'), system = require('../system.js'); describe('System', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup } = common; + + before(setup); + after(cleanup); it('can get disks', function (done) { system.getDisks(function (error, disks) { diff --git a/src/test/tokens-test.js b/src/test/tokens-test.js index 394320d04..39d2d2a9a 100644 --- a/src/test/tokens-test.js +++ b/src/test/tokens-test.js @@ -13,8 +13,10 @@ const BoxError = require('../boxerror.js'), tokens = require('../tokens.js'); describe('Tokens', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup } = common; + + before(setup); + after(cleanup); const TOKEN_0 = { id: null, diff --git a/src/test/updatechecker-test.js b/src/test/updatechecker-test.js index 773c41a62..3e71f7445 100644 --- a/src/test/updatechecker-test.js +++ b/src/test/updatechecker-test.js @@ -15,13 +15,13 @@ const common = require('./common.js'), settings = require('../settings.js'), updatechecker = require('../updatechecker.js'); -const { APP, APPSTORE_TOKEN, MOCK_API_SERVER_ORIGIN } = common; - const UPDATE_VERSION = semver.inc(constants.VERSION, 'major'); describe('updatechecker', function () { - before(common.setup); - after(common.cleanup); + const { setup, cleanup, app, appstoreToken, mockApiServerOrigin } = common; + + before(setup); + after(cleanup); describe('box', function () { before(function (done) { @@ -33,9 +33,9 @@ describe('updatechecker', function () { it('no updates', function (done) { nock.cleanAll(); - var scope = nock(MOCK_API_SERVER_ORIGIN) + var scope = nock(mockApiServerOrigin) .get('/api/v1/boxupdate') - .query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, automatic: false }) + .query({ boxVersion: constants.VERSION, accessToken: appstoreToken, automatic: false }) .reply(204, { } ); updatechecker.checkForUpdates({ automatic: false }, function (error) { @@ -49,9 +49,9 @@ describe('updatechecker', function () { it('new version', function (done) { nock.cleanAll(); - var scope = nock(MOCK_API_SERVER_ORIGIN) + var scope = nock(mockApiServerOrigin) .get('/api/v1/boxupdate') - .query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, automatic: false }) + .query({ boxVersion: constants.VERSION, accessToken: appstoreToken, automatic: false }) .reply(200, { version: UPDATE_VERSION, changelog: [''], sourceTarballUrl: 'box.tar.gz', sourceTarballSigUrl: 'box.tar.gz.sig', boxVersionsUrl: 'box.versions', boxVersionsSigUrl: 'box.versions.sig' } ); updatechecker.checkForUpdates({ automatic: false }, function (error) { @@ -66,9 +66,9 @@ describe('updatechecker', function () { it('bad response offers whatever was last valid', function (done) { nock.cleanAll(); - var scope = nock(MOCK_API_SERVER_ORIGIN) + var scope = nock(mockApiServerOrigin) .get('/api/v1/boxupdate') - .query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, automatic: false }) + .query({ boxVersion: constants.VERSION, accessToken: appstoreToken, automatic: false }) .reply(404, { version: '2.0.0-pre.0', changelog: [''], sourceTarballUrl: 'box-pre.tar.gz' } ); updatechecker.checkForUpdates({ automatic: false }, function (error) { @@ -91,9 +91,9 @@ describe('updatechecker', function () { it('no updates', function (done) { nock.cleanAll(); - var scope = nock(MOCK_API_SERVER_ORIGIN) + var scope = nock(mockApiServerOrigin) .get('/api/v1/appupdate') - .query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, appId: APP.appStoreId, appVersion: APP.manifest.version, automatic: false }) + .query({ boxVersion: constants.VERSION, accessToken: appstoreToken, appId: app.appStoreId, appVersion: app.manifest.version, automatic: false }) .reply(204, { } ); updatechecker._checkAppUpdates({ automatic: false }, function (error) { @@ -107,9 +107,9 @@ describe('updatechecker', function () { it('bad response', function (done) { nock.cleanAll(); - var scope = nock(MOCK_API_SERVER_ORIGIN) + var scope = nock(mockApiServerOrigin) .get('/api/v1/appupdate') - .query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, appId: APP.appStoreId, appVersion: APP.manifest.version, automatic: false }) + .query({ boxVersion: constants.VERSION, accessToken: appstoreToken, appId: app.appStoreId, appVersion: app.manifest.version, automatic: false }) .reply(500, { update: { manifest: { version: '1.0.0', changelog: '* some changes' } } } ); updatechecker._checkAppUpdates({ automatic: false }, function (error) { @@ -123,9 +123,9 @@ describe('updatechecker', function () { it('offers new version', function (done) { nock.cleanAll(); - var scope = nock(MOCK_API_SERVER_ORIGIN) + var scope = nock(mockApiServerOrigin) .get('/api/v1/appupdate') - .query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, appId: APP.appStoreId, appVersion: APP.manifest.version, automatic: false }) + .query({ boxVersion: constants.VERSION, accessToken: appstoreToken, appId: app.appStoreId, appVersion: app.manifest.version, automatic: false }) .reply(200, { manifest: { version: '2.0.0', changelog: '* some changes' } } ); updatechecker._checkAppUpdates({ automatic: false }, function (error) { diff --git a/src/test/users-test.js b/src/test/users-test.js index f625a7b68..d197642de 100644 --- a/src/test/users-test.js +++ b/src/test/users-test.js @@ -15,19 +15,19 @@ const BoxError = require('../boxerror.js'), _ = require('underscore'); describe('User', function () { - const { domainSetup, cleanup, ADMIN, USER, AUDIT_SOURCE } = common; + const { domainSetup, cleanup, admin, user, auditSource } = common; async function cleanupUsers() { for (const u of await users.getAll()) { - await users.del(u, AUDIT_SOURCE); + await users.del(u, auditSource); } } async function createOwner() { await cleanupUsers(); - const id = await users.add(ADMIN.email, ADMIN, AUDIT_SOURCE); - ADMIN.id = id; + const id = await users.add(admin.email, admin, auditSource); + admin.id = id; } before(domainSetup); @@ -44,60 +44,60 @@ describe('User', function () { describe('add', function () { it('fails due to short password', async function () { - const user = Object.assign({}, ADMIN, { password: 'Fo$%23' }); - const [error] = await safe(users.add(user.email, user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { password: 'Fo$%23' }); + const [error] = await safe(users.add(user.email, user, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); it('fails due to reserved username', async function () { - const user = Object.assign({}, ADMIN, { username: 'admin' }); - const [error] = await safe(users.add(user.email, user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { username: 'admin' }); + const [error] = await safe(users.add(user.email, user, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); it('fails due to invalid username', async function () { - const user = Object.assign({}, ADMIN, { username: 'moo+daemon' }); - const [error] = await safe(users.add(user.email, user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { username: 'moo+daemon' }); + const [error] = await safe(users.add(user.email, user, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); it('fails due to empty username', async function () { - const user = Object.assign({}, ADMIN, { username: '' }); - const [error] = await safe(users.add(user.email, user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { username: '' }); + const [error] = await safe(users.add(user.email, user, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); it('fails due to long username', async function () { - const user = Object.assign({}, ADMIN, { username: new Array(257).fill('Z').join('') }); - const [error] = await safe(users.add(user.email, user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { username: new Array(257).fill('Z').join('') }); + const [error] = await safe(users.add(user.email, user, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); it('fails due to reserved app pattern', async function () { - const user = Object.assign({}, ADMIN, { username: 'maybe.app' }); - const [error] = await safe(users.add(user.email, user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { username: 'maybe.app' }); + const [error] = await safe(users.add(user.email, user, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); it('fails because password is empty', async function () { - const user = Object.assign({}, ADMIN, { password: '' }); - const [error] = await safe(users.add(user.email, user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { password: '' }); + const [error] = await safe(users.add(user.email, user, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); it('can add user', async function () { - const id = await users.add(ADMIN.email, ADMIN, AUDIT_SOURCE); - ADMIN.id = id; + const id = await users.add(admin.email, admin, auditSource); + admin.id = id; }); it('cannot add user with same email again', async function () { - const [error] = await safe(users.add(ADMIN.email, ADMIN, AUDIT_SOURCE)); + const [error] = await safe(users.add(admin.email, admin, auditSource)); expect(error.reason).to.be(BoxError.ALREADY_EXISTS); expect(error.message).to.equal('email already exists'); }); it('cannot add user with same username again', async function () { - const [error] = await safe(users.add('somethingelse@not.taken', ADMIN, AUDIT_SOURCE)); + const [error] = await safe(users.add('somethingelse@not.taken', admin, auditSource)); expect(error.reason).to.be(BoxError.ALREADY_EXISTS); expect(error.message).to.equal('username already exists'); }); @@ -117,45 +117,45 @@ describe('User', function () { }); it('getOwner succeeds', async function () { - const id = await users.add(ADMIN.email, ADMIN, AUDIT_SOURCE); - ADMIN.id = id; + const id = await users.add(admin.email, admin, auditSource); + admin.id = id; const owner = await users.getOwner(); - checkUser(owner, ADMIN); + checkUser(owner, admin); }); it('can get by user id', async function () { - const result = await users.get(ADMIN.id); - checkUser(result, ADMIN); + const result = await users.get(admin.id); + checkUser(result, admin); }); it('can get by username', async function () { - const result = await users.getByUsername(ADMIN.username); - checkUser(result, ADMIN); + const result = await users.getByUsername(admin.username); + checkUser(result, admin); }); it('can get by email', async function () { - const result = await users.getByEmail(ADMIN.email); - checkUser(result, ADMIN); + const result = await users.getByEmail(admin.email); + checkUser(result, admin); }); it('add another admin', async function () { - const result = await users.add(USER.email, USER, AUDIT_SOURCE); - USER.id = result; - await users.update(USER, { role: users.ROLE_ADMIN }, AUDIT_SOURCE); - USER.role = users.ROLE_ADMIN; + const result = await users.add(user.email, user, auditSource); + user.id = result; + await users.update(user, { role: users.ROLE_ADMIN }, auditSource); + user.role = users.ROLE_ADMIN; }); it('getSuperadmins succeeds', async function () { const results = await users.getSuperadmins(); expect(results.length).to.be(1); - checkUser(results[0], ADMIN); + checkUser(results[0], admin); }); it('getAdmins succeeds', async function () { const results = await users.getAdmins(); expect(results.length).to.be(2); - checkUser(results[0], ADMIN); // owner is always the first - checkUser(results[1], USER); + checkUser(results[0], admin); // owner is always the first + checkUser(results[1], user); }); it('getByResetToken fails for empty resetToken', async function () { @@ -169,33 +169,33 @@ describe('User', function () { }); it('can get by resetToken', async function () { - USER.resetToken = new Array(64).fill('X').join(''); - await users.update(USER, { resetToken: USER.resetToken }, AUDIT_SOURCE); - const user = await users.getByResetToken(USER.resetToken); - checkUser(user, USER); + user.resetToken = new Array(64).fill('X').join(''); + await users.update(user, { resetToken: user.resetToken }, auditSource); + const user = await users.getByResetToken(user.resetToken); + checkUser(user, user); }); it('can getAll', async function () { const results = await users.getAll(); expect(results.length).to.be(2); - checkUser(results[0], ADMIN); - checkUser(results[1], USER); + checkUser(results[0], admin); + checkUser(results[1], user); }); it('can getAllPaged', async function () { let results = await users.getAllPaged(null, 1, 1); expect(results.length).to.be(1); - checkUser(results[0], ADMIN); + checkUser(results[0], admin); results = await users.getAllPaged(null, 2, 1); expect(results.length).to.be(1); - checkUser(results[0], USER); + checkUser(results[0], user); }); it('can getAllPaged (search)', async function () { - let results = await users.getAllPaged(ADMIN.email.slice(0, 8), 1, 1); + let results = await users.getAllPaged(admin.email.slice(0, 8), 1, 1); expect(results.length).to.be(1); - checkUser(results[0], ADMIN); + checkUser(results[0], admin); }); }); @@ -203,34 +203,34 @@ describe('User', function () { before(createOwner); it('fails due to unknown userid', async function () { - const user = Object.assign({}, ADMIN, { id: 'random' }); - const [error] = await safe(users.update(user, { displayName: 'full name' }, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { id: 'random' }); + const [error] = await safe(users.update(user, { displayName: 'full name' }, auditSource)); expect(error.reason).to.equal(BoxError.NOT_FOUND); }); it('fails due to invalid email', async function () { - const [error] = await safe(users.update(ADMIN, { email: 'brokenemailaddress' }, AUDIT_SOURCE)); + const [error] = await safe(users.update(admin, { email: 'brokenemailaddress' }, auditSource)); expect(error.reason).to.equal(BoxError.BAD_FIELD); }); xit('cannot update the user with already existing email', async function () { - const result = await users.add(USER.email, USER, AUDIT_SOURCE); - USER.id = result; + const result = await users.add(user.email, user, auditSource); + user.id = result; - const [error] = await safe(users.update(ADMIN, { email: USER.email }), AUDIT_SOURCE); + const [error] = await safe(users.update(admin, { email: user.email }), auditSource); expect(error.reason).to.be(BoxError.ALREADY_EXISTS); expect(error.message).to.equal('email already exists'); }); xit('can update the user with already existing username', async function () { - const [error] = await safe(users.update(ADMIN, { username: USER.username }), AUDIT_SOURCE); + const [error] = await safe(users.update(admin, { username: user.username }), auditSource); expect(error.reason).to.be(BoxError.ALREADY_EXISTS); expect(error.message).to.equal('username already exists'); }); xit('can update the user', async function () { - await users.update(ADMIN, { email: 'some@thing.com', displayName: 'Heiter' }, AUDIT_SOURCE); - const user = await users.get(ADMIN.id); + await users.update(admin, { email: 'some@thing.com', displayName: 'Heiter' }, auditSource); + const user = await users.get(admin.id); expect(user.email).to.equal('some@thing.com'); expect(user.displayName).to.equal('Heiter'); }); @@ -245,33 +245,33 @@ describe('User', function () { }); it('fails due to empty password', async function () { - const [error] = await safe(users.verify(ADMIN.id, '', users.AP_WEBADMIN)); + const [error] = await safe(users.verify(admin.id, '', users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); it('fails due to wrong password', async function () { - const [error] = await safe(users.verify(ADMIN.id, ADMIN.password+'x', users.AP_WEBADMIN)); + const [error] = await safe(users.verify(admin.id, admin.password+'x', users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); it('succeeds', async function () { - const result = await users.verify(ADMIN.id, ADMIN.password, users.AP_WEBADMIN); + const result = await users.verify(admin.id, admin.password, users.AP_WEBADMIN); expect(result).to.be.ok(); expect(result.appPassword).to.not.be.ok(); expect(result.ghost).to.not.be.ok(); }); it('fails for ghost if not enabled', async function () { - const [error] = await safe(users.verify(ADMIN.id, 'foobar', users.AP_WEBADMIN)); + const [error] = await safe(users.verify(admin.id, 'foobar', users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); it('fails for ghost with wrong password', async function () { let ghost = { }; - ghost[ADMIN.username] = 'testpassword'; + ghost[admin.username] = 'testpassword'; await fs.promises.writeFile(paths.GHOST_USER_FILE, JSON.stringify(ghost), 'utf8'); - const [error] = await safe(users.verify(ADMIN.id, 'foobar', users.AP_WEBADMIN)); + const [error] = await safe(users.verify(admin.id, 'foobar', users.AP_WEBADMIN)); await fs.promises.unlink(paths.GHOST_USER_FILE); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); @@ -279,25 +279,25 @@ describe('User', function () { it('succeeds for ghost', async function () { let ghost = { }; - ghost[ADMIN.username] = 'testpassword'; + ghost[admin.username] = 'testpassword'; await fs.promises.writeFile(paths.GHOST_USER_FILE, JSON.stringify(ghost), 'utf8'); - const result = await users.verify(ADMIN.id, 'testpassword', users.AP_WEBADMIN); + const result = await users.verify(admin.id, 'testpassword', users.AP_WEBADMIN); if (fs.existsSync(paths.GHOST_USER_FILE)) throw new Error('Ghost file exists after verification'); - expect(result.id).to.equal(ADMIN.id); + expect(result.id).to.equal(admin.id); expect(result.ghost).to.be(true); }); it('succeeds for normal user password when ghost file exists', async function () { let ghost = { }; - ghost[ADMIN.username] = 'testpassword'; + ghost[admin.username] = 'testpassword'; fs.writeFileSync(paths.GHOST_USER_FILE, JSON.stringify(ghost), 'utf8'); - const result = await users.verify(ADMIN.id, ADMIN.password, users.AP_WEBADMIN); + const result = await users.verify(admin.id, admin.password, users.AP_WEBADMIN); if (!fs.existsSync(paths.GHOST_USER_FILE)) throw new Error('Ghost file went way without verification'); - expect(result.id).to.equal(ADMIN.id); + expect(result.id).to.equal(admin.id); expect(result.ghost).to.not.be.ok(); }); }); @@ -311,32 +311,32 @@ describe('User', function () { }); it('fails due to empty password', async function () { - const [error] = await safe(users.verifyWithUsername(ADMIN.username, '', users.AP_WEBADMIN)); + const [error] = await safe(users.verifyWithUsername(admin.username, '', users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); it('fails due to wrong password', async function () { - const [error] = await safe(users.verifyWithUsername(ADMIN.username, 'somepass', users.AP_WEBADMIN)); + const [error] = await safe(users.verifyWithUsername(admin.username, 'somepass', users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); it('succeeds', async function () { - const result = await users.verifyWithUsername(ADMIN.username, ADMIN.password, users.AP_WEBADMIN); - expect(result.id).to.equal(ADMIN.id); + const result = await users.verifyWithUsername(admin.username, admin.password, users.AP_WEBADMIN); + expect(result.id).to.equal(admin.id); }); it('succeeds for different username case', async function () { - const result = await users.verifyWithUsername(ADMIN.username.toUpperCase(), ADMIN.password, users.AP_WEBADMIN); - expect(result.id).to.equal(ADMIN.id); + const result = await users.verifyWithUsername(admin.username.toUpperCase(), admin.password, users.AP_WEBADMIN); + expect(result.id).to.equal(admin.id); }); it('fails for ghost with wrong password', async function () { let ghost = { }; - ghost[ADMIN.username] = 'testpassword'; + ghost[admin.username] = 'testpassword'; fs.writeFileSync(paths.GHOST_USER_FILE, JSON.stringify(ghost), 'utf8'); - const [error] = await safe(users.verifyWithUsername(ADMIN.username, 'foobar', users.AP_WEBADMIN)); + const [error] = await safe(users.verifyWithUsername(admin.username, 'foobar', users.AP_WEBADMIN)); if (!fs.existsSync(paths.GHOST_USER_FILE)) throw new Error('Ghost file went way without verification'); fs.unlinkSync(paths.GHOST_USER_FILE); @@ -345,13 +345,13 @@ describe('User', function () { it('succeeds for ghost', async function () { let ghost = { }; - ghost[ADMIN.username] = 'testpassword'; + ghost[admin.username] = 'testpassword'; fs.writeFileSync(paths.GHOST_USER_FILE, JSON.stringify(ghost), 'utf8'); - const result = await users.verifyWithUsername(ADMIN.username, 'testpassword', users.AP_WEBADMIN); + const result = await users.verifyWithUsername(admin.username, 'testpassword', users.AP_WEBADMIN); if (fs.existsSync(paths.GHOST_USER_FILE)) throw new Error('Ghost file still around!'); - expect(result.id).to.equal(ADMIN.id); + expect(result.id).to.equal(admin.id); expect(result.ghost).to.be(true); }); }); @@ -360,37 +360,37 @@ describe('User', function () { before(createOwner); it('fails due to non existing user', async function () { - const [error] = await safe(users.verifyWithEmail('bad@email.com', ADMIN.password, users.AP_WEBADMIN)); + const [error] = await safe(users.verifyWithEmail('bad@email.com', admin.password, users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.NOT_FOUND); }); it('fails due to empty password', async function () { - const [error] = await safe(users.verifyWithEmail(ADMIN.email, '', users.AP_WEBADMIN)); + const [error] = await safe(users.verifyWithEmail(admin.email, '', users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); it('fails due to wrong password', async function () { - const [error] = await safe(users.verifyWithEmail(ADMIN.email, 'badpassword', users.AP_WEBADMIN)); + const [error] = await safe(users.verifyWithEmail(admin.email, 'badpassword', users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); it('succeeds', async function () { - const result = await users.verifyWithEmail(ADMIN.email, ADMIN.password, users.AP_WEBADMIN); - expect(result.id).to.be(ADMIN.id); + const result = await users.verifyWithEmail(admin.email, admin.password, users.AP_WEBADMIN); + expect(result.id).to.be(admin.id); }); it('succeeds for different email case', async function () { - const result = await users.verifyWithEmail(ADMIN.email.toUpperCase(), ADMIN.password, users.AP_WEBADMIN); - expect(result.id).to.be(ADMIN.id); + const result = await users.verifyWithEmail(admin.email.toUpperCase(), admin.password, users.AP_WEBADMIN); + expect(result.id).to.be(admin.id); }); it('fails for ghost with wrong password', async function () { let ghost = { }; - ghost[ADMIN.username] = 'testpassword'; + ghost[admin.username] = 'testpassword'; fs.writeFileSync(paths.GHOST_USER_FILE, JSON.stringify(ghost), 'utf8'); - const [error] = await safe(users.verifyWithEmail(ADMIN.email, 'foobar', users.AP_WEBADMIN)); + const [error] = await safe(users.verifyWithEmail(admin.email, 'foobar', users.AP_WEBADMIN)); if (!fs.existsSync(paths.GHOST_USER_FILE)) throw new Error('Ghost file not found after failed login!'); fs.unlinkSync(paths.GHOST_USER_FILE); @@ -399,14 +399,14 @@ describe('User', function () { it('succeeds for ghost', async function () { let ghost = { }; - ghost[ADMIN.username] = 'testpassword'; + ghost[admin.username] = 'testpassword'; fs.writeFileSync(paths.GHOST_USER_FILE, JSON.stringify(ghost), 'utf8'); - const result = await users.verifyWithEmail(ADMIN.email, 'testpassword', users.AP_WEBADMIN); + const result = await users.verifyWithEmail(admin.email, 'testpassword', users.AP_WEBADMIN); if (fs.existsSync(paths.GHOST_USER_FILE)) throw new Error('Ghost file still around!'); - expect(result.id).to.equal(ADMIN.id); + expect(result.id).to.equal(admin.id); expect(result.ghost).to.equal(true); }); }); @@ -415,14 +415,14 @@ describe('User', function () { before(createOwner); it('verify fails for inactive user', async function () { - await users.update(ADMIN, { active: false }, AUDIT_SOURCE); - const [error] = await safe(users.verify(ADMIN.id, ADMIN.password, users.AP_WEBADMIN)); + await users.update(admin, { active: false }, auditSource); + const [error] = await safe(users.verify(admin.id, admin.password, users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.NOT_FOUND); }); it('verify succeeds for inactive user', async function () { - await users.update(ADMIN, { active: true }, AUDIT_SOURCE); - await users.verify(ADMIN.id, ADMIN.password, users.AP_WEBADMIN); + await users.update(admin, { active: true }, auditSource); + await users.verify(admin.id, admin.password, users.AP_WEBADMIN); }); }); @@ -435,12 +435,12 @@ describe('User', function () { }); it('succeeds', async function () { - const result = await users.get(ADMIN.id); - expect(result.id).to.equal(ADMIN.id); - expect(result.email).to.equal(ADMIN.email.toLowerCase()); - expect(result.fallbackEmail).to.equal(ADMIN.email.toLowerCase()); - expect(result.username).to.equal(ADMIN.username.toLowerCase()); - expect(result.displayName).to.equal(ADMIN.displayName); + const result = await users.get(admin.id); + expect(result.id).to.equal(admin.id); + expect(result.email).to.equal(admin.email.toLowerCase()); + expect(result.fallbackEmail).to.equal(admin.email.toLowerCase()); + expect(result.username).to.equal(admin.username.toLowerCase()); + expect(result.displayName).to.equal(admin.displayName); }); }); @@ -464,32 +464,32 @@ describe('User', function () { before(createOwner); it('fails due to unknown user', async function () { - const user = Object.assign({}, ADMIN, { id: 'doesnotexist' }); - const [error] = await safe(users.setPassword(user, 'newpassword', AUDIT_SOURCE)); + const user = Object.assign({}, admin, { id: 'doesnotexist' }); + const [error] = await safe(users.setPassword(user, 'newpassword', auditSource)); expect(error.reason).to.be(BoxError.NOT_FOUND); }); it('fails due to empty password', async function () { - const [error] = await safe(users.setPassword(ADMIN, '', AUDIT_SOURCE)); + const [error] = await safe(users.setPassword(admin, '', auditSource)); expect(error.reason).to.be(BoxError.BAD_FIELD); }); it('fails due to invalid password', async function () { - const [error] = await safe(users.setPassword(ADMIN, 'foobar', AUDIT_SOURCE)); + const [error] = await safe(users.setPassword(admin, 'foobar', auditSource)); expect(error.reason).to.be(BoxError.BAD_FIELD); }); it('succeeds', async function () { - await users.setPassword(ADMIN, 'ThisIsNew1Password', AUDIT_SOURCE); + await users.setPassword(admin, 'ThisIsNew1Password', auditSource); }); it('actually changed the password (unable to login with old pasword)', async function () { - const [error] = await safe(users.verify(ADMIN.id, ADMIN.password, users.AP_WEBADMIN)); + const [error] = await safe(users.verify(admin.id, admin.password, users.AP_WEBADMIN)); expect(error.reason).to.equal(BoxError.INVALID_CREDENTIALS); }); xit('actually changed the password (login with new password)', async function () { - await users.verify(ADMIN.id, 'ThisIsNew1Password', users.AP_WEBADMIN); + await users.verify(admin.id, 'ThisIsNew1Password', users.AP_WEBADMIN); }); }); @@ -497,22 +497,22 @@ describe('User', function () { before(cleanupUsers); it('fails due to unkown email', async function () { - const [error] = await safe(users.sendPasswordResetByIdentifier('unknown@mail.com', AUDIT_SOURCE)); + const [error] = await safe(users.sendPasswordResetByIdentifier('unknown@mail.com', auditSource)); expect(error.reason).to.eql(BoxError.NOT_FOUND); }); it('fails due to unkown username', async function () { - const [error] = await safe(users.sendPasswordResetByIdentifier('unknown', AUDIT_SOURCE)); + const [error] = await safe(users.sendPasswordResetByIdentifier('unknown', auditSource)); expect(error.reason).to.eql(BoxError.NOT_FOUND); }); it('succeeds with email', async function () { - await users.sendPasswordResetByIdentifier(ADMIN.email); + await users.sendPasswordResetByIdentifier(admin.email); // checkMails(1, done); }); it('succeeds with username', async function () { - await users.sendPasswordResetByIdentifier(ADMIN.username); + await users.sendPasswordResetByIdentifier(admin.username); // checkMails(1, done); }); }); @@ -521,7 +521,7 @@ describe('User', function () { before(createOwner); it('fails as expected', async function () { - const [error] = await safe(users.sendInvite(ADMIN, { })); + const [error] = await safe(users.sendInvite(admin, { })); expect(error.reason).to.be(BoxError.CONFLICT); }); @@ -545,13 +545,13 @@ describe('User', function () { before(createOwner); it('fails for unknown user', async function () { - const user = Object.assign({}, ADMIN, { id: 'doesnotexist' }); - const [error] = await safe(users.del(user, AUDIT_SOURCE)); + const user = Object.assign({}, admin, { id: 'doesnotexist' }); + const [error] = await safe(users.del(user, auditSource)); expect(error.reason).to.be(BoxError.NOT_FOUND); }); it('can remove valid user', async function () { - await users.del(ADMIN, AUDIT_SOURCE); + await users.del(admin, auditSource); }); it('can re-create user after user was removed', createOwner); diff --git a/src/test/volumes-test.js b/src/test/volumes-test.js index 1d8c22640..7ccc7edec 100644 --- a/src/test/volumes-test.js +++ b/src/test/volumes-test.js @@ -6,60 +6,44 @@ 'use strict'; -const async = require('async'), - BoxError = require('../boxerror.js'), - database = require('../database.js'), +const BoxError = require('../boxerror.js'), + common = require('./common.js'), expect = require('expect.js'), safe = require('safetydance'), volumes = require('../volumes.js'); -const AUDIT_SOURCE = { ip: '1.2.3.4', userId: 'someuserid' }; - -function setup(done) { - // ensure data/config/mount paths - async.series([ - database.initialize, - database._clear - ], done); -} - -function cleanup(done) { - async.series([ - database._clear, - database.uninitialize - ], done); -} - describe('Volumes', function () { + const { setup, cleanup, auditSource } = common; + before(setup); after(cleanup); it('cannot add bad name', async function () { - const [error] = await safe(volumes.add({ name: 'music/is', hostPath: '/tmp/music', mountType: 'filesystem', mountOptions: {} }, AUDIT_SOURCE)); + const [error] = await safe(volumes.add({ name: 'music/is', hostPath: '/tmp/music', mountType: 'filesystem', mountOptions: {} }, auditSource)); if (!error) throw new Error('Expecting bad field error'); expect(error.reason).to.be(BoxError.BAD_FIELD); }); it('cannot add bad path', async function () { - const [error] = await safe(volumes.add({ name: 'music', hostPath: '/tmp/music', mountType: 'filesystem', mountOptions: {} }, AUDIT_SOURCE)); + const [error] = await safe(volumes.add({ name: 'music', hostPath: '/tmp/music', mountType: 'filesystem', mountOptions: {} }, auditSource)); if (!error) throw new Error('Expecting bad field error'); expect(error.reason).to.be(BoxError.BAD_FIELD); }); let volume; it('can add volume', async function () { - const id = await volumes.add({ name: 'music', hostPath: '/mnt/cloudron-test-music', mountType: 'filesystem', mountOptions: {} }, AUDIT_SOURCE); + const id = await volumes.add({ name: 'music', hostPath: '/mnt/cloudron-test-music', mountType: 'filesystem', mountOptions: {} }, auditSource); expect(id).to.be.a('string'); volume = { id, name: 'music', hostPath: '/mnt/cloudron-test-music' }; }); it('cannot add duplicate path', async function () { - const [error] = await safe(volumes.add({ name: 'music-dup', hostPath: '/mnt/cloudron-test-music', mountType: 'filesystem', mountOptions: {} }, AUDIT_SOURCE)); + const [error] = await safe(volumes.add({ name: 'music-dup', hostPath: '/mnt/cloudron-test-music', mountType: 'filesystem', mountOptions: {} }, auditSource)); expect(error.reason).to.be(BoxError.ALREADY_EXISTS); }); it('cannot add duplicate name', async function () { - const [error] = await safe(volumes.add({ name: 'music', hostPath: '/mnt/cloudron-test-music2', mountType: 'filesystem', mountOptions: {} }, AUDIT_SOURCE)); + const [error] = await safe(volumes.add({ name: 'music', hostPath: '/mnt/cloudron-test-music2', mountType: 'filesystem', mountOptions: {} }, auditSource)); expect(error.reason).to.be(BoxError.ALREADY_EXISTS); }); @@ -82,11 +66,11 @@ describe('Volumes', function () { }); it('cannot del random volume', async function () { - const [error] = await safe(volumes.del({ id: 'randomvolume' }, AUDIT_SOURCE)); + const [error] = await safe(volumes.del({ id: 'randomvolume' }, auditSource)); expect(error.reason).to.be(BoxError.NOT_FOUND); }); it('can del volume', async function () { - await volumes.del(volume, AUDIT_SOURCE); + await volumes.del(volume, auditSource); }); });