@salesforcedevs/sfdocs-e2e 1.0.0-alpha.20 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/sfdocs-e2e",
3
- "version": "1.0.0-alpha.20",
3
+ "version": "1.0.0",
4
4
  "description": "E2E test suite for SFDocs static portal pages (SSG)",
5
5
  "license": "ISC",
6
6
  "bin": {
@@ -17,8 +17,10 @@
17
17
  "test:e2e:portal": "TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=./tsconfig.json wdio portal-wdio.conf.js",
18
18
  "test:e2e:static:portal": "TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=./tsconfig.json wdio static-portal-wdio.conf.js",
19
19
  "test:scope-search": "TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT=./tsconfig.json wdio search-wdio.conf.js",
20
- "release:alpha:e2e": "f() { bash bin/publish.sh $1 --tag alpha; }; f",
21
- "release:e2e": "f() { bash bin/publish.sh $1; }; f"
20
+ "prepublish:e2e": "node -e \"const p=require('./package.json'); delete p.private; require('fs').writeFileSync('./package.json', JSON.stringify(p, null, 2)+'\\n')\"",
21
+ "postpublish:e2e": "node -e \"const p=require('./package.json'); p.private=true; require('fs').writeFileSync('./package.json', JSON.stringify(p, null, 2)+'\\n')\"",
22
+ "release:alpha:e2e": "f() { yarn prepublish:e2e && yarn publish --tag alpha --new-version $1; yarn postpublish:e2e; }; f",
23
+ "release:e2e": "f() { yarn prepublish:e2e && yarn publish --new-version $1; yarn postpublish:e2e; }; f"
22
24
  },
23
25
  "dependencies": {
24
26
  "@sa11y/wdio": "^7.0.0",
@@ -13,7 +13,7 @@ describe('Homepage', () => {
13
13
  it('should show the expected number of projects', async () => {
14
14
  const projectCards = await HomePage.projectCards;
15
15
 
16
- expect(projectCards.length).toEqual(18);
16
+ expect(projectCards.length).toEqual(17);
17
17
  });
18
18
 
19
19
  // it('is accessible', () => {
@@ -44,15 +44,15 @@ export default class Page {
44
44
  );
45
45
  }
46
46
 
47
- async getHeader(headerTag = 'dx-global-header'): Promise<WebdriverIO.Element> {
48
- return await $(headerTag);
47
+ async getHeader(): Promise<WebdriverIO.Element> {
48
+ return await $('hgf-c360contextnav');
49
49
  }
50
50
 
51
51
  async getHeaderTitle(): Promise<WebdriverIO.Element> {
52
52
  return (await $('>>>header')).$('h4');
53
53
  }
54
54
 
55
- async getGlobalSearchBox(headerTag = 'dx-global-header'): Promise<WebdriverIO.Element> {
55
+ async getGlobalSearchBox(headerTag = 'dx-header'): Promise<WebdriverIO.Element> {
56
56
  return (await $(headerTag)).shadow$('dx-header-search');
57
57
  }
58
58
 
@@ -11,7 +11,7 @@ describe('Guides layout> ', () => {
11
11
  await page.waitPageLoad();
12
12
  });
13
13
 
14
- layoutTest(page);
14
+ layoutTest(page, 'doc-header');
15
15
 
16
16
  it('should have Guides tab as active', async () => {
17
17
  const selectedHeaderNavItem = await page.getActiveNavTab();
@@ -7,7 +7,7 @@ import Page from '../pageobjects/page';
7
7
  * @param givenPage : This is the current page for which we need to test chrome.
8
8
  */
9
9
 
10
- export default function layoutTest(givenPage: Page, headerTag = 'dx-global-header') {
10
+ export default function layoutTest(givenPage: Page, headerTag = 'dx-header') {
11
11
  let page: Page;
12
12
  describe('Basic layout testing > ', () => {
13
13
  beforeEach(async () => {
@@ -15,7 +15,7 @@ export default function layoutTest(givenPage: Page, headerTag = 'dx-global-heade
15
15
  });
16
16
 
17
17
  it('should display header', async () => {
18
- const header = await $(headerTag);
18
+ const header = await $('hgf-c360contextnav');
19
19
  await header.waitForDisplayed();
20
20
  expect(await header.isDisplayed()).toBeTruthy();
21
21
  expect(await header.getText()).toContain('Developers');
@@ -11,7 +11,7 @@ describe('/docs/api overview page > ', () => {
11
11
  (await $('dx-section')).waitForDisplayed();
12
12
  });
13
13
 
14
- layoutTest(page);
14
+ layoutTest(page, 'doc-header');
15
15
 
16
16
  it('should show Overview, Guides and Reference tabs and have Overview as active', async () => {
17
17
  const overviewPageSection = await $('>>>.content-type-overview');
@@ -11,7 +11,7 @@ describe('API Pages', () => {
11
11
  referencePage.open();
12
12
  });
13
13
 
14
- layoutTest(referencePage);
14
+ layoutTest(referencePage, 'doc-header');
15
15
 
16
16
  it('should have the right title', async () => {
17
17
  expect(browser).toHaveTitle('TEST Commerce Cloud Orders APIs');
@@ -179,10 +179,8 @@ describe('Reference Versioning', () => {
179
179
 
180
180
  await referencePage.waitForSpecBasedReferencePageLoad();
181
181
  await referencePage.selectVersion();
182
- await referencePage.waitForSpecBasedReferencePageLoad();
183
182
 
184
183
  const container = await $('>>>div.title-area div');
185
- await container.waitForDisplayed();
186
184
  const apiTitle = await container.getText();
187
185
 
188
186
  expect(apiTitle).toEqual('createBasket');
@@ -276,7 +274,6 @@ describe('Spec-Based Flexible References', () => {
276
274
  await referencePage.waitForSpecBasedReferencePageLoad();
277
275
 
278
276
  const container = await $('>>>div.title-area div');
279
- await container.waitForDisplayed();
280
277
  const apiTitle = await container.getText();
281
278
 
282
279
  expect(apiTitle).toEqual('getBasket');
@@ -24,6 +24,13 @@ exports.config = {
24
24
  './src/portal/specs/docs.test.ts',
25
25
  ],
26
26
 
27
+ // Skip footer tests - footer is not available in static builds
28
+ mochaOpts: {
29
+ ...BASE_CONFIG.config.mochaOpts,
30
+ grep: 'should display footer',
31
+ invert: true,
32
+ },
33
+
27
34
  // Output directory for static test results
28
35
  outputDir: './_results_/static-portal',
29
36
 
package/bin/publish.sh DELETED
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- VERSION="${1:?Usage: publish.sh <version> [--tag <tag>]}"
5
- shift
6
-
7
- cp package.json .package.json.bak
8
-
9
- cleanup() {
10
- mv .package.json.bak package.json
11
- node -e "
12
- var p = require('./package.json');
13
- p.version = '$VERSION';
14
- require('fs').writeFileSync('package.json', JSON.stringify(p, null, 2) + '\n');
15
- "
16
- git add package.json
17
- git commit --amend --no-edit
18
- }
19
- trap cleanup EXIT
20
-
21
- node -e "
22
- var p = require('./package.json');
23
- delete p.private;
24
- require('fs').writeFileSync('package.json', JSON.stringify(p, null, 2) + '\n');
25
- "
26
-
27
- if [ "$#" -gt 0 ]; then
28
- yarn publish --new-version "$VERSION" "$@"
29
- else
30
- yarn publish --new-version "$VERSION"
31
- fi
@@ -1,70 +0,0 @@
1
- import GuidePage from '../pageobjects/guide.page';
2
-
3
- /**
4
- * E2E tests for internal link resolution (internalReferencePlugin + referenceLinkTransformerPlugin).
5
- * Covered: relative .md → .html resolution, guide-to-guide links, reference-to-guide links,
6
- * external links.
7
- **/
8
- describe('Internal link resolution', () => {
9
- const UPDATE_ORDER_STATES_PAGE =
10
- '/docs/commerce/test-cc-orders-api/guide/update-order-states.html';
11
- const QUICK_START_PAGE = '/docs/commerce/test-cc-orders-api/guide/quick-start.html';
12
- const REFERENCE_PAGE =
13
- '/docs/success/sfdocs/references/markdown-cheatsheet/markdown-cheatsheet.html#how-to-link-between-overviews-guides-and-references';
14
-
15
- let page: GuidePage;
16
-
17
- it('should resolve relative guide link correctly', async () => {
18
- page = new GuidePage(UPDATE_ORDER_STATES_PAGE);
19
- page.open();
20
- await page.waitPageLoad();
21
-
22
- const ordersApiLink = await $('a.internal-link-guide[href*="orders-api-overview"]');
23
- await ordersApiLink.waitForDisplayed();
24
- const href = await ordersApiLink.getAttribute('href');
25
- expect(href).not.toMatch(/\.md(?:\?|#|$)/);
26
- expect(href).toContain('orders-api-overview.html');
27
- });
28
-
29
- it('should resolve guide linking in same folder correctly', async () => {
30
- page = new GuidePage(QUICK_START_PAGE);
31
- page.open();
32
- await page.waitPageLoad();
33
-
34
- await (await $('>>> doc-heading[hash="see-also"]')).waitForDisplayed();
35
-
36
- const understandTheBasicsLink = await $('=Understand the Basics');
37
- await understandTheBasicsLink.waitForDisplayed();
38
- const href = await understandTheBasicsLink.getAttribute('href');
39
- expect(href).not.toMatch(/\.md(?:\?|#|$)/);
40
- expect(href).toContain('understand-the-basics.html');
41
- });
42
-
43
- it('should have html link for reference to guide linking', async () => {
44
- page = new GuidePage(REFERENCE_PAGE);
45
- page.open();
46
- await page.waitPageLoad();
47
-
48
- await (
49
- await $('>>> doc-heading[hash="how-to-link-between-overviews-guides-and-references"]')
50
- ).waitForDisplayed();
51
-
52
- const threeContentTypesLink = await $('=three content types');
53
- await threeContentTypesLink.waitForDisplayed();
54
- const href = await threeContentTypesLink.getAttribute('href');
55
- expect(href).toContain('guide');
56
- expect(href).toMatch(/\.html(?:#|$|\?)/);
57
- });
58
-
59
- it('should treat external links as external', async () => {
60
- page = new GuidePage(REFERENCE_PAGE);
61
- page.open();
62
- await page.waitPageLoad();
63
-
64
- const externalLinks = await $$('a.external-link-guide');
65
- expect(externalLinks.length).toBeGreaterThan(0);
66
- for (const link of externalLinks) {
67
- expect(await link.getAttribute('target')).toBe('_blank');
68
- }
69
- });
70
- });