Files
cloudron-box/src/routes/test/support-test.js

187 lines
7.6 KiB
JavaScript
Raw Normal View History

/* global it:false */
/* global describe:false */
/* global before:false */
/* global after:false */
'use strict';
2021-08-12 16:27:31 -07:00
const common = require('./common.js'),
expect = require('expect.js'),
2021-08-12 16:27:31 -07:00
fs = require('fs'),
2018-12-19 14:30:04 -08:00
nock = require('nock'),
2021-08-12 16:27:31 -07:00
support = require('../../support.js'),
superagent = require('superagent');
2021-08-12 16:27:31 -07:00
describe('Support API', function () {
const { setup, cleanup, serverUrl, owner, mockApiServerOrigin, appstoreToken } = common;
2021-08-12 16:27:31 -07:00
before(setup);
after(cleanup);
2021-08-12 16:27:31 -07:00
const authorizedKeysFile = support._sshInfo().filePath;
2021-08-12 16:27:31 -07:00
describe('remote support', function () {
it('get remote support', async function () {
const response = await superagent.get(`${serverUrl}/api/v1/support/remote_support`)
.query({ access_token: owner.token });
expect(response.statusCode).to.equal(200);
expect(response.body.enabled).to.be(false);
});
2021-08-12 16:27:31 -07:00
it('enable remote support', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/remote_support`)
.query({ access_token: owner.token })
.send({ enable: true });
2021-08-12 16:27:31 -07:00
expect(response.statusCode).to.equal(202);
2021-08-12 16:27:31 -07:00
let data = await fs.promises.readFile(authorizedKeysFile, 'utf8');
let count = (data.match(/support@cloudron.io/g) || []).length;
expect(count).to.be(1);
});
2018-12-19 14:30:04 -08:00
2021-08-12 16:27:31 -07:00
it('returns true when remote support enabled', async function () {
const response = await superagent.get(`${serverUrl}/api/v1/support/remote_support`)
.query({ access_token: owner.token });
expect(response.statusCode).to.equal(200);
expect(response.body.enabled).to.be(true);
});
2021-08-12 16:27:31 -07:00
it('enable remote support (again)', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/remote_support`)
.query({ access_token: owner.token })
.send({ enable: true });
expect(response.statusCode).to.equal(202);
2018-12-19 14:30:04 -08:00
2021-08-12 16:27:31 -07:00
let data = await fs.promises.readFile(authorizedKeysFile, 'utf8');
let count = (data.match(/support@cloudron.io/g) || []).length;
expect(count).to.be(1);
});
2021-08-12 16:27:31 -07:00
it('disable remote support', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/remote_support`)
.query({ access_token: owner.token })
.send({ enable: false });
2021-08-12 16:27:31 -07:00
expect(response.statusCode).to.equal(202);
2021-08-12 16:27:31 -07:00
let data = await fs.promises.readFile(authorizedKeysFile, 'utf8');
let count = (data.match(/support@cloudron.io/g) || []).length;
expect(count).to.be(0);
});
2021-08-12 16:27:31 -07:00
it('disable remote support (again)', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/remote_support`)
.query({ access_token: owner.token })
.send({ enable: false });
2021-08-12 16:27:31 -07:00
expect(response.statusCode).to.equal(202);
const data = await fs.promises.readFile(authorizedKeysFile, 'utf8');
const count = (data.match(/support@cloudron.io/g) || []).length;
expect(count).to.be(0);
});
});
2018-12-19 14:30:04 -08:00
2019-05-07 11:36:08 -07:00
describe('ticket', function () {
2021-08-12 16:27:31 -07:00
it('fails without token', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'ticket', subject: 'some subject', description: 'some description' })
2021-08-12 16:27:31 -07:00
.ok(() => true);
expect(response.statusCode).to.equal(401);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('fails without type', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ subject: 'some subject', description: 'some description' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token })
.ok(() => true);
expect(response.statusCode).to.equal(400);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('fails with empty type', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: '', subject: 'some subject', description: 'some description' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token })
.ok(() => true);
expect(response.statusCode).to.equal(400);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('fails with unknown type', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'foobar', subject: 'some subject', description: 'some description' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token })
.ok(() => true);
expect(response.statusCode).to.equal(400);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('fails without description', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'ticket', subject: 'some subject' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token })
.ok(() => true);
expect(response.statusCode).to.equal(400);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('fails with empty subject', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'ticket', subject: '', description: 'some description' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token })
.ok(() => true);
expect(response.statusCode).to.equal(400);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('fails with empty description', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'ticket', subject: 'some subject', description: '' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token })
.ok(() => true);
expect(response.statusCode).to.equal(400);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('fails without subject', async function () {
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'ticket', description: 'some description' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token })
.ok(() => true);
expect(response.statusCode).to.equal(400);
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('succeeds with ticket type', async function () {
const scope2 = nock(mockApiServerOrigin)
2018-12-19 14:30:04 -08:00
.filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body
2021-08-12 16:27:31 -07:00
.post(`/api/v1/ticket?accessToken=${appstoreToken}`)
2018-12-19 14:30:04 -08:00
.reply(201, { });
2021-08-12 16:27:31 -07:00
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'ticket', subject: 'some subject', description: 'some description' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token });
expect(response.statusCode).to.equal(201);
expect(scope2.isDone()).to.be.ok();
2018-12-19 14:30:04 -08:00
});
2021-08-12 16:27:31 -07:00
it('succeeds with app type', async function () {
const scope2 = nock(mockApiServerOrigin)
2018-12-19 14:30:04 -08:00
.filteringRequestBody(function (/* unusedBody */) { return ''; }) // strip out body
2021-08-12 16:27:31 -07:00
.post(`/api/v1/ticket?accessToken=${appstoreToken}`)
2018-12-19 14:30:04 -08:00
.reply(201, { });
2021-08-12 16:27:31 -07:00
const response = await superagent.post(`${serverUrl}/api/v1/support/ticket`)
2018-12-19 14:30:04 -08:00
.send({ type: 'app_missing', subject: 'some subject', description: 'some description' })
2021-08-12 16:27:31 -07:00
.query({ access_token: owner.token });
expect(response.statusCode).to.equal(201);
expect(scope2.isDone()).to.be.ok();
2018-12-19 14:30:04 -08:00
});
});
});