diff --git a/src/routes/test/api-test.js b/src/routes/test/api-test.js new file mode 100644 index 000000000..1476885c5 --- /dev/null +++ b/src/routes/test/api-test.js @@ -0,0 +1,39 @@ +/* jslint node:true */ +/* global it:false */ +/* global describe:false */ +/* global before:false */ +/* global after:false */ + +'use strict'; + +const common = require('./common.js'), + expect = require('expect.js'), + superagent = require('superagent'); + +describe('REST API', function () { + const { setup, cleanup, serverUrl, owner } = common; + + before(setup); + after(cleanup); + + it('does not crash with invalid JSON', async function () { + const response = await superagent.post(`${serverUrl}/api/v1/users`) + .query({ access_token: owner.token }) + .set('content-type', 'application/json') + .send('some invalid non-strict json') + .ok(() => true); + + expect(response.statusCode).to.equal(400); + expect(response.body.message).to.be('Failed to parse body'); + }); + + it('does not crash with invalid string', async function () { + const response = await superagent.post(`${serverUrl}/api/v1/users`) + .query({ access_token: owner.token }) + .set('content-type', 'application/x-www-form-urlencoded') + .send('some string') + .ok(() => true); + + expect(response.statusCode).to.equal(400); + }); +}); diff --git a/src/routes/test/cloudron-test.js b/src/routes/test/cloudron-test.js index 021c94906..3ce1a067b 100644 --- a/src/routes/test/cloudron-test.js +++ b/src/routes/test/cloudron-test.js @@ -5,139 +5,15 @@ /* global before:false */ /* global after:false */ -const async = require('async'), - constants = require('../../constants.js'), +const constants = require('../../constants.js'), common = require('./common.js'), - database = require('../../database.js'), expect = require('expect.js'), http = require('http'), - nock = require('nock'), os = require('os'), - server = require('../../server.js'), superagent = require('superagent'), settings = require('../../settings.js'); -describe('Cloudron API (pre-activation)', function () { - var SERVER_URL = 'http://localhost:' + constants.PORT; - - before(function (done) { - nock.cleanAll(); - - async.series([ - server.start.bind(server), - database._clear, - settings._setApiServerOrigin.bind(null, 'http://localhost:6060'), - settings.setBackupConfig.bind(null, { provider: 'filesystem', backupFolder: '/tmp', format: 'tgz', retentionPolicy: { keepWithinSecs: 10000 }, schedulePattern: '00 00 23 * * *' }) - ], done); - }); - - after(function (done) { - database._clear(function (error) { - expect(error).to.not.be.ok(); - - server.stop(done); - }); - }); - - it('device is in first time mode', function (done) { - superagent.get(SERVER_URL + '/api/v1/cloudron/status') - .end(function (err, res) { - expect(res.statusCode).to.equal(200); - expect(res.body.activated).to.not.be.ok(); - done(err); - }); - }); - - it('fails due to missing setupToken', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .send({ username: '', password: 'somepassword', email: 'admin@foo.bar' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails due to empty username', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: '', password: 'ADSFsdf$%436', email: 'admin@foo.bar' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails due to empty password', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: 'someuser', password: '', email: 'admin@foo.bar' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails due to empty email', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: 'someuser', password: 'ADSF#asd546', email: '' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails due to wrong displayName type', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: 'someuser', password: 'ADSF?#asd546', email: 'admin@foo.bar', displayName: 1234 }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails due to invalid email', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: 'someuser', password: 'ADSF#asd546', email: 'invalidemail' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('succeeds', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: 'someuser', password: 'ADSF#asd546', email: 'admin@foo.bar', displayName: 'tester' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(201); - done(); - }); - }); - - it('fails the second time', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: 'someuser', password: 'ADSF#asd546', email: 'admin@foo.bar' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(409); - done(); - }); - }); - - it('device left first time mode', function (done) { - superagent.get(SERVER_URL + '/api/v1/cloudron/status') - .end(function (err, res) { - expect(res.statusCode).to.equal(200); - expect(res.body.activated).to.be.ok(); - done(); - }); - }); -}); - -describe('Cloudron API (post activation)', function () { +describe('Cloudron API', function () { const { setup, cleanup, serverUrl, owner, user } = common; before(setup); diff --git a/src/routes/test/provision-test.js b/src/routes/test/provision-test.js new file mode 100644 index 000000000..bd1220014 --- /dev/null +++ b/src/routes/test/provision-test.js @@ -0,0 +1,338 @@ +'use strict'; + +/* global it:false */ +/* global describe:false */ +/* global before:false */ +/* global after:false */ + +const async = require('async'), + constants = require('../../constants.js'), + database = require('../../database.js'), + expect = require('expect.js'), + nock = require('nock'), + server = require('../../server.js'), + superagent = require('superagent'), + settings = require('../../settings.js'); + +const DOMAIN = 'example-server-test.com'; +const USERNAME = 'superadmin', PASSWORD = 'Foobar?1337', EMAIL ='silly@me.com'; +const SERVER_URL = 'http://localhost:' + constants.PORT; +let token = null; + +function waitForSetup(done) { + async.retry({ times: 5, interval: 4000 }, function (retryCallback) { + superagent.get(SERVER_URL + '/api/v1/cloudron/status') + .end(function (error, result) { + if (!result || result.statusCode !== 200) return retryCallback(new Error('Bad result')); + + if (!result.body.setup.active && result.body.setup.errorMessage === '' && result.body.adminFqdn) return retryCallback(); + + retryCallback(new Error('Not done yet: ' + JSON.stringify(result.body))); + }); + }, done); +} + +describe('Provision', function () { + before(function (done) { + nock.cleanAll(); + + async.series([ + server.start.bind(server), + database._clear, + settings._setApiServerOrigin.bind(null, 'http://localhost:6060'), + settings.setBackupConfig.bind(null, { provider: 'filesystem', backupFolder: '/tmp', format: 'tgz', retentionPolicy: { keepWithinSecs: 10000 }, schedulePattern: '00 00 23 * * *' }) + ], done); + }); + + after(function (done) { + database._clear(function (error) { + expect(error).to.not.be.ok(); + + server.stop(done); + }); + }); + + describe('DNS Setup', function () { + it('dns setup fails without provider', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { domain: DOMAIN, config: {} } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup fails with invalid provider', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'foobar', domain: DOMAIN, config: {} } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup fails with missing domain', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', config: {} } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup fails with invalid domain', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: '.foo', config: {} } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup fails with invalid config', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: 'not an object' } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup fails with invalid zoneName', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: {}, zoneName: 1337 } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup fails with invalid tlsConfig', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: {}, tlsConfig: 'foobar' } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup fails with invalid tlsConfig provider', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: {}, tlsConfig: { provider: 1337 } } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('dns setup succeeds', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, adminFqdn: 'my.' + DOMAIN, config: {}, tlsConfig: { provider: 'fallback' } } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(200); + + waitForSetup(done); + }); + }); + + xit('dns setup twice succeeds', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, DOMAIN, config: {} }, tlsConfig: { provider: 'fallback' } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(200); + + waitForSetup(done); + }); + }); + }); + + describe('Activation', function () { + it('device is in first time mode', function (done) { + superagent.get(SERVER_URL + '/api/v1/cloudron/status') + .end(function (err, res) { + expect(res.statusCode).to.equal(200); + expect(res.body.activated).to.not.be.ok(); + done(err); + }); + }); + + it('activation fails without username', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ password: PASSWORD, email: EMAIL }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('activation fails with invalid username', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: '?this.is-not!valid', password: PASSWORD, email: EMAIL }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('fails due to empty username', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: '', password: 'ADSFsdf$%436', email: 'admin@foo.bar' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('activation fails without email', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: USERNAME, password: PASSWORD }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('fails due to empty email', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: 'someuser', password: 'ADSF#asd546', email: '' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails due to invalid email', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: 'someuser', password: 'ADSF#asd546', email: 'invalidemail' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('activation fails without password', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: USERNAME, email: EMAIL }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('fails due to empty password', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: 'someuser', password: '', email: 'admin@foo.bar' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('activation fails with invalid password', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: USERNAME, password: 'short', email: EMAIL }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(400); + + done(); + }); + }); + + it('fails due to missing setupToken', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .send({ username: '', password: 'somepassword', email: 'admin@foo.bar' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails due to wrong displayName type', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: 'someuser', password: 'ADSF?#asd546', email: 'admin@foo.bar', displayName: 1234 }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('succeeds', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: 'someuser', password: 'ADSF#asd546', email: 'admin@foo.bar', displayName: 'tester' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(201); + expect(result.body.token).to.be.a('string'); + done(); + }); + }); + + it('fails the second time', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/activate') + .query({ setupToken: 'somesetuptoken' }) + .send({ username: 'someuser', password: 'ADSF#asd546', email: 'admin@foo.bar' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(409); + done(); + }); + }); + + it('dns setup after activation fails', function (done) { + superagent.post(SERVER_URL + '/api/v1/cloudron/setup') + .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, DOMAIN, config: {} } }) + .end(function (error, result) { + expect(result).to.be.ok(); + expect(result.statusCode).to.eql(409); + + done(); + }); + }); + + it('device left first time mode', function (done) { + superagent.get(SERVER_URL + '/api/v1/cloudron/status') + .end(function (err, res) { + expect(res.statusCode).to.equal(200); + expect(res.body.activated).to.be.ok(); + done(); + }); + }); + }); +}); + diff --git a/src/routes/test/server-test.js b/src/routes/test/server-test.js deleted file mode 100644 index f412f59c1..000000000 --- a/src/routes/test/server-test.js +++ /dev/null @@ -1,296 +0,0 @@ -/* jslint node:true */ -/* global it:false */ -/* global describe:false */ -/* global before:false */ -/* global after:false */ - -'use strict'; - -var async = require('async'), - constants = require('../../constants.js'), - database = require('../../database.js'), - expect = require('expect.js'), - superagent = require('superagent'), - server = require('../../server.js'); - -var SERVER_URL = 'http://localhost:' + constants.PORT; -var DOMAIN = 'example-server-test.com'; -var USERNAME = 'superadmin', PASSWORD = 'Foobar?1337', EMAIL ='silly@me.com'; -var token = null; - -function setup(done) { - async.series([ - server.start, - database._clear - ], done); -} - -function cleanup(done) { - async.series([ - database._clear, - server.stop - ], done); -} - -function waitForSetup(done) { - async.retry({ times: 5, interval: 4000 }, function (retryCallback) { - superagent.get(SERVER_URL + '/api/v1/cloudron/status') - .end(function (error, result) { - if (!result || result.statusCode !== 200) return retryCallback(new Error('Bad result')); - - if (!result.body.setup.active && result.body.setup.errorMessage === '' && result.body.adminFqdn) return retryCallback(); - - retryCallback(new Error('Not done yet: ' + JSON.stringify(result.body))); - }); - }, done); -} - -describe('REST API', function () { - before(setup); - after(cleanup); - - it('dns setup fails without provider', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { domain: DOMAIN, config: {} } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup fails with invalid provider', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'foobar', domain: DOMAIN, config: {} } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup fails with missing domain', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', config: {} } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup fails with invalid domain', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: '.foo', config: {} } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup fails with invalid config', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: 'not an object' } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup fails with invalid zoneName', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: {}, zoneName: 1337 } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup fails with invalid tlsConfig', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: {}, tlsConfig: 'foobar' } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup fails with invalid tlsConfig provider', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, config: {}, tlsConfig: { provider: 1337 } } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('dns setup succeeds', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, adminFqdn: 'my.' + DOMAIN, config: {}, tlsConfig: { provider: 'fallback' } } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(200); - - waitForSetup(done); - }); - }); - - xit('dns setup twice succeeds', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, DOMAIN, config: {} }, tlsConfig: { provider: 'fallback' } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(200); - - waitForSetup(done); - }); - }); - - it('activation fails without username', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ password: PASSWORD, email: EMAIL }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('activation fails with invalid username', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: '?this.is-not!valid', password: PASSWORD, email: EMAIL }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('activation fails without email', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: USERNAME, password: PASSWORD }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('activation fails with invalid email', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: USERNAME, password: PASSWORD, email: 'notanemail' }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('activation fails without password', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: USERNAME, email: EMAIL }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('activation fails with invalid password', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: USERNAME, password: 'short', email: EMAIL }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(400); - - done(); - }); - }); - - it('activation succeeds', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: USERNAME, password: PASSWORD, email: EMAIL }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(201); - - // stash token for further use - token = result.body.token; - - done(); - }); - }); - - it('activating twice fails', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/activate') - .query({ setupToken: 'somesetuptoken' }) - .send({ username: USERNAME, password: PASSWORD, email: EMAIL }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(409); - - done(); - }); - }); - - it('dns setup after activation fails', function (done) { - superagent.post(SERVER_URL + '/api/v1/cloudron/setup') - .send({ dnsConfig: { provider: 'noop', domain: DOMAIN, DOMAIN, config: {} } }) - .end(function (error, result) { - expect(result).to.be.ok(); - expect(result.statusCode).to.eql(409); - - done(); - }); - }); - - it('does not crash with invalid JSON', function (done) { - superagent.post(SERVER_URL + '/api/v1/users') - .query({ access_token: token }) - .set('content-type', 'application/json') - .send('some invalid non-strict json') - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - expect(result.body.message).to.be('Failed to parse body'); - - done(); - }); - }); - - it('does not crash with invalid string', function (done) { - superagent.post(SERVER_URL + '/api/v1/users') - .query({ access_token: token }) - .set('content-type', 'application/x-www-form-urlencoded') - .send('some string') - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - - done(); - }); - }); -});