open-nomad/ui/tests/unit/utils/path-tree-test.js
2023-04-10 15:36:59 +00:00

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'
);
});
});