blob: 1691b88108d6b73059e2a30437941b3b6608b9ab [file] [log] [blame]
/**
* @license
* Copyright 2018 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import * as sinon from 'sinon';
import '../../../test/common-test-setup';
import './gr-repo-plugin-config';
import {GrRepoPluginConfig} from './gr-repo-plugin-config';
import {PluginParameterToConfigParameterInfoMap} from '../../../types/common';
import {ConfigParameterInfoType} from '../../../constants/constants';
import {queryAndAssert} from '../../../test/test-utils';
import {GrPluginConfigArrayEditor} from '../gr-plugin-config-array-editor/gr-plugin-config-array-editor';
import {PaperToggleButtonElement} from '@polymer/paper-toggle-button/paper-toggle-button';
import {fixture, html, assert} from '@open-wc/testing';
suite('gr-repo-plugin-config tests', () => {
let element: GrRepoPluginConfig;
setup(async () => {
element = await fixture(
html`<gr-repo-plugin-config></gr-repo-plugin-config>`
);
});
test('render', async () => {
element.pluginData = {
name: 'testName',
config: {
plugin: {type: 'STRING' as ConfigParameterInfoType, value: 'test'},
},
};
await element.updateComplete;
assert.shadowDom.equal(
element,
/* HTML */ `
<div class="gr-form-styles">
<fieldset>
<h4>testName</h4>
<section class="STRING section">
<span class="title">
<span> </span>
</span>
<span class="value">
<iron-input data-option-key="plugin">
<input data-option-key="plugin" disabled="" is="iron-input" />
</iron-input>
</span>
</section>
</fieldset>
</div>
`
);
});
test('_computePluginConfigOptions', () => {
assert.deepEqual(
element._computePluginConfigOptions({
name: 'testInfo',
config: {
testKey: {display_name: 'testInfo plugin', type: 'STRING'},
} as PluginParameterToConfigParameterInfoMap,
}),
[
{
_key: 'testKey',
info: {
display_name: 'testInfo plugin',
type: 'STRING' as ConfigParameterInfoType,
},
},
]
);
});
test('_handleChange', () => {
const eventStub = sinon.stub(element, 'dispatchEvent');
element.pluginData = {
name: 'testName',
config: {
plugin: {type: 'STRING' as ConfigParameterInfoType, value: 'test'},
},
};
element._handleChange({
_key: 'plugin',
info: {type: 'STRING' as ConfigParameterInfoType, value: 'newTest'},
});
assert.isTrue(eventStub.called);
const {detail} = eventStub.lastCall.args[0] as CustomEvent;
assert.equal(detail.name, 'testName');
assert.deepEqual(detail.config, {
plugin: {type: 'STRING' as ConfigParameterInfoType, value: 'newTest'},
});
});
suite('option types', () => {
let changeStub: sinon.SinonStub;
let buildStub: sinon.SinonStub;
setup(() => {
changeStub = sinon.stub(element, '_handleChange');
buildStub = sinon.stub(element, '_buildConfigChangeInfo');
});
test('ARRAY type option', async () => {
element.pluginData = {
name: 'testName',
config: {
plugin: {
value: 'test',
type: 'ARRAY' as ConfigParameterInfoType,
editable: true,
},
},
};
await element.updateComplete;
const editor = queryAndAssert<GrPluginConfigArrayEditor>(
element,
'gr-plugin-config-array-editor'
);
assert.ok(editor);
element._handleArrayChange({detail: 'test'} as CustomEvent);
assert.isTrue(changeStub.called);
assert.equal(changeStub.lastCall.args[0], 'test');
});
test('BOOLEAN type option', async () => {
element.pluginData = {
name: 'testName',
config: {
plugin: {
value: 'true',
type: 'BOOLEAN' as ConfigParameterInfoType,
editable: true,
},
},
};
await element.updateComplete;
const toggle = queryAndAssert<PaperToggleButtonElement>(
element,
'paper-toggle-button'
);
assert.ok(toggle);
toggle.click();
await element.updateComplete;
assert.isTrue(buildStub.called);
assert.deepEqual(buildStub.lastCall.args, ['false', 'plugin']);
assert.isTrue(changeStub.called);
});
test('INT/LONG/STRING type option', async () => {
element.pluginData = {
name: 'testName',
config: {
plugin: {
value: 'test',
type: 'STRING' as ConfigParameterInfoType,
editable: true,
},
},
};
await element.updateComplete;
const input = queryAndAssert<HTMLInputElement>(element, 'input');
assert.ok(input);
input.value = 'newTest';
input.dispatchEvent(new Event('input'));
await element.updateComplete;
assert.isTrue(buildStub.called);
assert.deepEqual(buildStub.lastCall.args, ['newTest', 'plugin']);
assert.isTrue(changeStub.called);
});
test('LIST type option', async () => {
const permitted_values = ['test', 'newTest'];
element.pluginData = {
name: 'testName',
config: {
plugin: {
value: 'test',
type: 'LIST' as ConfigParameterInfoType,
editable: true,
permitted_values,
},
},
};
await element.updateComplete;
const select = queryAndAssert<HTMLSelectElement>(element, 'select');
assert.ok(select);
select.value = 'newTest';
select.dispatchEvent(
new Event('change', {bubbles: true, composed: true})
);
await element.updateComplete;
assert.isTrue(buildStub.called);
assert.deepEqual(buildStub.lastCall.args, ['newTest', 'plugin']);
assert.isTrue(changeStub.called);
});
});
test('_buildConfigChangeInfo', () => {
element.pluginData = {
name: 'testName',
config: {
plugin: {type: 'STRING' as ConfigParameterInfoType, value: 'test'},
},
};
const detail = element._buildConfigChangeInfo('newTest', 'plugin');
assert.equal(detail._key, 'plugin');
assert.deepEqual(detail.info, {
type: 'STRING' as ConfigParameterInfoType,
value: 'newTest',
});
});
});