|
|
@ -1,18 +1,30 @@ |
|
|
|
import test from 'ava'; |
|
|
|
import { join, resolve } from 'path'; |
|
|
|
import _getFiles from '../lib/get-files'; |
|
|
|
import { |
|
|
|
npm as getNpmFiles_, |
|
|
|
docker as getDockerFiles |
|
|
|
} from '../lib/get-files'; |
|
|
|
import hash from '../lib/hash'; |
|
|
|
import { asc as alpha } from 'alpha-sort'; |
|
|
|
import { readFile } from 'fs-promise'; |
|
|
|
|
|
|
|
const prefix = join(__dirname, '_fixtures') + '/'; |
|
|
|
const base = (path) => path.replace(prefix, ''); |
|
|
|
const fixture = (name) => resolve(`./_fixtures/${name}`); |
|
|
|
|
|
|
|
// overload to force debugging
|
|
|
|
const getFiles = (dir) => _getFiles(dir, null, true); |
|
|
|
const getNpmFiles = async (dir) => { |
|
|
|
const pkg = await readJSON(resolve(dir, 'package.json')); |
|
|
|
return getNpmFiles_(dir, pkg); |
|
|
|
}; |
|
|
|
|
|
|
|
test('`files` + README', async t => { |
|
|
|
let files = await getFiles(fixture('files-in-package')); |
|
|
|
const readJSON = async (file) => { |
|
|
|
const data = await readFile(file); |
|
|
|
return JSON.parse(data); |
|
|
|
}; |
|
|
|
|
|
|
|
test('`files`', async t => { |
|
|
|
let files = await getNpmFiles(fixture('files-in-package')); |
|
|
|
t.is(files.length, 3); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(base(files[0]), 'files-in-package/build/a/b/c/d.js'); |
|
|
@ -20,19 +32,19 @@ test('`files` + README', async t => { |
|
|
|
t.is(base(files[2]), 'files-in-package/package.json'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('`files` + README + `.*.swp` + `.npmignore`', async t => { |
|
|
|
let files = await getFiles(fixture('files-in-package-ignore')); |
|
|
|
t.is(files.length, 3); |
|
|
|
test('`files` + `.*.swp` + `.npmignore`', async t => { |
|
|
|
let files = await getNpmFiles(fixture('files-in-package-ignore')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 3); |
|
|
|
t.is(base(files[0]), 'files-in-package-ignore/build/a/b/c/d.js'); |
|
|
|
t.is(base(files[1]), 'files-in-package-ignore/build/a/e.js'); |
|
|
|
t.is(base(files[2]), 'files-in-package-ignore/package.json'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('simple', async t => { |
|
|
|
let files = await getFiles(fixture('simple')); |
|
|
|
t.is(files.length, 5); |
|
|
|
let files = await getNpmFiles(fixture('simple')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 5); |
|
|
|
t.is(base(files[0]), 'simple/bin/test'); |
|
|
|
t.is(base(files[1]), 'simple/index.js'); |
|
|
|
t.is(base(files[2]), 'simple/lib/woot'); |
|
|
@ -41,16 +53,17 @@ test('simple', async t => { |
|
|
|
}); |
|
|
|
|
|
|
|
test('simple with main', async t => { |
|
|
|
let files = await getFiles(fixture('simple-main')); |
|
|
|
let files = await getNpmFiles(fixture('simple-main')); |
|
|
|
t.is(files.length, 3); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 3); |
|
|
|
t.is(base(files[0]), 'simple-main/build/a.js'); |
|
|
|
t.is(base(files[1]), 'simple-main/index.js'); |
|
|
|
t.is(base(files[2]), 'simple-main/package.json'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('hashes', async t => { |
|
|
|
const files = await getFiles(fixture('hashes')); |
|
|
|
const files = await getNpmFiles(fixture('hashes')); |
|
|
|
const hashes = await hash(files); |
|
|
|
t.is(hashes.size, 3); |
|
|
|
t.is(hashes.get('277c55a2042910b9fe706ad00859e008c1b7d172').names[0], prefix + 'hashes/dei.png'); |
|
|
@ -60,8 +73,50 @@ test('hashes', async t => { |
|
|
|
}); |
|
|
|
|
|
|
|
test('ignore node_modules', async t => { |
|
|
|
let files = await getFiles(fixture('no-node_modules')); |
|
|
|
let files = await getNpmFiles(fixture('no-node_modules')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 2); |
|
|
|
t.is(base(files[0]), 'no-node_modules/index.js'); |
|
|
|
t.is(base(files[1]), 'no-node_modules/package.json'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('ignore nested `node_modules` with .npmignore **', async t => { |
|
|
|
let files = await getNpmFiles(fixture('nested-node_modules')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 2); |
|
|
|
t.is(base(files[0]), 'nested-node_modules/index.js'); |
|
|
|
t.is(base(files[1]), 'nested-node_modules/package.json'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('include `main` even if not in files', async t => { |
|
|
|
let files = await getNpmFiles(fixture('always-include-main')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 3); |
|
|
|
t.is(base(files[0]), 'always-include-main/a.js'); |
|
|
|
t.is(base(files[1]), 'always-include-main/package.json'); |
|
|
|
t.is(base(files[2]), 'always-include-main/woot.js'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('support whitelisting with .npmignore and !', async t => { |
|
|
|
let files = await getNpmFiles(fixture('negation')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 2); |
|
|
|
t.is(base(files[0]), 'negation/a.js'); |
|
|
|
t.is(base(files[1]), 'negation/package.json'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('support `now.files`', async t => { |
|
|
|
let files = await getNpmFiles(fixture('now-files')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 2); |
|
|
|
t.is(base(files[0]), 'now-files/b.js'); |
|
|
|
t.is(base(files[1]), 'now-files/package.json'); |
|
|
|
}); |
|
|
|
|
|
|
|
test('support docker', async t => { |
|
|
|
let files = await getDockerFiles(fixture('dockerfile')); |
|
|
|
files = files.sort(alpha); |
|
|
|
t.is(files.length, 2); |
|
|
|
t.is(base(files[0]), 'dockerfile/Dockerfile'); |
|
|
|
t.is(base(files[1]), 'dockerfile/a.js'); |
|
|
|
}); |
|
|
|