Skip to content

Commit a63d2bf

Browse files
committed
Updated unit tests (#28)
1 parent 1416357 commit a63d2bf

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

__mocks__/bent.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const fs = require('fs-extra');
2+
const tar = require('tar');
3+
const path = require('path');
4+
5+
module.exports = () => async () => {
6+
const root = path.resolve(__dirname, 'user-installable-package');
7+
const files = await fs.readdir(root);
8+
9+
return tar.c({
10+
gzip: true,
11+
cwd: root
12+
}, files);
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"name": "UserInstallablePackage"
3+
}

__tests__/packages.js

+18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ const osjs = require('osjs');
22
const path = require('path');
33
const Packages = require('../src/packages.js');
44

5+
jest.mock('bent');
6+
57
describe('Packages', () => {
68
let core;
79
let packages;
@@ -25,6 +27,22 @@ describe('Packages', () => {
2527
.toBe(true);
2628
});
2729

30+
test('#installPackage', async () => {
31+
await expect(packages.installPackage('jest:/UserInstallablePackage.tgz?redacted', {
32+
root: 'home:/.packages'
33+
}, {username: 'packages'})).resolves.toEqual({
34+
reload: true
35+
});
36+
});
37+
38+
test('#uninstallPackage', async () => {
39+
await expect(packages.uninstallPackage('UserInstallablePackage', {
40+
root: 'home:/.packages'
41+
}, {username: 'packages'})).resolves.toEqual({
42+
reload: true
43+
});
44+
});
45+
2846
test('#handleMessage', () => {
2947
const params = [{
3048
pid: 1,

src/packages.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -159,18 +159,22 @@ class Packages {
159159
const name = archiveName(url);
160160
const target = await realpath(`${options.root}/${name}`, user);
161161

162-
if (await fs.exists(target)) {
162+
if (path.resolve(target) === path.resolve(options.root)) {
163+
throw new Error('Invalid package source');
164+
} else if (await fs.exists(target)) {
163165
throw new Error('Target already exists');
164166
} else if (options.system) {
165167
throw new Error('System packages not yet implemented');
166168
}
167169

168170
const stream = await fetchSteam(url, options);
169-
await fs.mkdir(target);
171+
172+
await fs.mkdirp(target);
170173
await extract(stream, target);
171174

172175
// FIXME: npm packages have a 'package' subdirectory
173-
if (!await fs.exists(path.resolve(target, 'metadata.json'))) {
176+
const exists = await fs.exists(path.resolve(target, 'metadata.json'));
177+
if (!exists) {
174178
await fs.remove(target);
175179

176180
throw new Error('Invalid package');

0 commit comments

Comments
 (0)