open-vault/ui/tests/unit/lib/kv-object-test.js
Hamid Ghaf 27bb03bbc0
adding copyright header (#19555)
* adding copyright header

* fix fmt and a test
2023-03-15 09:00:52 -07:00

108 lines
3.6 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import { module, test } from 'qunit';
import KVObject from 'vault/lib/kv-object';
module('Unit | Lib | kv object', function () {
const fromJSONTests = [
[
'types',
{ string: 'string', false: false, zero: 0, number: 1, null: null, true: true, object: { one: 'two' } },
[
{ name: 'false', value: false },
{ name: 'null', value: null },
{ name: 'number', value: 1 },
{ name: 'object', value: { one: 'two' } },
{ name: 'string', value: 'string' },
{ name: 'true', value: true },
{ name: 'zero', value: 0 },
],
],
[
'ordering',
{ b: 'b', 1: '1', z: 'z', A: 'A', a: 'a' },
[
{ name: '1', value: '1' },
{ name: 'a', value: 'a' },
{ name: 'A', value: 'A' },
{ name: 'b', value: 'b' },
{ name: 'z', value: 'z' },
],
],
];
fromJSONTests.forEach(function ([name, input, content]) {
test(`fromJSON: ${name}`, function (assert) {
const data = KVObject.create({ content: [] }).fromJSON(input);
assert.deepEqual(data.get('content'), content, 'has expected content');
});
});
test(`fromJSON: non-object input`, function (assert) {
const input = [{ foo: 'bar' }];
assert.throws(
() => {
KVObject.create({ content: [] }).fromJSON(input);
},
/Vault expects data to be formatted as an JSON object/,
'throws when non-object input is used to construct the KVObject'
);
});
fromJSONTests.forEach(function ([name, input, content]) {
test(`fromJSONString: ${name}`, function (assert) {
const inputString = JSON.stringify(input, null, 2);
const data = KVObject.create({ content: [] }).fromJSONString(inputString);
assert.deepEqual(data.get('content'), content, 'has expected content');
});
});
const toJSONTests = [
[
'types',
false,
{ string: 'string', false: false, zero: 0, number: 1, null: null, true: true, object: { one: 'two' } },
{ false: false, null: null, number: 1, object: { one: 'two' }, string: 'string', true: true, zero: 0 },
],
['include blanks = true', true, { string: 'string', '': '' }, { string: 'string', '': '' }],
['include blanks = false', false, { string: 'string', '': '' }, { string: 'string' }],
];
toJSONTests.forEach(function ([name, includeBlanks, input, output]) {
test(`toJSON: ${name}`, function (assert) {
const data = KVObject.create({ content: [] }).fromJSON(input);
const result = data.toJSON(includeBlanks);
assert.deepEqual(result, output, 'has expected output');
});
});
toJSONTests.forEach(function ([name, includeBlanks, input, output]) {
test(`toJSONString: ${name}`, function (assert) {
const expected = JSON.stringify(output, null, 2);
const data = KVObject.create({ content: [] }).fromJSON(input);
const result = data.toJSONString(includeBlanks);
assert.strictEqual(result, expected, 'has expected output string');
});
});
const isAdvancedTests = [
[
'advanced',
{ string: 'string', false: false, zero: 0, number: 1, null: null, true: true, object: { one: 'two' } },
true,
],
['string-only', { string: 'string', one: 'two' }, false],
];
isAdvancedTests.forEach(function ([name, input, expected]) {
test(`isAdvanced: ${name}`, function (assert) {
const data = KVObject.create({ content: [] }).fromJSON(input);
assert.strictEqual(data.isAdvanced(), expected, 'calculates isAdvanced correctly');
});
});
});