mirror of https://gitee.com/bigwinds/arangodb
141 lines
4.1 KiB
JavaScript
141 lines
4.1 KiB
JavaScript
/* global arango, describe, beforeEach, afterEach, it*/
|
|
'use strict';
|
|
|
|
const expect = require('chai').expect;
|
|
const FoxxManager = require('@arangodb/foxx/manager');
|
|
const request = require('@arangodb/request');
|
|
const fs = require('fs');
|
|
const internal = require('internal');
|
|
const basePath = fs.makeAbsolute(fs.join(internal.startupPath, 'common', 'test-data', 'apps', 'headers'));
|
|
const arangodb = require('@arangodb');
|
|
const db = arangodb.db;
|
|
const aql = arangodb.aql;
|
|
var origin = arango.getEndpoint().replace(/\+vpp/, '').replace(/^tcp:/, 'http:').replace(/^ssl:/, 'https:');
|
|
|
|
describe('FoxxApi commit', function () {
|
|
const mount = '/test';
|
|
|
|
beforeEach(function () {
|
|
try {
|
|
FoxxManager.uninstall(mount, {force: true});
|
|
} catch (e) {}
|
|
FoxxManager.install(basePath, mount);
|
|
});
|
|
|
|
afterEach(function () {
|
|
try {
|
|
FoxxManager.uninstall(mount, {force: true});
|
|
} catch (e) {}
|
|
});
|
|
|
|
it('should fix missing service definition', function () {
|
|
db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
REMOVE service IN _apps
|
|
`);
|
|
let result = request.get('/test/header-echo', { headers: { origin } });
|
|
expect(result.statusCode).to.equal(404);
|
|
|
|
result = request.post('/_api/foxx/commit');
|
|
expect(result.statusCode).to.equal(204);
|
|
|
|
result = request.get('/test/header-echo', { headers: { origin } });
|
|
expect(result.statusCode).to.equal(200);
|
|
expect(result.headers['access-control-allow-origin']).to.equal(origin);
|
|
});
|
|
|
|
it('should fix missing checksum', function () {
|
|
db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
UPDATE service WITH { checksum: null } IN _apps
|
|
`);
|
|
let checksum = db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
RETURN service.checksum
|
|
`).next();
|
|
expect(checksum).to.equal(null);
|
|
|
|
const result = request.post('/_api/foxx/commit');
|
|
expect(result.statusCode).to.equal(204);
|
|
|
|
checksum = db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
RETURN service.checksum
|
|
`).next();
|
|
expect(checksum).to.not.equal(null);
|
|
});
|
|
|
|
it('without param replace should not fix wrong checksum', function () {
|
|
db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
UPDATE service WITH { checksum: '1234' } IN _apps
|
|
`);
|
|
let checksum = db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
RETURN service.checksum
|
|
`).next();
|
|
expect(checksum).to.equal('1234');
|
|
|
|
const result = request.post('/_api/foxx/commit');
|
|
expect(result.statusCode).to.equal(204);
|
|
|
|
checksum = db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
RETURN service.checksum
|
|
`).next();
|
|
expect(checksum).to.equal('1234');
|
|
});
|
|
|
|
it('with param replace should fix wrong checksum', function () {
|
|
db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
UPDATE service WITH { checksum: '1234' } IN _apps
|
|
`);
|
|
let checksum = db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
RETURN service.checksum
|
|
`).next();
|
|
expect(checksum).to.equal('1234');
|
|
|
|
const result = request.post('/_api/foxx/commit', { qs: { replace: true } });
|
|
expect(result.statusCode).to.equal(204);
|
|
|
|
checksum = db._query(aql`
|
|
FOR service IN _apps
|
|
FILTER service.mount == ${mount}
|
|
RETURN service.checksum
|
|
`).next();
|
|
expect(checksum).to.not.equal('1234');
|
|
});
|
|
|
|
it('should fix missing bundle', function () {
|
|
db._query(aql`
|
|
FOR bundle IN _appbundles
|
|
REMOVE bundle IN _appbundles
|
|
`);
|
|
let bundles = db._query(aql`
|
|
FOR bundle IN _appbundles
|
|
RETURN 1
|
|
`).toArray().length;
|
|
expect(bundles).to.equal(0);
|
|
|
|
const result = request.post('/_api/foxx/commit', { qs: { replace: true } });
|
|
expect(result.statusCode).to.equal(204);
|
|
|
|
bundles = db._query(aql`
|
|
FOR bundle IN _appbundles
|
|
RETURN 1
|
|
`).toArray().length;
|
|
expect(bundles).to.equal(1);
|
|
});
|
|
});
|