diff --git a/src/routes/test/cloudron-test.js b/src/routes/test/cloudron-test.js index bcaf0aa75..1fff8957d 100644 --- a/src/routes/test/cloudron-test.js +++ b/src/routes/test/cloudron-test.js @@ -5,8 +5,7 @@ /* global before:false */ /* global after:false */ -var accesscontrol = require('../../accesscontrol.js'), - async = require('async'), +let async = require('async'), config = require('../../config.js'), database = require('../../database.js'), expect = require('expect.js'), @@ -209,141 +208,6 @@ describe('Cloudron', function () { }); }); - describe('feedback', function () { - before(function (done) { - async.series([ - setup, - - function (callback) { - 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(); - - // stash token for further use - token = result.body.token; - - callback(); - }); - }, - ], done); - }); - - after(cleanup); - - it('fails without token', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'ticket', subject: 'some subject', description: 'some description' }) - .end(function (error, result) { - expect(result.statusCode).to.equal(401); - done(); - }); - }); - - it('fails without type', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ subject: 'some subject', description: 'some description' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails with empty type', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: '', subject: 'some subject', description: 'some description' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails with unknown type', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'foobar', subject: 'some subject', description: 'some description' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails without description', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'ticket', subject: 'some subject' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails with empty subject', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'ticket', subject: '', description: 'some description' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails with empty description', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'ticket', subject: 'some subject', description: '' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('fails without subject', function (done) { - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'ticket', description: 'some description' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(400); - done(); - }); - }); - - it('succeeds with ticket type', function (done) { - var scope2 = nock(config.apiServerOrigin()) - .filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body - .post('/api/v1/users/USER_ID/cloudrons/CLOUDRON_ID/feedback?accessToken=ACCESS_TOKEN') - .reply(201, { }); - - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'ticket', subject: 'some subject', description: 'some description' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(201); - expect(scope2.isDone()).to.be.ok(); - done(); - }); - }); - - it('succeeds with app type', function (done) { - var scope2 = nock(config.apiServerOrigin()) - .filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body - .post('/api/v1/users/USER_ID/cloudrons/CLOUDRON_ID/feedback?accessToken=ACCESS_TOKEN') - .reply(201, { }); - - superagent.post(SERVER_URL + '/api/v1/feedback') - .send({ type: 'app_missing', subject: 'some subject', description: 'some description' }) - .query({ access_token: token }) - .end(function (error, result) { - expect(result.statusCode).to.equal(201); - expect(scope2.isDone()).to.be.ok(); - done(); - }); - }); - }); - describe('logs', function () { before(function (done) { async.series([ diff --git a/src/routes/test/support-test.js b/src/routes/test/support-test.js index 88a850c74..3218a585f 100644 --- a/src/routes/test/support-test.js +++ b/src/routes/test/support-test.js @@ -9,8 +9,11 @@ var async = require('async'), config = require('../../config.js'), database = require('../../database.js'), expect = require('expect.js'), + nock = require('nock'), path = require('path'), safe = require('safetydance'), + settings = require('../../settings.js'), + settingsdb = require('../../settingsdb.js'), superagent = require('superagent'), server = require('../../server.js'); @@ -21,6 +24,7 @@ var AUTHORIZED_KEYS_FILE = path.join(config.baseDir(), 'authorized_keys'); var token = null; function setup(done) { + nock.cleanAll(); config._reset(); config.setFqdn('example-ssh-test.com'); safe.fs.unlinkSync(AUTHORIZED_KEYS_FILE); @@ -43,23 +47,27 @@ function setup(done) { callback(); }); - } + }, + + settingsdb.set.bind(null, settings.APPSTORE_CONFIG_KEY, JSON.stringify({ userId: 'USER_ID', cloudronId: 'CLOUDRON_ID', token: 'ACCESS_TOKEN' })) ], done); } function cleanup(done) { database._clear(function (error) { - expect(!error).to.be.ok(); + expect(error).to.not.be.ok(); + + config._reset(); server.stop(done); }); } describe('Support API', function () { - before(setup); - after(cleanup); - describe('remote support', function () { + before(setup); + after(cleanup); + it('get remote support', function (done) { superagent.get(SERVER_URL + '/api/v1/support/remote_support') .query({ access_token: token }) @@ -136,4 +144,120 @@ describe('Support API', function () { }); }); }); + + describe('feedback', function () { + before(setup); + after(cleanup); + + it('fails without token', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'ticket', subject: 'some subject', description: 'some description' }) + .end(function (error, result) { + expect(result.statusCode).to.equal(401); + done(); + }); + }); + + it('fails without type', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ subject: 'some subject', description: 'some description' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails with empty type', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: '', subject: 'some subject', description: 'some description' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails with unknown type', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'foobar', subject: 'some subject', description: 'some description' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails without description', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'ticket', subject: 'some subject' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails with empty subject', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'ticket', subject: '', description: 'some description' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails with empty description', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'ticket', subject: 'some subject', description: '' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('fails without subject', function (done) { + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'ticket', description: 'some description' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('succeeds with ticket type', function (done) { + var scope2 = nock(config.apiServerOrigin()) + .filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body + .post('/api/v1/users/USER_ID/cloudrons/CLOUDRON_ID/feedback?accessToken=ACCESS_TOKEN') + .reply(201, { }); + + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'ticket', subject: 'some subject', description: 'some description' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(201); + expect(scope2.isDone()).to.be.ok(); + done(); + }); + }); + + it('succeeds with app type', function (done) { + var scope2 = nock(config.apiServerOrigin()) + .filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body + .post('/api/v1/users/USER_ID/cloudrons/CLOUDRON_ID/feedback?accessToken=ACCESS_TOKEN') + .reply(201, { }); + + superagent.post(SERVER_URL + '/api/v1/support/feedback') + .send({ type: 'app_missing', subject: 'some subject', description: 'some description' }) + .query({ access_token: token }) + .end(function (error, result) { + expect(result.statusCode).to.equal(201); + expect(scope2.isDone()).to.be.ok(); + done(); + }); + }); + }); });