/** * @license * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import '../../../test/common-test-setup-karma.js'; import './gr-change-requirements.js'; import {isHidden} from '../../../test/test-utils.js'; const basicFixture = fixtureFromElement('gr-change-requirements'); suite('gr-change-metadata tests', () => { let element; setup(() => { element = basicFixture.instantiate(); }); test('requirements computed fields', () => { assert.isTrue(element._computeShowWip({work_in_progress: true})); assert.isFalse(element._computeShowWip({work_in_progress: false})); assert.equal(element._computeRequirementClass(true), 'approved'); assert.equal(element._computeRequirementClass(false), ''); assert.equal(element._computeRequirementIcon(true), 'gr-icons:check'); assert.equal(element._computeRequirementIcon(false), 'gr-icons:schedule'); }); test('label computed fields', () => { assert.equal(element._computeLabelIcon({approved: []}), 'gr-icons:check'); assert.equal(element._computeLabelIcon({rejected: []}), 'gr-icons:close'); assert.equal(element._computeLabelIcon({}), 'gr-icons:schedule'); assert.equal(element._computeLabelClass({approved: []}), 'approved'); assert.equal(element._computeLabelClass({rejected: []}), 'rejected'); assert.equal(element._computeLabelClass({}), ''); assert.equal(element._computeLabelClass({value: 0}), ''); assert.equal(element._computeLabelValue(1), '+1'); assert.equal(element._computeLabelValue(-1), '-1'); assert.equal(element._computeLabelValue(0), '0'); }); test('_computeLabels', () => { assert.equal(element._optionalLabels.length, 0); assert.equal(element._requiredLabels.length, 0); element._computeLabels({base: { test: { all: [{_account_id: 1, name: 'bojack', value: 1}], default_value: 0, values: [], value: 1, }, opt_test: { all: [{_account_id: 1, name: 'bojack', value: 1}], default_value: 0, values: [], optional: true, }, }}); assert.equal(element._optionalLabels.length, 1); assert.equal(element._requiredLabels.length, 1); assert.equal(element._optionalLabels[0].label, 'opt_test'); assert.equal(element._optionalLabels[0].icon, 'gr-icons:schedule'); assert.equal(element._optionalLabels[0].style, ''); assert.ok(element._optionalLabels[0].labelInfo); }); test('optional show/hide', () => { element._optionalLabels = [{label: 'test'}]; flush(); assert.ok(element.shadowRoot .querySelector('section.optional')); MockInteractions.tap(element.shadowRoot .querySelector('.showHide')); flush(); assert.isFalse(element._showOptionalLabels); assert.isTrue(isHidden(element.shadowRoot .querySelector('section.optional'))); }); test('properly converts satisfied labels', () => { element.change = { status: 'NEW', labels: { Verified: { approved: [], }, }, requirements: [], }; flush(); assert.ok(element.shadowRoot .querySelector('.approved')); assert.ok(element.shadowRoot .querySelector('.name')); assert.equal(element.shadowRoot .querySelector('.name').text, 'Verified'); }); test('properly converts unsatisfied labels', () => { element.change = { status: 'NEW', labels: { Verified: { approved: false, }, }, }; flush(); const name = element.shadowRoot .querySelector('.name'); assert.ok(name); assert.isFalse(name.hasAttribute('hidden')); assert.equal(name.text, 'Verified'); }); test('properly displays Work In Progress', () => { element.change = { status: 'NEW', labels: {}, requirements: [], work_in_progress: true, }; flush(); const changeIsWip = element.shadowRoot .querySelector('.title'); assert.ok(changeIsWip); }); test('properly displays a satisfied requirement', () => { element.change = { status: 'NEW', labels: {}, requirements: [{ fallback_text: 'Resolve all comments', status: 'OK', }], }; flush(); const requirement = element.shadowRoot .querySelector('.requirement'); assert.ok(requirement); assert.isFalse(requirement.hasAttribute('hidden')); assert.ok(requirement.querySelector('.approved')); assert.equal(requirement.querySelector('.name').text, 'Resolve all comments'); }); test('satisfied class is applied with OK', () => { element.change = { status: 'NEW', labels: {}, requirements: [{ fallback_text: 'Resolve all comments', status: 'OK', }], }; flush(); const requirement = element.shadowRoot .querySelector('.requirement'); assert.ok(requirement); assert.ok(requirement.querySelector('.approved')); }); test('satisfied class is not applied with NOT_READY', () => { element.change = { status: 'NEW', labels: {}, requirements: [{ fallback_text: 'Resolve all comments', status: 'NOT_READY', }], }; flush(); const requirement = element.shadowRoot .querySelector('.requirement'); assert.ok(requirement); assert.strictEqual(requirement.querySelector('.approved'), null); }); test('satisfied class is not applied with RULE_ERROR', () => { element.change = { status: 'NEW', labels: {}, requirements: [{ fallback_text: 'Resolve all comments', status: 'RULE_ERROR', }], }; flush(); const requirement = element.shadowRoot .querySelector('.requirement'); assert.ok(requirement); assert.strictEqual(requirement.querySelector('.approved'), null); }); });