123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- /*
- * SonarQube
- * Copyright (C) 2009-2024 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
- import userEvent from '@testing-library/user-event';
- import { byLabelText, byRole, byTestId, byText } from '../../../helpers/testSelector';
- import {
- SoftwareImpactMeasureData,
- SoftwareImpactSeverity,
- SoftwareQuality,
- } from '../../../types/clean-code-taxonomy';
-
- export const getPageObjects = () => {
- const user = userEvent.setup();
- const selectors = {
- overallCodeButton: byRole('tab', { name: /overview.overall_code/ }),
- softwareImpactMeasureCard: (softwareQuality: SoftwareQuality) =>
- byTestId(`overview__software-impact-card-${softwareQuality}`),
- softwareImpactMeasureCardRating: (softwareQuality: SoftwareQuality, rating: string) =>
- byLabelText(
- `overview.project.software_impact.has_rating.software_quality.${softwareQuality}.${rating}`,
- ),
- };
- const ui = {
- ...selectors,
- expectSoftwareImpactMeasureCard: (
- softwareQuality: SoftwareQuality,
- rating?: string,
- data?: SoftwareImpactMeasureData,
- severitiesActiveState?: boolean[],
- branch = 'master',
- failed = false,
- ) => {
- if (failed) {
- expect(
- byTestId(`overview__software-impact-card-${softwareQuality}`)
- .byText('overview.measures.failed_badge')
- .get(),
- ).toBeInTheDocument();
- }
-
- if (typeof rating === 'string') {
- expect(
- byText(rating, { exact: true }).get(ui.softwareImpactMeasureCard(softwareQuality).get()),
- ).toBeInTheDocument();
- }
- if (data) {
- const branchQuery = branch ? `&branch=${branch}` : '';
-
- expect(
- byRole('link', {
- name: `overview.measures.software_impact.see_list_of_x_open_issues.${data.total}.software_quality.${softwareQuality}`,
- }).get(),
- ).toHaveAttribute(
- 'href',
- `/project/issues?issueStatuses=OPEN%2CCONFIRMED&impactSoftwareQualities=${softwareQuality}${branchQuery}&id=foo`,
- );
- expect(
- byRole('link', {
- name: `overview.measures.software_impact.severity.see_x_open_issues.${
- data[SoftwareImpactSeverity.High]
- }.software_quality.${softwareQuality}.overview.measures.software_impact.severity.HIGH.tooltip`,
- }).get(),
- ).toHaveAttribute(
- 'href',
- `/project/issues?issueStatuses=OPEN%2CCONFIRMED&impactSoftwareQualities=${softwareQuality}&impactSeverities=${SoftwareImpactSeverity.High}${branchQuery}&id=foo`,
- );
- expect(
- byRole('link', {
- name: `overview.measures.software_impact.severity.see_x_open_issues.${
- data[SoftwareImpactSeverity.Medium]
- }.software_quality.${softwareQuality}.overview.measures.software_impact.severity.MEDIUM.tooltip`,
- }).get(),
- ).toBeInTheDocument();
- expect(
- byRole('link', {
- name: `overview.measures.software_impact.severity.see_x_open_issues.${
- data[SoftwareImpactSeverity.Low]
- }.software_quality.${softwareQuality}.overview.measures.software_impact.severity.LOW.tooltip`,
- }).get(),
- ).toBeInTheDocument();
- }
- if (severitiesActiveState) {
- ui.expectSoftwareImpactMeasureBreakdownCard(
- softwareQuality,
- SoftwareImpactSeverity.High,
- severitiesActiveState[0],
- );
- ui.expectSoftwareImpactMeasureBreakdownCard(
- softwareQuality,
- SoftwareImpactSeverity.Medium,
- severitiesActiveState[1],
- );
- ui.expectSoftwareImpactMeasureBreakdownCard(
- softwareQuality,
- SoftwareImpactSeverity.Low,
- severitiesActiveState[2],
- );
- }
- },
- expectSoftwareImpactMeasureCardToHaveOldMeasures: (
- softwareQuality: SoftwareQuality,
- rating: string,
- total: number,
- oldMetric: string,
- branch = 'master',
- ) => {
- const branchQuery = branch ? `&branch=${branch}` : '';
- expect(
- byText(rating, { exact: true }).get(ui.softwareImpactMeasureCard(softwareQuality).get()),
- ).toBeInTheDocument();
- expect(
- byRole('link', {
- name: `overview.measures.software_impact.see_list_of_x_open_issues.${total}.software_quality.${softwareQuality}`,
- }).get(),
- ).toHaveAttribute(
- 'href',
- `/project/issues?issueStatuses=OPEN%2CCONFIRMED&types=${oldMetric}${branchQuery}&id=foo`,
- );
- },
- expectSoftwareImpactMeasureBreakdownCard: (
- softwareQuality: SoftwareQuality,
- severity: SoftwareImpactSeverity,
- active: boolean,
- ) => {
- const link = byTestId(
- `overview__software-impact-${softwareQuality}-severity-${severity}`,
- ).get(ui.softwareImpactMeasureCard(softwareQuality).get());
- if (active) {
- expect(link).toHaveClass('active');
- } else {
- expect(link).not.toHaveClass('active');
- }
- },
- expectSoftwareImpactMeasureCardRatingTooltip: async (
- softwareQuality: SoftwareQuality,
- rating: string,
- text: string,
- ) => {
- await expect(
- ui.softwareImpactMeasureCardRating(softwareQuality, rating).get(),
- ).toHaveATooltipWithContent(text);
- },
- };
- return { user, ui };
- };
|