83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
*/
|
|
|
|
import pathTree from 'nomad-ui/utils/path-tree';
|
|
import { module, test } from 'qunit';
|
|
|
|
const PATHSTRINGS = [
|
|
{ path: '/foo/bar/baz' },
|
|
{ path: '/foo/bar/bay' },
|
|
{ path: '/foo/bar/bax' },
|
|
{ path: '/a/b' },
|
|
{ path: '/a/b/c' },
|
|
{ path: '/a/b/canary' },
|
|
{ path: '/a/b/canine' },
|
|
{ path: '/a/b/chipmunk' },
|
|
{ path: '/a/b/c/d' },
|
|
{ path: '/a/b/c/dalmation/index' },
|
|
{ path: '/a/b/c/doberman/index' },
|
|
{ path: '/a/b/c/dachshund/index' },
|
|
{ path: '/a/b/c/dachshund/poppy' },
|
|
];
|
|
|
|
module('Unit | Utility | path-tree', function () {
|
|
test('it converts path strings to a Variable Path Object ', function (assert) {
|
|
const tree = new pathTree(PATHSTRINGS);
|
|
assert.ok(
|
|
'root' in tree.paths,
|
|
'Tree has a paths object that begins with a root'
|
|
);
|
|
assert.ok('children' in tree.paths.root, 'Root has children');
|
|
assert.equal(
|
|
Object.keys(tree.paths.root.children).length,
|
|
2,
|
|
'Root has 2 children (a[...] and foo[...])'
|
|
);
|
|
});
|
|
|
|
test('it allows for node-based search and traversal', function (assert) {
|
|
const tree = new pathTree(PATHSTRINGS);
|
|
assert.deepEqual(
|
|
tree.paths.root,
|
|
tree.findPath(''),
|
|
'Returns tree root on default findPath'
|
|
);
|
|
assert.ok(
|
|
tree.findPath('foo'),
|
|
'Path found at the first part of a concatenated folder'
|
|
);
|
|
assert.ok(
|
|
tree.findPath('foo/bar'),
|
|
'Finds a path at the concatenated folder path'
|
|
);
|
|
assert.ok(
|
|
tree.findPath('a/b'),
|
|
'Finds a path at the concatenated folder path with multiple subdirectories'
|
|
);
|
|
|
|
assert.equal(
|
|
Object.keys(tree.findPath('a/b/c').children).length,
|
|
3,
|
|
'Multiple subdirectories are listed at a found compacted path with many child paths'
|
|
);
|
|
|
|
assert.equal(
|
|
Object.keys(tree.findPath('a/b').files).length,
|
|
4,
|
|
'Multiple files are listed at a found non-terminal compacted path with many variables'
|
|
);
|
|
assert.equal(
|
|
Object.keys(tree.findPath('a/b/c/doberman').files).length,
|
|
1,
|
|
'One file listed at a found compacted path with a single variable'
|
|
);
|
|
assert.equal(
|
|
Object.keys(tree.findPath('a/b/c/dachshund').files).length,
|
|
2,
|
|
'Multiple files listed at a found terminal compacted path with many variables'
|
|
);
|
|
});
|
|
});
|