Llb/worker filter improvements (#2614)
* test: 💍 clean up worker filter component tests (#2559) * Icu 15741 add show filter generator toggle to worker filter component (#2562) * feat: 🎸 add filter generator to worker filter component ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15741 * feat: 🎸 show add worker filter when none set for targets (#2564) ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15760 * Icu 15743 tag workflow (#2565) * feat: 🎸 add tag generator workflow ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 * test: 💍 add test cases ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 * refactor: 💡 update selected type name to selectedGeneratorType ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 * Apply suggestions from code review minor translation change Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> * refactor: 💡 update id for generated-value ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743 --------- Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com> Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> * Icu 15744 name workflow (#2566) * feat: 🎸 add name workflow ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * test: 💍 add "name" workflow tests for filter generator ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * refactor: 💡 use const test selectors for filter generator ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * refactor: 💡 add default option ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 * docs: ✏️ fix comment ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744 --------- Co-authored-by: cameronperera <cameron.perera@hashicorp.com> * refactor: 💡 move worker filter generator outside of rose::form (#2574) * refactor: 💡 move worker filter generator outside of rose::form * [ICU-15718] Add worker filter route, template for empty state (#2576) * feat: 🎸 Vault Credential Store Worker Filter The Worker Filters tab will display the associated worker filter and have an empty state for when there is no worker filter assigned. * add template * Add missing copyright headers * update styling, remove Rose component * color primary is already default, remove * add rose component, remove custom css * fix test * singularize lang --------- Co-authored-by: laurenolivia <laurenolivia@users.noreply.github.com> * feat: 🎸 update worker filter field to use code editor (#2578) * feat: 🎸 update worker filter field to use code editor ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15737 * test: 💍 fix failing storage bucket tests ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15737 * test: 💍 update tests for new worker filter field (#2580) * test: 💍 update tests for new worker filter field ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15739 * Update ui/admin/tests/acceptance/storage-buckets/update-test.js Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> --------- Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> * [ICU-15719] Create edit worker filter route and template (#2582) * add codeblock to template * add cancel btn fn * add controller test * add save fn * display formatted worker filter text inside codeblock * move codeblock component outside rose::layout::centered * remove console.log * remove router.refresh() and refactor translations yaml * refactor translations, add breadcrumb::item * replace html elements with hds * move component, delete file * [ICU-15720] Add edit worker filter action to manage dropdown (#2593) * add acceptance test file * delete test file * add edit option to manage dropdown * update route in dropdown * add check for model isVault * add acceptance test file * delete test file * remove data test selectors, fix syntax * [ICU-15721] Remove worker filter input field (#2596) * remove worker filter input field from vault credential store form * revert yaml * [ICU-15838] Add vault credential store worker filter tests (#2595) * add data test elements * add subtests to update-test.js * add subtext to check for .hasText() * add subtest when worker filter exists * update subtest name * remove console.log * clean up * add new selectors * refactor: 💡 worker filter clean-up (#2592) * refactor: 💡 worker filter clean-up ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 * refactor: 💡 add aria labels & missing can save check ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 * refactor: 💡 pr feedback of using uuid ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 * Add missing copyright headers * refactor: 💡 use unique-id helper for aria labels (pr feedback) ✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816 --------- Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com> * refactor: 💡 update icon logic for egress worker filter (#2612) * refactor: 💡 update worker_filter help translation * refactor: 💡 add maxHeight to worker filter code blocks * refactor: 💡 use existing default option for dropdowns * refactor: 💡 hide copy button when no result to copy and remove unused styles --------- Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com> Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com> Co-authored-by: Lauren <lauren.burwell@hashicorp.com> Co-authored-by: laurenolivia <laurenolivia@users.noreply.github.com> Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com>
This commit is contained in:
40 files changed
+1045
-212
No files matched your search
@@ -0,0 +1,135 @@
|
||||
/**
|
||||
* Copyright (c) HashiCorp, Inc.
|
||||
* SPDX-License-Identifier: BUSL-1.1
|
||||
*/
|
||||
|
||||
import { module, test } from 'qunit';
|
||||
import { setupRenderingTest } from 'ember-qunit';
|
||||
import { render, click, fillIn, select } from '@ember/test-helpers';
|
||||
import { hbs } from 'ember-cli-htmlbars';
|
||||
import { setupIntl } from 'ember-intl/test-support';
|
||||
|
||||
module(
|
||||
'Integration | Component | worker-filter-generator/index',
|
||||
function (hooks) {
|
||||
setupRenderingTest(hooks);
|
||||
setupIntl(hooks, 'en-us');
|
||||
|
||||
const CODE_EDITOR = '[data-test-code-editor-field-editor]';
|
||||
const CODE_EDITOR_LINE =
|
||||
'[data-test-code-editor-field-editor] .CodeMirror-line';
|
||||
const FILTER_GENERATOR = '[name="filter_generator"]';
|
||||
const SHOW_FILTER_GENERATOR = '[name="show_filter_generator"]';
|
||||
const TAG_TYPE_OPTION = '[value="tag"]';
|
||||
const NAME_TYPE_OPTION = '[value="name"]';
|
||||
const TAG_KEY = '[name="tag_key"]';
|
||||
const TAG_VALUE = '[name="tag_value"]';
|
||||
const NAME_OPERATOR = '[name="name_operator"]';
|
||||
const GENERATED_VALUE = '[name="generated_value"]';
|
||||
|
||||
test('it renders correct content when egress_worker_filter is passed in', async function (assert) {
|
||||
this.model = { egress_worker_filter: 'egress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='egress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
|
||||
assert.dom(CODE_EDITOR).isVisible();
|
||||
assert.dom(CODE_EDITOR_LINE).hasText(this.model.egress_worker_filter);
|
||||
});
|
||||
|
||||
test('it renders correct content when ingress_worker_filter is passed in', async function (assert) {
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='ingress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
|
||||
assert.dom(CODE_EDITOR).isVisible();
|
||||
assert.dom(CODE_EDITOR_LINE).hasText(this.model.ingress_worker_filter);
|
||||
});
|
||||
|
||||
test('toggleFilterGenerator shows filter generator when toggled on', async function (assert) {
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='ingress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
|
||||
assert.dom(FILTER_GENERATOR).isNotVisible();
|
||||
|
||||
await click(SHOW_FILTER_GENERATOR);
|
||||
|
||||
assert.dom(FILTER_GENERATOR).isVisible();
|
||||
});
|
||||
|
||||
test('filter generator tag type shows key and value input boxes', async function (assert) {
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='ingress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
await click(SHOW_FILTER_GENERATOR);
|
||||
await click(TAG_TYPE_OPTION);
|
||||
|
||||
assert.dom(TAG_KEY).isVisible();
|
||||
assert.dom(TAG_VALUE).isVisible();
|
||||
assert.dom(NAME_OPERATOR).isNotVisible();
|
||||
});
|
||||
|
||||
test('filter generator tag type generates correctly formatted filter', async function (assert) {
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='ingress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
await click(SHOW_FILTER_GENERATOR);
|
||||
await click(TAG_TYPE_OPTION);
|
||||
await fillIn(TAG_KEY, 'key1');
|
||||
await fillIn(TAG_VALUE, 'val1');
|
||||
|
||||
assert.dom(GENERATED_VALUE).hasValue('"val1" in "/tags/key1"');
|
||||
});
|
||||
|
||||
test('filter generator name type shows operator and value fields', async function (assert) {
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='ingress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
|
||||
await click(SHOW_FILTER_GENERATOR);
|
||||
await click(NAME_TYPE_OPTION);
|
||||
|
||||
assert.dom(NAME_OPERATOR).isVisible();
|
||||
assert.dom(TAG_VALUE).isVisible();
|
||||
assert.dom(TAG_KEY).isNotVisible();
|
||||
});
|
||||
|
||||
test('filter generator name type generates correctly formatted filter', async function (assert) {
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='ingress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
|
||||
await click(SHOW_FILTER_GENERATOR);
|
||||
await click(NAME_TYPE_OPTION);
|
||||
await fillIn(TAG_VALUE, 'val1');
|
||||
await select(NAME_OPERATOR, '==');
|
||||
|
||||
assert.dom(GENERATED_VALUE).hasValue('"/name" == "val1"');
|
||||
});
|
||||
|
||||
test('generated result is cleared when switching filter types', async function (assert) {
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilterGenerator @name='ingress_worker_filter' @model={{this.model}} />`,
|
||||
);
|
||||
|
||||
await click(SHOW_FILTER_GENERATOR);
|
||||
await click(NAME_TYPE_OPTION);
|
||||
await fillIn(TAG_VALUE, 'val1');
|
||||
await select(NAME_OPERATOR, '==');
|
||||
|
||||
assert.dom(GENERATED_VALUE).hasValue('"/name" == "val1"');
|
||||
|
||||
await click(TAG_TYPE_OPTION);
|
||||
|
||||
assert.dom(GENERATED_VALUE).hasNoValue();
|
||||
});
|
||||
},
|
||||
);
|
||||
@@ -1,45 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) HashiCorp, Inc.
|
||||
* SPDX-License-Identifier: BUSL-1.1
|
||||
*/
|
||||
|
||||
import { module, test } from 'qunit';
|
||||
import { setupRenderingTest } from 'ember-qunit';
|
||||
import { render } from '@ember/test-helpers';
|
||||
import { hbs } from 'ember-cli-htmlbars';
|
||||
import { setupIntl } from 'ember-intl/test-support';
|
||||
|
||||
module('Integration | Component | worker-filter/index', function (hooks) {
|
||||
setupRenderingTest(hooks);
|
||||
setupIntl(hooks, 'en-us');
|
||||
|
||||
test('it renders correct content when egress_worker_filter is passed in', async function (assert) {
|
||||
this.onInput = () => {};
|
||||
this.submit = () => {};
|
||||
this.cancel = () => {};
|
||||
this.model = { egress_worker_filter: 'egress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilter @name='egress_worker_filter' @model={{this.model}} @onInput={{this.onInput}} @submit={{this.submit}} @cancel={{this.cancel}} />`,
|
||||
);
|
||||
|
||||
assert.dom('[data-test-code-editor-field-editor]').isVisible();
|
||||
assert
|
||||
.dom('[data-test-code-editor-field-editor] .CodeMirror-line')
|
||||
.hasText(this.model.egress_worker_filter);
|
||||
});
|
||||
|
||||
test('it renders correct content when ingress_worker_filter is passed in', async function (assert) {
|
||||
this.onInput = () => {};
|
||||
this.submit = () => {};
|
||||
this.cancel = () => {};
|
||||
this.model = { ingress_worker_filter: 'ingress filter' };
|
||||
await render(
|
||||
hbs`<WorkerFilter @name='ingress_worker_filter' @model={{this.model}} @onInput={{this.onInput}} @submit={{this.submit}} @cancel={{this.cancel}}/>`,
|
||||
);
|
||||
|
||||
assert.dom('[data-test-code-editor-field-editor]').isVisible();
|
||||
assert
|
||||
.dom('[data-test-code-editor-field-editor] .CodeMirror-line')
|
||||
.hasText(this.model.ingress_worker_filter);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user