Skip to content

Commit 777b2f7

Browse files
authored
Merge pull request #1651 from SalesforceCommerceCloud/v3/template-retail-react-app
Merge V3 `@salesforce/retail-react-app` Features/Changes
2 parents b79d8d1 + 8b83905 commit 777b2f7

File tree

111 files changed

+21760
-7640
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

111 files changed

+21760
-7640
lines changed

.github/workflows/e2e.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ jobs:
117117
run: npx playwright install --with-deps
118118

119119
- name: Run Playwright tests
120-
run: npx playwright test
120+
run: npm run test:e2e
121121
notify-slack-pwa-no-ext:
122122
needs: [run-generator-retail-app-no-ext]
123123
if: ${{ always() }}
@@ -214,7 +214,7 @@ jobs:
214214
run: npx playwright install --with-deps
215215

216216
- name: Run Playwright tests
217-
run: npx playwright test
217+
run: npm run test:e2e
218218

219219
notify-slack-pwa-ext:
220220
needs: [run-generator-retail-app-ext]
@@ -307,7 +307,7 @@ jobs:
307307
run: npx playwright install --with-deps
308308

309309
- name: Run Playwright tests
310-
run: npx playwright test
310+
run: npm run test:e2e
311311

312312
notify-slack-pwa-private-client:
313313
needs: [run-generator-private-client]
@@ -336,4 +336,4 @@ jobs:
336336
"message": "❌ One or more PWA Kit Private Client E2E tests failed! (${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})"
337337
}
338338
env:
339-
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
339+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

e2e/tests/desktop/guest-shopper.spec.js

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,62 @@ const {
1515
const GUEST_USER_CREDENTIALS = generateUserCredentials();
1616

1717
test("Guest shopper can checkout items as guest", async ({ page }) => {
18+
// home page
1819
await page.goto(config.RETAIL_APP_HOME);
1920

2021
await page.getByRole("link", { name: "Womens" }).hover();
22+
const topsNav = await page.getByRole("link", { name: "Tops", exact: true });
23+
await expect(topsNav).toBeVisible();
2124

22-
await page.getByRole("link", { name: "Tops" }).click();
25+
await topsNav.click();
26+
// PLP
27+
const cableKnitShell = await page.getByRole("link", {
28+
name: /Cable Knit Shell/i,
29+
});
30+
// selecting swatch
31+
const initialImgEl = await cableKnitShell.locator("img");
32+
const initialSrc = await initialImgEl.getAttribute("src");
2333

24-
await expect(page.getByRole("heading", { name: "Tops" })).toBeVisible();
34+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
2535

26-
await page.getByRole("link", { name: /Stripe Shell/i }).click();
36+
await cableKnitShell.getByLabel(/Ivory/, { exact: true }).hover();
37+
const changedImgEl = await cableKnitShell.locator("img");
38+
const changeImgSrc = await changedImgEl.getAttribute("src");
39+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
2740

41+
expect(changeImgSrc).not.toBe(initialSrc);
42+
await cableKnitShell.click();
43+
// PDP
2844
await expect(
29-
page.getByRole("heading", { name: /Stripe Shell/i })
45+
page.getByRole("heading", { name: /Cable Knit Shell/i })
3046
).toBeVisible();
31-
3247
await page.getByRole("radio", { name: "L", exact: true }).click();
3348

3449
await page.locator("button[data-testid='quantity-increment']").click();
3550

36-
// Selected Size and Color texts are broken into multiple elements on the page.
37-
// So we need to look at the page URL to verify selected variants
51+
// // Selected Size and Color texts are broken into multiple elements on the page.
52+
// // So we need to look at the page URL to verify selected variants
3853
const updatedPageURL = await page.url();
3954
const params = updatedPageURL.split("?")[1];
4055
expect(params).toMatch(/size=9LG/i);
41-
expect(params).toMatch(/color=JJ5YPA7/i);
42-
56+
expect(params).toMatch(/color=JJ5AAXX/i);
4357
await page.getByRole("button", { name: /Add to Cart/i }).click();
4458

4559
const addedToCartModal = page.getByText(/2 items added to cart/i);
4660

4761
await addedToCartModal.waitFor();
4862

4963
await page.getByLabel("Close").click();
50-
64+
// cart
5165
await page.getByLabel(/My cart/i).click();
5266

53-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
67+
await expect(
68+
page.getByRole("link", { name: /Cable Knit Shell/i })
69+
).toBeVisible();
5470

5571
await page.getByRole("link", { name: "Proceed to Checkout" }).click();
5672

73+
// checkout
5774
await expect(
5875
page.getByRole("heading", { name: /Contact Info/i })
5976
).toBeVisible();
@@ -123,6 +140,7 @@ test("Guest shopper can checkout items as guest", async ({ page }) => {
123140
.first()
124141
.click();
125142

143+
// order confirmation
126144
const orderConfirmationHeading = page.getByRole("heading", {
127145
name: /Thank you for your order!/i,
128146
});
@@ -132,5 +150,7 @@ test("Guest shopper can checkout items as guest", async ({ page }) => {
132150
page.getByRole("heading", { name: /Order Summary/i })
133151
).toBeVisible();
134152
await expect(page.getByText(/2 Items/i)).toBeVisible();
135-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
153+
await expect(
154+
page.getByRole("link", { name: /Cable Knit Shell/i })
155+
).toBeVisible();
136156
});

e2e/tests/desktop/registered-shopper.spec.js

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,31 @@ test("Registered shopper can checkout items", async ({ page }) => {
4949
await page.goto(config.RETAIL_APP_HOME);
5050

5151
await page.getByRole("link", { name: "Womens" }).hover();
52+
const topsNav = await page.getByRole("link", { name: "Tops", exact: true });
53+
await expect(topsNav).toBeVisible();
5254

53-
await page.getByRole("link", { name: "Tops" }).click();
54-
55-
await expect(page.getByRole("heading", { name: "Tops" })).toBeVisible();
56-
57-
await page.getByRole("link", { name: /Stripe Shell/i }).click();
55+
await topsNav.click();
5856

57+
// PLP
58+
const cableKnitShell = await page.getByRole("link", {
59+
name: /Cable Knit Shell/i,
60+
});
61+
// selecting swatch
62+
const initialImgEl = await cableKnitShell.locator("img");
63+
const initialSrc = await initialImgEl.getAttribute("src");
64+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
65+
66+
await cableKnitShell.getByLabel(/Ivory/, { exact: true }).hover();
67+
const changedImgEl = await cableKnitShell.locator("img");
68+
const changeImgSrc = await changedImgEl.getAttribute("src");
69+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
70+
expect(changeImgSrc).not.toBe(initialSrc);
71+
await cableKnitShell.click();
72+
73+
// PDP
5974
await expect(
60-
page.getByRole("heading", { name: /Stripe Shell/i })
75+
page.getByRole("heading", { name: /Cable Knit Shell/i })
6176
).toBeVisible();
62-
6377
await page.getByRole("radio", { name: "L", exact: true }).click();
6478

6579
await page.locator("button[data-testid='quantity-increment']").click();
@@ -69,7 +83,7 @@ test("Registered shopper can checkout items", async ({ page }) => {
6983
const updatedPageURL = await page.url();
7084
const params = updatedPageURL.split("?")[1];
7185
expect(params).toMatch(/size=9LG/i);
72-
expect(params).toMatch(/color=JJ5YPA7/i);
86+
expect(params).toMatch(/color=JJ5AAXX/i);
7387

7488
await page.getByRole("button", { name: /Add to Cart/i }).click();
7589

@@ -81,7 +95,9 @@ test("Registered shopper can checkout items", async ({ page }) => {
8195

8296
await page.getByLabel(/My cart/i).click();
8397

84-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
98+
await expect(
99+
page.getByRole("link", { name: /Cable Knit Shell/i })
100+
).toBeVisible();
85101

86102
await page.getByRole("link", { name: "Proceed to Checkout" }).click();
87103

@@ -172,5 +188,7 @@ test("Registered shopper can checkout items", async ({ page }) => {
172188
page.getByRole("heading", { name: /Order Summary/i })
173189
).toBeVisible();
174190
await expect(page.getByText(/2 Items/i)).toBeVisible();
175-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
191+
await expect(
192+
page.getByRole("link", { name: /Cable Knit Shell/i })
193+
).toBeVisible();
176194
});

e2e/tests/mobile/guest-shopper.spec.js

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const {
1515
const GUEST_USER_CREDENTIALS = generateUserCredentials();
1616

1717
test("Guest shopper can checkout items as guest", async ({ page }) => {
18+
// Home page
1819
await page.goto(config.RETAIL_APP_HOME);
1920

2021
await page.getByLabel("Menu", { exact: true }).click();
@@ -37,12 +38,26 @@ test("Guest shopper can checkout items as guest", async ({ page }) => {
3738

3839
await expect(page.getByRole("heading", { name: "Tops" })).toBeVisible();
3940

40-
await page.getByRole("link", { name: /Stripe Shell/i }).click();
41-
41+
// PLP
42+
const cableKnitShell = await page.getByRole("link", {
43+
name: /Cable Knit Shell/i,
44+
});
45+
// selecting swatch
46+
const initialImgEl = await cableKnitShell.locator("img");
47+
const initialSrc = await initialImgEl.getAttribute("src");
48+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
49+
50+
await cableKnitShell.getByLabel(/Ivory/, { exact: true }).click();
51+
const changedImgEl = await cableKnitShell.locator("img");
52+
const changeImgSrc = await changedImgEl.getAttribute("src");
53+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
54+
expect(changeImgSrc).not.toBe(initialSrc);
55+
await cableKnitShell.click();
56+
57+
// PDP
4258
await expect(
43-
page.getByRole("heading", { name: /Stripe Shell/i })
59+
page.getByRole("heading", { name: /Cable Knit Shell/i })
4460
).toBeVisible();
45-
4661
await page.getByRole("radio", { name: "L", exact: true }).click();
4762

4863
await page.locator("button[data-testid='quantity-increment']").click();
@@ -52,7 +67,7 @@ test("Guest shopper can checkout items as guest", async ({ page }) => {
5267
const updatedPageURL = await page.url();
5368
const params = updatedPageURL.split("?")[1];
5469
expect(params).toMatch(/size=9LG/i);
55-
expect(params).toMatch(/color=JJ5YPA7/i);
70+
expect(params).toMatch(/color=JJ5AAXX/i);
5671

5772
await page.getByRole("button", { name: /Add to Cart/i }).click();
5873

@@ -62,12 +77,16 @@ test("Guest shopper can checkout items as guest", async ({ page }) => {
6277

6378
await page.getByLabel("Close").click();
6479

80+
// Cart
6581
await page.getByLabel(/My cart/i).click();
6682

67-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
83+
await expect(
84+
page.getByRole("link", { name: /Cable Knit Shell/i })
85+
).toBeVisible();
6886

6987
await page.getByRole("link", { name: "Proceed to Checkout" }).click();
7088

89+
// Check out
7190
await expect(
7291
page.getByRole("heading", { name: /Contact Info/i })
7392
).toBeVisible();
@@ -141,6 +160,7 @@ test("Guest shopper can checkout items as guest", async ({ page }) => {
141160
.first()
142161
.click();
143162

163+
// Order confirmation
144164
const orderConfirmationHeading = page.getByRole("heading", {
145165
name: /Thank you for your order!/i,
146166
});
@@ -150,5 +170,7 @@ test("Guest shopper can checkout items as guest", async ({ page }) => {
150170
page.getByRole("heading", { name: /Order Summary/i })
151171
).toBeVisible();
152172
await expect(page.getByText(/2 Items/i)).toBeVisible();
153-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
173+
await expect(
174+
page.getByRole("link", { name: /Cable Knit Shell/i })
175+
).toBeVisible();
154176
});

e2e/tests/mobile/registered-shopper.spec.js

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,27 @@ test("Registered shopper can checkout items", async ({ page }) => {
6363
await page.getByRole("link", { name: "Tops" }).click();
6464

6565
await expect(page.getByRole("heading", { name: "Tops" })).toBeVisible();
66+
// PLP
67+
const cableKnitShell = await page.getByRole("link", {
68+
name: /Cable Knit Shell/i,
69+
});
70+
// selecting swatch
71+
const initialImgEl = await cableKnitShell.locator("img");
72+
const initialSrc = await initialImgEl.getAttribute("src");
73+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
74+
75+
await cableKnitShell.getByLabel(/Ivory/, { exact: true }).click();
76+
const changedImgEl = await cableKnitShell.locator("img");
77+
const changeImgSrc = await changedImgEl.getAttribute("src");
6678

67-
await page.getByRole("link", { name: /Stripe Shell/i }).click();
79+
await expect(cableKnitShell.getByText(/From £44\.16/i)).toBeVisible();
6880

81+
expect(changeImgSrc).not.toBe(initialSrc);
82+
await cableKnitShell.click();
83+
// PDP
6984
await expect(
70-
page.getByRole("heading", { name: /Stripe Shell/i })
85+
page.getByRole("heading", { name: /Cable Knit Shell/i })
7186
).toBeVisible();
72-
7387
await page.getByRole("radio", { name: "L", exact: true }).click();
7488

7589
await page.locator("button[data-testid='quantity-increment']").click();
@@ -79,7 +93,7 @@ test("Registered shopper can checkout items", async ({ page }) => {
7993
const updatedPageURL = await page.url();
8094
const params = updatedPageURL.split("?")[1];
8195
expect(params).toMatch(/size=9LG/i);
82-
expect(params).toMatch(/color=JJ5YPA7/i);
96+
expect(params).toMatch(/color=JJ5AAXX/i);
8397

8498
await page.getByRole("button", { name: /Add to Cart/i }).click();
8599

@@ -89,9 +103,12 @@ test("Registered shopper can checkout items", async ({ page }) => {
89103

90104
await page.getByLabel("Close").click();
91105

106+
// cart
92107
await page.getByLabel(/My cart/i).click();
93108

94-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
109+
await expect(
110+
page.getByRole("link", { name: /Cable Knit Shell/i })
111+
).toBeVisible();
95112

96113
await page.getByRole("link", { name: "Proceed to Checkout" }).click();
97114

@@ -181,5 +198,7 @@ test("Registered shopper can checkout items", async ({ page }) => {
181198
page.getByRole("heading", { name: /Order Summary/i })
182199
).toBeVisible();
183200
await expect(page.getByText(/2 Items/i)).toBeVisible();
184-
await expect(page.getByRole("link", { name: /Stripe Shell/i })).toBeVisible();
201+
await expect(
202+
page.getByRole("link", { name: /Cable Knit Shell/i })
203+
).toBeVisible();
185204
});

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "3.6.0-dev",
2+
"version": "3.6.0-dev.1",
33
"packages": [
44
"packages/*"
55
]

0 commit comments

Comments
 (0)