/* global it:false */ import appstore from '../appstore.js'; import BoxError from '../boxerror.js'; import common from './common.js'; import expect from 'expect.js'; import nock from 'nock'; import provision from '../provision.js'; import safe from 'safetydance'; /* global describe:false */ /* global before:false */ /* global after:false */ describe('Provision', function () { const { domainSetup, auditSource, cleanup } = common; describe('Activate', function () { before(async function () { await domainSetup(); if (!nock.isActive()) nock.activate(); }); after(cleanup); it('cannot activate when appstore unreachable', async function () { const [error] = await safe(provision.activate('username', 'password', 'test@cloudron.io', 'Some Name', '1.2.3.4', auditSource)); expect(error.reason).to.be(BoxError.NETWORK_ERROR); }); it('cannot activate with non-201', async function () { const scope1 = nock(await appstore.getApiServerOrigin()) .post('/api/v1/register_cloudron3', (body) => typeof body.domain === 'string' && typeof body.version === 'string') .reply(401, {}); const [error] = await safe(provision.activate('username', 'password', 'test@cloudron.io', 'Some Name', '1.2.3.4', auditSource)); expect(error.reason).to.be(BoxError.EXTERNAL_ERROR); expect(scope1.isDone()).to.be.ok(); scope1.persist(false); }); it('cannot activate with incorrect fields', async function () { const scope1 = nock(await appstore.getApiServerOrigin()) .post('/api/v1/register_cloudron3', (body) => typeof body.domain === 'string' && typeof body.version === 'string') .reply(201, { id: '32' }); const [error] = await safe(provision.activate('username', 'password', 'test@cloudron.io', 'Some Name', '1.2.3.4', auditSource)); expect(error.reason).to.be(BoxError.EXTERNAL_ERROR); expect(scope1.isDone()).to.be.ok(); scope1.persist(false); }); it('can activate with correct fields', async function () { const scope1 = nock(await appstore.getApiServerOrigin()) .post('/api/v1/register_cloudron3', (body) => typeof body.domain === 'string' && typeof body.version === 'string') .reply(201, { cloudronId: '32', cloudronToken: 'xx' }); const scope2 = nock(await appstore.getApiServerOrigin()) .post('/api/v1/subscription3?accessToken=xx', (body) => typeof body.state === 'object' && typeof body.state.userCount === 'number') .reply(200, { features: {} }); await provision.activate('username', 'password', 'test@cloudron.io', 'Some Name', '1.2.3.4', auditSource); expect(scope1.isDone()).to.be.ok(); scope1.persist(false); expect(scope2.isDone()).to.be.ok(); scope2.persist(false); }); }); });