Skip to content

Commit

Permalink
test: fix sorting of globbed assets declared as objects
Browse files Browse the repository at this point in the history
  • Loading branch information
pvdlg committed Jul 19, 2018
1 parent 1f906b4 commit 15aaf04
Showing 1 changed file with 37 additions and 31 deletions.
68 changes: 37 additions & 31 deletions test/glob-assets.test.js
@@ -1,7 +1,11 @@
import test from 'ava';
import {ensureDir} from 'fs-extra';
import {isPlainObject, sortBy} from 'lodash';
import globAssets from '../lib/glob-assets';

const cwd = 'test/fixtures/files';
const sortAssets = assets => sortBy(assets, asset => (isPlainObject(asset) ? asset.path : asset));


test('Retrieve file from single path', async t => {
const globbedAssets = await globAssets({cwd}, ['upload.txt']);
Expand All @@ -10,55 +14,56 @@ test('Retrieve file from single path', async t => {
});

test('Retrieve multiple files from path', async t => {
const globbedAssets = (await globAssets({cwd}, ['upload.txt', 'upload_other.txt'])).sort();
const globbedAssets = await globAssets({cwd}, ['upload.txt', 'upload_other.txt']);

t.deepEqual(globbedAssets, ['upload_other.txt', 'upload.txt'].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['upload_other.txt', 'upload.txt']));
});

test('Include missing files as defined, using Object definition', async t => {
const globbedAssets = (await globAssets({cwd}, ['upload.txt', {path: 'miss*.txt', label: 'Missing'}])).sort();
const globbedAssets = await globAssets({cwd}, ['upload.txt', {path: 'miss*.txt', label: 'Missing'}]);

t.deepEqual(globbedAssets, ['upload.txt', {path: 'miss*.txt', label: 'Missing'}].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['upload.txt', {path: 'miss*.txt', label: 'Missing'}]));
});

test('Retrieve multiple files from Object', async t => {
const globbedAssets = (await globAssets({cwd}, [
const globbedAssets = await globAssets({cwd}, [
{path: 'upload.txt', name: 'upload_name', label: 'Upload label'},
'upload_other.txt',
])).sort();
]);

t.deepEqual(
globbedAssets,
[{path: 'upload.txt', name: 'upload_name', label: 'Upload label'}, 'upload_other.txt'].sort()
sortAssets(globbedAssets),
sortAssets([{path: 'upload.txt', name: 'upload_name', label: 'Upload label'}, 'upload_other.txt'])
);
});

test('Retrieve multiple files without duplicates', async t => {
const globbedAssets = (await globAssets({cwd}, [
const globbedAssets = await globAssets({cwd}, [
'upload_other.txt',
'upload.txt',
'upload_other.txt',
'upload.txt',
'upload.txt',
'upload_other.txt',
])).sort();
]);

t.deepEqual(globbedAssets, ['upload_other.txt', 'upload.txt'].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['upload_other.txt', 'upload.txt']));
});

test('Favor Object over String values when removing duplicates', async t => {
const globbedAssets = (await globAssets({cwd}, [
const globbedAssets = await globAssets({cwd}, [
'upload_other.txt',
'upload.txt',
{path: 'upload.txt', name: 'upload_name'},
'upload.txt',
{path: 'upload_other.txt', name: 'upload_other_name'},
'upload.txt',
'upload_other.txt',
])).sort();
]);

t.deepEqual(
globbedAssets,
[{path: 'upload.txt', name: 'upload_name'}, {path: 'upload_other.txt', name: 'upload_other_name'}].sort()
sortAssets(globbedAssets),
sortAssets([{path: 'upload.txt', name: 'upload_name'}, {path: 'upload_other.txt', name: 'upload_other_name'}])
);
});

Expand All @@ -69,38 +74,38 @@ test('Retrieve file from single glob', async t => {
});

test('Retrieve multiple files from single glob', async t => {
const globbedAssets = (await globAssets({cwd}, ['*.txt'])).sort();
const globbedAssets = await globAssets({cwd}, ['*.txt']);

t.deepEqual(globbedAssets, ['upload_other.txt', 'upload.txt'].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['upload_other.txt', 'upload.txt']));
});

test('Accept glob array with one value', async t => {
const globbedAssets = (await globAssets({cwd}, [['*load.txt'], ['*_other.txt']])).sort();
const globbedAssets = await globAssets({cwd}, [['*load.txt'], ['*_other.txt']]);

t.deepEqual(globbedAssets, ['upload_other.txt', 'upload.txt'].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['upload_other.txt', 'upload.txt']));
});

test('Include globs that resolve to no files as defined', async t => {
const globbedAssets = (await globAssets({cwd}, [['upload.txt', '!upload.txt']])).sort();
const globbedAssets = await globAssets({cwd}, [['upload.txt', '!upload.txt']]);

t.deepEqual(globbedAssets, ['!upload.txt', 'upload.txt'].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['!upload.txt', 'upload.txt']));
});

test('Accept glob array with one value for missing files', async t => {
const globbedAssets = (await globAssets({cwd}, [['*missing.txt'], ['*_other.txt']])).sort();
const globbedAssets = await globAssets({cwd}, [['*missing.txt'], ['*_other.txt']]);

t.deepEqual(globbedAssets, ['upload_other.txt', '*missing.txt'].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['upload_other.txt', '*missing.txt']));
});

test('Replace name by filename for Object that match multiple files', async t => {
const globbedAssets = (await globAssets({cwd}, [{path: '*.txt', name: 'upload_name', label: 'Upload label'}])).sort();
const globbedAssets = await globAssets({cwd}, [{path: '*.txt', name: 'upload_name', label: 'Upload label'}]);

t.deepEqual(
globbedAssets,
[
sortAssets(globbedAssets),
sortAssets([
{path: 'upload.txt', name: 'upload.txt', label: 'Upload label'},
{path: 'upload_other.txt', name: 'upload_other.txt', label: 'Upload label'},
].sort()
])
);
});

Expand Down Expand Up @@ -129,13 +134,14 @@ test('Accept negated globs', async t => {
});

test('Expand directories', async t => {
const globbedAssets = (await globAssets({cwd}, [['.']])).sort();
const globbedAssets = await globAssets({cwd}, [['.']]);

t.deepEqual(globbedAssets, ['upload_other.txt', 'upload.txt', '.dotfile'].sort());
t.deepEqual(sortAssets(globbedAssets), sortAssets(['upload_other.txt', 'upload.txt', '.dotfile']));
});

test('Include empty directory as defined', async t => {
const globbedAssets = await globAssets({cwd}, [['test/empty']]);
await ensureDir(path.resolve(cwd, 'empty'));
const globbedAssets = await globAssets({cwd}, [['empty']]);

t.deepEqual(globbedAssets, ['test/empty']);
t.deepEqual(globbedAssets, ['empty']);
});

0 comments on commit 15aaf04

Please sign in to comment.