Skip to content

Commit

Permalink
Merge pull request #6256 from Sage/playwright_refactor_settingsrow
Browse files Browse the repository at this point in the history
test(settings-row): migrate cypress tests to playwright
  • Loading branch information
tomdavies73 authored Aug 17, 2023
2 parents 80df18d + 65aa47e commit ca9e79e
Show file tree
Hide file tree
Showing 6 changed files with 284 additions and 132 deletions.
132 changes: 0 additions & 132 deletions cypress/components/settings-row/settings-row.cy.tsx

This file was deleted.

21 changes: 21 additions & 0 deletions playwright/components/settings-row/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import type { Page } from "@playwright/test";
import {
SETTINGS_ROW_COMPONENT,
SETTINGS_ROW_CHILDREN,
SETTINGS_ROW_DESCRIPTION,
SETTINGS_ROW_TITLE,
} from "./locators";

export const settingsRowPreview = (page: Page) => {
return page.locator(SETTINGS_ROW_COMPONENT);
};
export const settingsRowChildren = (page: Page) => {
return page.locator(SETTINGS_ROW_CHILDREN);
};
export const settingsRowDescription = (page: Page) => {
return page.locator(SETTINGS_ROW_DESCRIPTION);
};

export const settingsRowTitle = (page: Page) => {
return page.locator(SETTINGS_ROW_TITLE);
};
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
export const SETTINGS_ROW_COMPONENT = 'div[data-component="settings-row"]';
export const SETTINGS_ROW_CHILDREN = `${SETTINGS_ROW_COMPONENT} > div:last-child`;
export const SETTINGS_ROW_DESCRIPTION = 'div[data-element="subtitle"]';
export const SETTINGS_ROW_TITLE = '[data-element="title"]';
21 changes: 21 additions & 0 deletions playwright/support/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,24 @@ export const expectEventWasNotCalled = async (callbackData: string[]) => {
expect(count).toBe("0");
expect(callbackData).toEqual([]);
};

/**
* Creates a safe regExp and uses the .toHaveClass() assertion
* As there is not a "contains" assertion for the .toHaveClass() assertion
* @param locatorFunc the locator you'd like to use
* @param className a className string you'd like to assert against
* @example await containsClass(exampleLocator(page), "foo");
*/
export const containsClass = async (
locatorFunc: Locator,
className: string
) => {
const escapedClassName = className.replace(
/[-[\]{}()*+?.,\\^$|#\s]/g,
"\\$&"
);

const classNameRegEx = new RegExp(escapedClassName);

await expect(locatorFunc).toHaveClass(classNameRegEx);
};
70 changes: 70 additions & 0 deletions src/components/settings-row/components.test-pw.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import React from "react";
import SettingsRow, { SettingsRowProps } from ".";
import Link from "../../components/link";

const SettingsRowDefault = (props: SettingsRowProps) => (
<SettingsRow {...props} />
);

const SettingRowWithLinkDescription = (props: SettingsRowProps) => {
const { description } = props;

return (
<SettingsRow
{...props}
description={
<Link href="https://carbon.sage.com/?path=/docs/setting-row--default-story">
{description || "foo"}
</Link>
}
>
Content for settings
</SettingsRow>
);
};

const SettingsRowWithHeadingTypes = () => (
<>
<SettingsRow
headingType="h1"
description="Description"
title="This is a h1 Title"
>
Content for settings
</SettingsRow>
<SettingsRow
headingType="h2"
description="Description"
title="This is a h2 Title"
>
Content for settings
</SettingsRow>
<SettingsRow
headingType="h3"
description="Description"
title="This is a h3 Title"
>
Content for settings
</SettingsRow>
<SettingsRow
headingType="h4"
description="Description"
title="This is a h4 Title"
>
Content for settings
</SettingsRow>
<SettingsRow
headingType="h5"
description="Description"
title="This is a h5 Title"
>
Content for settings
</SettingsRow>
</>
);

export {
SettingsRowDefault,
SettingRowWithLinkDescription,
SettingsRowWithHeadingTypes,
};
Loading

0 comments on commit ca9e79e

Please sign in to comment.