embark/test/fs.js

72 lines
1.5 KiB
JavaScript

/*globals after, before, describe, it*/
const {assert} = require('chai');
const os = require('os');
const underlyingFs = require('fs-extra');
const fs = require('../lib/core/fs');
describe('fs', () => {
let fsMethods = {};
before(() => {
this.oldProcessExit = process.exit;
process.exit = function() {};
for(const method in underlyingFs) {
fsMethods[method] = underlyingFs[method];
underlyingFs[method] = function() {};
}
});
after(() => {
process.exit = this.oldProcessExit;
for(const method in underlyingFs) {
underlyingFs[method] = fsMethods[method];
}
});
const helperFunctions = [
'dappPath',
'embarkPath',
'pkgPath',
'tmpDir'
];
const paths = [
'/etc',
'/home/testuser/src',
'/usr',
'../'
];
for(let func in fs) {
if(helperFunctions.includes(func)) continue;
describe(`fs.${func}`, () => {
it('should throw exceptions on paths outside the DApp root', (done) => {
paths.forEach(path => {
assert.throws(() => {
fs[func](path);
}, /EPERM: Operation not permitted/);
});
done();
});
it('should not throw exceptions on paths inside the temporary dir root', (done) => {
assert.doesNotThrow(async () => {
try {
await fs[func](os.tmpdir() + '/foo');
} catch(e) {
if(e.message.indexOf('EPERM') === 0) throw e;
}
}, /EPERM: Operation not permitted/);
done();
});
});
}
});