consul/ui/packages/consul-ui/tests/unit/utils/create-fingerprinter-test.js

66 lines
2.2 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import createFingerprinter from 'consul-ui/utils/create-fingerprinter';
import { module, test } from 'qunit';
module('Unit | Utility | create fingerprinter', function () {
test("fingerprint returns a 'unique' fingerprinted object based on primary, slug and foreign keys", function (assert) {
const obj = {
ID: 'slug',
Namespace: 'namespace',
};
const expected = {
Datacenter: 'dc',
Namespace: 'namespace',
Partition: 'partition',
ID: 'slug',
uid: '["partition","namespace","dc","slug"]',
};
const fingerprint = createFingerprinter('Datacenter', 'Namespace', 'Partition');
const actual = fingerprint('uid', 'ID', 'dc', 'namespace', 'partition')(obj);
assert.deepEqual(actual, expected);
});
test("fingerprint returns a 'unique' fingerprinted object based on primary, slug and foreign keys, and uses default namespace if none set", function (assert) {
const obj = {
ID: 'slug',
};
const expected = {
Datacenter: 'dc',
Namespace: 'default',
Partition: 'default',
ID: 'slug',
uid: '["default","default","dc","slug"]',
};
const fingerprint = createFingerprinter('Datacenter', 'Namespace', 'Partition');
const actual = fingerprint('uid', 'ID', 'dc', 'default', 'default')(obj);
assert.deepEqual(actual, expected);
});
test("fingerprint throws an error if it can't find a foreignKey", function (assert) {
assert.expect(2);
const fingerprint = createFingerprinter('Datacenter', 'Namespace', 'Partition');
[undefined, null].forEach(function (item) {
assert.throws(function () {
fingerprint('uid', 'ID', item)({ Datacenter: item });
}, /missing foreignKey/);
});
});
test("fingerprint throws an error if it can't find a slug", function (assert) {
assert.expect(2);
const fingerprint = createFingerprinter('Datacenter', 'Namespace', 'Partition');
[
{},
{
ID: null,
},
].forEach(function (item) {
assert.throws(function () {
fingerprint('uid', 'ID', 'dc')(item);
}, /missing slug/);
});
});
});