/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: BUSL-1.1
 */

import {
  ancestorKeysForKey,
  keyIsFolder,
  keyPartsForKey,
  keyWithoutParentKey,
  parentKeyForKey,
} from 'vault/utils/key-utils';
import { module, test } from 'qunit';

module('Unit | Utility | key-utils', function () {
  test('keyIsFolder', function (assert) {
    let result = keyIsFolder('foo');
    assert.false(result, 'not folder');

    result = keyIsFolder('foo/');
    assert.true(result, 'is folder');

    result = keyIsFolder('foo/bar');
    assert.false(result, 'not folder');
  });
  test('keyPartsForKey', function (assert) {
    let result = keyPartsForKey('');
    assert.strictEqual(result, null, 'falsy value returns null');

    result = keyPartsForKey('foo');
    assert.strictEqual(result, null, 'returns null if not a folder');

    result = keyPartsForKey('foo/bar');
    assert.deepEqual(result, ['foo', 'bar'], 'returns parts of key');

    result = keyPartsForKey('foo/bar/');
    assert.deepEqual(result, ['foo', 'bar'], 'returns parts of key when ends in slash');
  });
  test('parentKeyForKey', function (assert) {
    let result = parentKeyForKey('my/very/nested/secret/path');
    assert.strictEqual(result, 'my/very/nested/secret/', 'returns parent path for key');

    result = parentKeyForKey('my/nested/secret/');
    assert.strictEqual(result, 'my/nested/', 'returns correct parents');

    result = parentKeyForKey('my-secret');
    assert.strictEqual(result, '', 'returns empty string when no parents');
  });
  test('keyWithoutParentKey', function (assert) {
    let result = keyWithoutParentKey('my/very/nested/secret/path');
    assert.strictEqual(result, 'path', 'returns key without parent key');

    result = keyWithoutParentKey('my-secret');
    assert.strictEqual(result, 'my-secret', 'returns path when no parent');

    result = keyWithoutParentKey('folder/');
    assert.strictEqual(result, 'folder/', 'returns path as-is when folder without parent');
  });
  test('ancestorKeysForKey', function (assert) {
    const expected = ['my/', 'my/very/', 'my/very/nested/', 'my/very/nested/secret/'];
    let result = ancestorKeysForKey('my/very/nested/secret/path');
    assert.deepEqual(result, expected, 'returns array of ancestor paths');

    result = ancestorKeysForKey('foobar');
    assert.deepEqual(result, [], 'returns empty array for root path');
  });
});
