consul/ui/packages/consul-ui/tests/unit/search/predicates/service-test.js

104 lines
2.1 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import { module, test } from 'qunit';
import ExactSearch from 'consul-ui/utils/search/exact';
import predicates from 'consul-ui/search/predicates/service';
module('Unit | Search | Predicate | service', function () {
test('items are found by properties', function (assert) {
const actual = new ExactSearch(
[
{
Name: 'name-HIT',
Tags: [],
},
{
Name: 'name',
Tags: ['tag', 'tag-withHiT'],
},
],
{
finders: predicates,
}
).search('hit');
assert.equal(actual.length, 2);
});
test('items are not found', function (assert) {
const actual = new ExactSearch(
[
{
Name: 'name',
},
{
Name: 'name',
Tags: ['one', 'two'],
},
],
{
finders: predicates,
}
).search('hit');
assert.equal(actual.length, 0);
});
test('tags can be empty', function (assert) {
const actual = new ExactSearch(
[
{
Name: 'name',
},
{
Name: 'name',
Tags: null,
},
{
Name: 'name',
Tags: [],
},
],
{
finders: predicates,
}
).search('hit');
assert.equal(actual.length, 0);
});
test('items can be found by Partition', function (assert) {
const search = new ExactSearch(
[
{
Name: 'name-a',
Partition: 'default',
},
{
Name: 'name-b',
Partition: 'lorem-ipsum',
},
],
{
finders: predicates,
}
);
assert.deepEqual(
search.search('').map((i) => i.Name),
['name-a', 'name-b'],
'both items included in search'
);
assert.deepEqual(
search.search('def').map((i) => i.Name),
['name-a'],
'only item from default partition is included'
);
assert.deepEqual(
search.search('tomster').map((i) => i.Name),
[],
'no item included when no Partition matches'
);
});
});