summaryrefslogtreecommitdiffstats
path: root/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts')
-rw-r--r--polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts164
1 files changed, 164 insertions, 0 deletions
diff --git a/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts
new file mode 100644
index 0000000000..392fac9132
--- /dev/null
+++ b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements_test.ts
@@ -0,0 +1,164 @@
+/**
+ * @license
+ * Copyright (C) 2021 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';
+import {fixture} from '@open-wc/testing-helpers';
+import {html} from 'lit';
+import './gr-submit-requirements';
+import {GrSubmitRequirements} from './gr-submit-requirements';
+import {
+ createAccountWithIdNameAndEmail,
+ createApproval,
+ createDetailedLabelInfo,
+ createParsedChange,
+ createSubmitRequirementExpressionInfo,
+ createSubmitRequirementResultInfo,
+ createNonApplicableSubmitRequirementResultInfo,
+} from '../../../test/test-data-generators';
+import {SubmitRequirementResultInfo} from '../../../api/rest-api';
+import {ParsedChangeInfo} from '../../../types/types';
+
+suite('gr-submit-requirements tests', () => {
+ let element: GrSubmitRequirements;
+ let change: ParsedChangeInfo;
+ setup(async () => {
+ const submitRequirement: SubmitRequirementResultInfo = {
+ ...createSubmitRequirementResultInfo(),
+ description: 'Test Description',
+ submittability_expression_result: createSubmitRequirementExpressionInfo(),
+ };
+ change = {
+ ...createParsedChange(),
+ submit_requirements: [
+ submitRequirement,
+ createNonApplicableSubmitRequirementResultInfo(),
+ ],
+ labels: {
+ Verified: {
+ ...createDetailedLabelInfo(),
+ all: [
+ {
+ ...createApproval(),
+ value: 2,
+ },
+ ],
+ },
+ },
+ };
+ const account = createAccountWithIdNameAndEmail();
+ element = await fixture<GrSubmitRequirements>(
+ html`<gr-submit-requirements
+ .change=${change}
+ .account=${account}
+ ></gr-submit-requirements>`
+ );
+ });
+
+ test('renders', () => {
+ expect(element).shadowDom.to.equal(/* HTML */ `
+ <h3 class="heading-3 metadata-title" id="submit-requirements-caption">
+ Submit Requirements
+ </h3>
+ <table aria-labelledby="submit-requirements-caption" class="requirements">
+ <thead hidden="">
+ <tr>
+ <th>Status</th>
+ <th>Name</th>
+ <th>Votes</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr id="requirement-0-Verified" role="button" tabindex="0">
+ <td>
+ <iron-icon
+ aria-label="satisfied"
+ class="check-circle-filled"
+ icon="gr-icons:check-circle-filled"
+ role="img"
+ >
+ </iron-icon>
+ </td>
+ <td class="name">
+ <gr-limited-text class="name" limit="25"></gr-limited-text>
+ </td>
+ <td>
+ <gr-endpoint-decorator
+ class="votes-cell"
+ name="submit-requirement-verified"
+ >
+ <gr-endpoint-param name="change"></gr-endpoint-param>
+ <gr-endpoint-param name="requirement"></gr-endpoint-param>
+ <gr-vote-chip></gr-vote-chip>
+ </gr-endpoint-decorator>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <gr-submit-requirement-hovercard for="requirement-0-Verified">
+ </gr-submit-requirement-hovercard>
+ `);
+ });
+
+ suite('votes-cell', () => {
+ setup(async () => {
+ element.disableEndpoints = true;
+ await element.updateComplete;
+ });
+ test('with vote', () => {
+ const votesCell = element.shadowRoot?.querySelectorAll('.votes-cell');
+ expect(votesCell?.[0]).dom.equal(/* HTML */ `
+ <div class="votes-cell">
+ <gr-vote-chip> </gr-vote-chip>
+ </div>
+ `);
+ });
+
+ test('no votes', async () => {
+ const modifiedChange = {...change};
+ modifiedChange.labels = {
+ Verified: {
+ ...createDetailedLabelInfo(),
+ },
+ };
+ element.change = modifiedChange;
+ await element.updateComplete;
+ const votesCell = element.shadowRoot?.querySelectorAll('.votes-cell');
+ expect(votesCell?.[0]).dom.equal(/* HTML */ `
+ <div class="votes-cell">No votes</div>
+ `);
+ });
+
+ test('without label to vote on', async () => {
+ const modifiedChange = {...change};
+ modifiedChange.submit_requirements![0]!.submittability_expression_result.expression =
+ 'hasfooter:"Release-Notes"';
+ element.change = modifiedChange;
+ await element.updateComplete;
+ const votesCell = element.shadowRoot?.querySelectorAll('.votes-cell');
+ expect(votesCell?.[0]).dom.equal(/* HTML */ `
+ <div class="votes-cell">Satisfied</div>
+ `);
+ });
+ });
+
+ test('calculateEndpointName()', () => {
+ assert.equal(
+ element.calculateEndpointName('code-owners~CodeOwnerSub'),
+ 'submit-requirement-codeowners'
+ );
+ });
+});