@testspectra/cli 1.1.8-rc.5 → 1.1.8-rc.7

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.
Files changed (187) hide show
  1. package/README.md +47 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/commands/__tests__/run-e2e.test.js +49 -49
  4. package/dist/commands/init.js +148 -148
  5. package/dist/index.js +11 -11
  6. package/dist/linter/__tests__/component-test-imports.test.js +51 -51
  7. package/dist/linter/__tests__/spec-schema.test.js +167 -167
  8. package/dist/linter/schemas/spec.schema.d.ts +2 -2
  9. package/dist/linter/schemas/suite.schema.d.ts +4 -4
  10. package/dist/runner/bridge.js +43 -4
  11. package/package.json +10 -4
  12. package/templates/default/CLAUDE.md +16 -16
  13. package/templates/default/global-hooks/after/mobile.hook.ts +3 -3
  14. package/templates/default/global-hooks/after/web.hook.ts +3 -3
  15. package/templates/default/global-hooks/before/mobile.hook.ts +3 -3
  16. package/templates/default/global-hooks/before/web.hook.ts +3 -3
  17. package/templates/default/package.json +2 -2
  18. package/templates/default/page-objects/AuthPage/mobile.ts +5 -5
  19. package/templates/default/page-objects/AuthPage/web.ts +10 -10
  20. package/templates/default/page-objects/MatchersPage/mobile.ts +70 -70
  21. package/templates/default/page-objects/MatchersPage/web.ts +43 -43
  22. package/templates/default/page-objects/NavigationPage/mobile.ts +14 -14
  23. package/templates/default/page-objects/NavigationPage/web.ts +8 -8
  24. package/templates/default/page-objects/PlaygroundPage/mobile.ts +42 -42
  25. package/templates/default/page-objects/PlaygroundPage/web.ts +31 -31
  26. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +53 -53
  27. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/spec.md +19 -19
  28. package/templates/default/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +31 -31
  29. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/android.test.ts +3 -3
  30. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/common.test.ts +3 -3
  31. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +27 -27
  32. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/spec.md +19 -19
  33. package/templates/default/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +26 -26
  34. package/templates/default/specs/ApiInterception/TC-0012-direct-and-late-response/common.test.ts +30 -30
  35. package/templates/default/specs/ApiInterception/TC-0012-direct-and-late-response/spec.md +22 -22
  36. package/templates/default/specs/ApiInterception/TC-0013-real-network-call-recorded/common.test.ts +27 -27
  37. package/templates/default/specs/ApiInterception/TC-0013-real-network-call-recorded/spec.md +20 -20
  38. package/templates/default/specs/ApiInterception/TC-0015-mock-server-sent-events/spec.md +24 -24
  39. package/templates/default/specs/ApiInterception/TC-0015-mock-server-sent-events/web.test.ts +26 -26
  40. package/templates/default/specs/ApiInterception/TC-0016-bypass-websocket-with-app-level-mock/spec.md +37 -37
  41. package/templates/default/specs/ApiInterception/TC-0016-bypass-websocket-with-app-level-mock/web.test.ts +21 -21
  42. package/templates/default/specs/ApiInterception/TC-0017-bypass-captcha-with-test-mode-flag/spec.md +29 -29
  43. package/templates/default/specs/ApiInterception/TC-0017-bypass-captcha-with-test-mode-flag/web.test.ts +16 -16
  44. package/templates/default/specs/ApiInterception/suite.md +10 -10
  45. package/templates/default/specs/ApiSeeding/TC-0014-seed-and-cleanup-via-hooks/common.test.ts +30 -30
  46. package/templates/default/specs/ApiSeeding/TC-0014-seed-and-cleanup-via-hooks/spec.md +23 -23
  47. package/templates/default/specs/ApiSeeding/hooks/after/common.hook.ts +16 -16
  48. package/templates/default/specs/ApiSeeding/hooks/before/common.hook.ts +28 -28
  49. package/templates/default/specs/ApiSeeding/suite.md +9 -9
  50. package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/mobile.test.ts +7 -7
  51. package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/spec.md +19 -19
  52. package/templates/default/specs/Authentication/TC-0021-seed-authenticated-session/web.test.ts +9 -9
  53. package/templates/default/specs/Authentication/suite.md +9 -9
  54. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +9 -9
  55. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/spec.md +17 -17
  56. package/templates/default/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +19 -19
  57. package/templates/default/specs/BrowserContext/TC-0022-history-navigation/mobile.test.ts +17 -17
  58. package/templates/default/specs/BrowserContext/TC-0022-history-navigation/spec.md +28 -28
  59. package/templates/default/specs/BrowserContext/TC-0022-history-navigation/web.test.ts +26 -26
  60. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/common.test.ts +26 -26
  61. package/templates/default/specs/ContentMatchers/TC-0005-text-and-values/spec.md +19 -19
  62. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +11 -11
  63. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/spec.md +17 -17
  64. package/templates/default/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +11 -11
  65. package/templates/default/specs/ContentMatchers/TC-0020-scoped-element-access/common.test.ts +14 -14
  66. package/templates/default/specs/ContentMatchers/TC-0020-scoped-element-access/spec.md +21 -21
  67. package/templates/default/specs/DeepLink/TC-0018-navigate-via-deep-link/mobile.test.ts +28 -28
  68. package/templates/default/specs/DeepLink/TC-0018-navigate-via-deep-link/spec.md +29 -29
  69. package/templates/default/specs/DeepLink/suite.md +9 -9
  70. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +11 -11
  71. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/spec.md +17 -17
  72. package/templates/default/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +11 -11
  73. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +29 -29
  74. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/spec.md +19 -19
  75. package/templates/default/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +29 -29
  76. package/templates/default/specs/ElementMatchers/suite.md +10 -10
  77. package/templates/default/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/common.test.ts +5 -5
  78. package/templates/default/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/spec.md +16 -16
  79. package/templates/default/specs/EnvironmentConfig/suite.md +9 -9
  80. package/templates/default/specs/PermissionRationale/TC-0010-camera-permission-allow/mobile.test.ts +26 -26
  81. package/templates/default/specs/PermissionRationale/TC-0010-camera-permission-allow/spec.md +22 -22
  82. package/templates/default/specs/PermissionRationale/TC-0011-camera-permission-deny/mobile.test.ts +13 -13
  83. package/templates/default/specs/PermissionRationale/TC-0011-camera-permission-deny/spec.md +20 -20
  84. package/templates/default/specs/PermissionRationale/suite.md +9 -9
  85. package/templates/default/specs/Playground/TC-0001-form-controls/mobile.test.ts +6 -6
  86. package/templates/default/specs/Playground/TC-0001-form-controls/spec.md +18 -18
  87. package/templates/default/specs/Playground/TC-0001-form-controls/web.test.ts +6 -6
  88. package/templates/default/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +6 -6
  89. package/templates/default/specs/Playground/TC-0002-toggle-elements/spec.md +18 -18
  90. package/templates/default/specs/Playground/TC-0002-toggle-elements/web.test.ts +6 -6
  91. package/templates/default/spectra.config.ts +52 -52
  92. package/templates/default/support/actions/fillCredentials/mobile.action.ts +4 -4
  93. package/templates/default/support/actions/fillCredentials/web.action.ts +4 -4
  94. package/templates/default/support/actions/seedSession/mobile.action.ts +9 -9
  95. package/templates/default/support/actions/seedSession/web.action.ts +13 -13
  96. package/templates/default/support/steps/togglePlaygroundStates/mobile.step.ts +5 -5
  97. package/templates/default/support/steps/togglePlaygroundStates/web.step.ts +5 -5
  98. package/templates/default/support/steps/verifyPlaygroundState/mobile.step.ts +6 -6
  99. package/templates/default/support/steps/verifyPlaygroundState/web.step.ts +6 -6
  100. package/templates/nx/.nx/workspace-data/{59842386-c7c4-44ca-b2c2-20e1700bd13d.db-shm → 70094CFD-E89B-57A1-9619-2FC5F4963C54.db-shm} +0 -0
  101. package/templates/nx/.nx/workspace-data/{59842386-c7c4-44ca-b2c2-20e1700bd13d.db-wal → 70094CFD-E89B-57A1-9619-2FC5F4963C54.db-wal} +0 -0
  102. package/templates/nx/.nx/workspace-data/d/daemon.log +5524 -1737
  103. package/templates/nx/.nx/workspace-data/d/server-process.json +1 -1
  104. package/templates/nx/.nx/workspace-data/file-map.json +116 -116
  105. package/templates/nx/.nx/workspace-data/lockfile.hash +1 -1
  106. package/templates/nx/.nx/workspace-data/nx_files.nxt +0 -0
  107. package/templates/nx/.nx/workspace-data/parsed-lock-file.json +535 -535
  108. package/templates/nx/.nx/workspace-data/project-graph.json +584 -584
  109. package/templates/nx/CLAUDE.md +10 -10
  110. package/templates/nx/package.json +2 -2
  111. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/mobile.test.ts +27 -27
  112. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0008-fetch-mocking/web.test.ts +27 -27
  113. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/mobile.test.ts +24 -24
  114. package/templates/nx/packages/matchers/e2e/specs/ApiInterception/TC-0009-post-mocking/web.test.ts +24 -24
  115. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/mobile.test.ts +3 -3
  116. package/templates/nx/packages/matchers/e2e/specs/BrowserContext/TC-0007-title-and-navigation/web.test.ts +19 -19
  117. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/mobile.test.ts +3 -3
  118. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0005-text-and-values/web.test.ts +17 -17
  119. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/mobile.test.ts +3 -3
  120. package/templates/nx/packages/matchers/e2e/specs/ContentMatchers/TC-0006-collections-and-empty/web.test.ts +11 -11
  121. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/mobile.test.ts +3 -3
  122. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0003-visibility-and-dom/web.test.ts +11 -11
  123. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/mobile.test.ts +3 -3
  124. package/templates/nx/packages/matchers/e2e/specs/ElementMatchers/TC-0004-states-and-attributes/web.test.ts +29 -29
  125. package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/common.test.ts +5 -5
  126. package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/TC-0019-read-custom-environment-variable/spec.md +16 -16
  127. package/templates/nx/packages/matchers/e2e/specs/EnvironmentConfig/suite.md +9 -9
  128. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/mobile.test.ts +3 -3
  129. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0001-form-controls/web.test.ts +6 -6
  130. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/mobile.test.ts +3 -3
  131. package/templates/nx/packages/playground/e2e/specs/Playground/TC-0002-toggle-elements/web.test.ts +6 -6
  132. package/templates/nx/pnpm-lock.yaml +6663 -6663
  133. package/templates/nx/pnpm-workspace.yaml +9 -9
  134. package/templates/nx/shared/testing/page-objects/MatchersPage/mobile.ts +33 -33
  135. package/templates/nx/shared/testing/page-objects/MatchersPage/web.ts +91 -91
  136. package/templates/nx/shared/testing/page-objects/NavigationPage/mobile.ts +5 -5
  137. package/templates/nx/shared/testing/page-objects/NavigationPage/web.ts +8 -8
  138. package/templates/nx/shared/testing/page-objects/PlaygroundPage/mobile.ts +26 -26
  139. package/templates/nx/shared/testing/page-objects/PlaygroundPage/web.ts +31 -31
  140. package/templates/nx/shared/testing/project.json +19 -19
  141. package/templates/nx/shared/testing/support/actions/fillCredentials/mobile.action.ts +4 -4
  142. package/templates/nx/shared/testing/support/actions/fillCredentials/web.action.ts +4 -4
  143. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/mobile.step.ts +3 -3
  144. package/templates/nx/shared/testing/support/steps/togglePlaygroundStates/web.step.ts +5 -5
  145. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/mobile.step.ts +4 -4
  146. package/templates/nx/shared/testing/support/steps/verifyPlaygroundState/web.step.ts +6 -6
  147. package/templates/nx/spectra.config.ts +52 -52
  148. package/templates/react-component/.cursorrules +17 -17
  149. package/templates/react-component/.vscode/extensions.json +5 -5
  150. package/templates/react-component/CLAUDE.md +14 -14
  151. package/templates/react-component/README.md +69 -69
  152. package/templates/react-component/fixtures/component-mock.json +12 -12
  153. package/templates/react-component/global-hooks/after/web.hook.ts +3 -3
  154. package/templates/react-component/global-hooks/before/web.hook.ts +3 -3
  155. package/templates/react-component/package.json +27 -27
  156. package/templates/react-component/page-objects/BadgeComponent/web.ts +23 -23
  157. package/templates/react-component/page-objects/ButtonComponent/web.ts +23 -23
  158. package/templates/react-component/page-objects/InputComponent/web.ts +13 -13
  159. package/templates/react-component/specs/BadgeComponent/TC-0002-badge-severities-and-dot/spec.md +18 -18
  160. package/templates/react-component/specs/BadgeComponent/TC-0002-badge-severities-and-dot/web.test.tsx +11 -11
  161. package/templates/react-component/specs/BadgeComponent/TC-0006-badge-success-with-dot/spec.md +18 -18
  162. package/templates/react-component/specs/BadgeComponent/TC-0006-badge-success-with-dot/web.test.tsx +10 -10
  163. package/templates/react-component/specs/BadgeComponent/TC-0007-badge-by-severity-lookup/spec.md +18 -18
  164. package/templates/react-component/specs/BadgeComponent/TC-0007-badge-by-severity-lookup/web.test.tsx +16 -16
  165. package/templates/react-component/specs/BadgeComponent/suite.md +12 -12
  166. package/templates/react-component/specs/ButtonComponent/TC-0001-button-rendering-and-click/spec.md +19 -19
  167. package/templates/react-component/specs/ButtonComponent/TC-0001-button-rendering-and-click/web.test.tsx +28 -28
  168. package/templates/react-component/specs/ButtonComponent/TC-0004-disabled-button-not-clickable/spec.md +19 -19
  169. package/templates/react-component/specs/ButtonComponent/TC-0004-disabled-button-not-clickable/web.test.tsx +22 -22
  170. package/templates/react-component/specs/ButtonComponent/TC-0005-button-renders-icon/spec.md +18 -18
  171. package/templates/react-component/specs/ButtonComponent/TC-0005-button-renders-icon/web.test.tsx +8 -8
  172. package/templates/react-component/specs/ButtonComponent/suite.md +12 -12
  173. package/templates/react-component/specs/InputComponent/TC-0003-input-typing-and-clear/spec.md +20 -20
  174. package/templates/react-component/specs/InputComponent/TC-0003-input-typing-and-clear/web.test.tsx +28 -28
  175. package/templates/react-component/specs/InputComponent/TC-0008-disabled-input-not-editable/spec.md +18 -18
  176. package/templates/react-component/specs/InputComponent/TC-0008-disabled-input-not-editable/web.test.tsx +9 -9
  177. package/templates/react-component/specs/InputComponent/suite.md +12 -12
  178. package/templates/react-component/spectra.config.ts +27 -27
  179. package/templates/react-component/src/components/Badge/Badge.tsx +60 -60
  180. package/templates/react-component/src/components/Button/Button.tsx +57 -57
  181. package/templates/react-component/src/components/Input/Input.tsx +41 -41
  182. package/templates/react-component/src/test-utils.tsx +23 -23
  183. package/templates/react-component/support/actions/fillInputField/web.action.ts +9 -9
  184. package/templates/react-component/support/steps/verifyButtonState/web.step.ts +12 -12
  185. package/bin/.testspectra-runner.hash +0 -1
  186. package/bin/testspectra-runner.exe +0 -0
  187. /package/templates/nx/.nx/workspace-data/{59842386-c7c4-44ca-b2c2-20e1700bd13d.db → 70094CFD-E89B-57A1-9619-2FC5F4963C54.db} +0 -0
@@ -1,9 +1,9 @@
1
- export default async function (this: any) {
2
- // Android has no cookie jar to write into — the deep link asks the app to log itself in
3
- // (a known, sanctioned test account, server-side) and persist the result through its own
4
- // secure storage (e.g. react-native-keychain), the same way a real login would. See
5
- // docs/v2/features/authentication-and-session-seeding.md for why this doesn't accept an
6
- // externally-supplied session value the way the web action does.
7
- await this.navigate("testspectra-demo://seed-session");
8
- await this.get("~auth-status-badge").waitForElement(10000);
9
- }
1
+ export default async function (this: any) {
2
+ // Android has no cookie jar to write into — the deep link asks the app to log itself in
3
+ // (a known, sanctioned test account, server-side) and persist the result through its own
4
+ // secure storage (e.g. react-native-keychain), the same way a real login would. See
5
+ // docs/v2/features/authentication-and-session-seeding.md for why this doesn't accept an
6
+ // externally-supplied session value the way the web action does.
7
+ await this.navigate("testspectra-demo://seed-session");
8
+ await this.get("~auth-status-badge").waitForElement(10000);
9
+ }
@@ -1,13 +1,13 @@
1
- export default async function (this: any) {
2
- // Host-side (Bun) fetch — not the browser's — so there's no CORS/credentials restriction on
3
- // reading the raw Set-Cookie header, HttpOnly included.
4
- const res = await fetch("http://localhost:5200/api/login", {
5
- method: "POST",
6
- headers: { "content-type": "application/json" },
7
- body: JSON.stringify({ email: "demo@testspectra.dev", password: "demo-password" }),
8
- });
9
- if (!res.ok) {
10
- throw new Error(`seedSession: login failed (${res.status})`);
11
- }
12
- await this.browser.setCookies(res.headers.getSetCookie(), res.url);
13
- }
1
+ export default async function (this: any) {
2
+ // Host-side (Bun) fetch — not the browser's — so there's no CORS/credentials restriction on
3
+ // reading the raw Set-Cookie header, HttpOnly included.
4
+ const res = await fetch("http://localhost:5200/api/login", {
5
+ method: "POST",
6
+ headers: { "content-type": "application/json" },
7
+ body: JSON.stringify({ email: "demo@testspectra.dev", password: "demo-password" }),
8
+ });
9
+ if (!res.ok) {
10
+ throw new Error(`seedSession: login failed (${res.status})`);
11
+ }
12
+ await this.browser.setCookies(res.headers.getSetCookie(), res.url);
13
+ }
@@ -1,5 +1,5 @@
1
- export default async function () {
2
- await PlaygroundPage.open();
3
- await PlaygroundPage.hiddenElement.shouldBeVisible();
4
- await PlaygroundPage.existingElement.shouldExist();
5
- }
1
+ export default async function () {
2
+ await PlaygroundPage.open();
3
+ await PlaygroundPage.hiddenElement.shouldBeVisible();
4
+ await PlaygroundPage.existingElement.shouldExist();
5
+ }
@@ -1,5 +1,5 @@
1
- export default async function () {
2
- await PlaygroundPage.open();
3
- await PlaygroundPage.hiddenElement.shouldBeVisible();
4
- await PlaygroundPage.existingElement.shouldExist();
5
- }
1
+ export default async function () {
2
+ await PlaygroundPage.open();
3
+ await PlaygroundPage.hiddenElement.shouldBeVisible();
4
+ await PlaygroundPage.existingElement.shouldExist();
5
+ }
@@ -1,6 +1,6 @@
1
- export default async function () {
2
- await PlaygroundPage.open();
3
- await PlaygroundPage.visibleElement.shouldBeVisible();
4
- await PlaygroundPage.enabledButton.shouldBeEnabled();
5
- await PlaygroundPage.termsCheckbox.shouldBeChecked();
6
- }
1
+ export default async function () {
2
+ await PlaygroundPage.open();
3
+ await PlaygroundPage.visibleElement.shouldBeVisible();
4
+ await PlaygroundPage.enabledButton.shouldBeEnabled();
5
+ await PlaygroundPage.termsCheckbox.shouldBeChecked();
6
+ }
@@ -1,6 +1,6 @@
1
- export default async function () {
2
- await PlaygroundPage.open();
3
- await PlaygroundPage.visibleElement.shouldBeVisible();
4
- await PlaygroundPage.enabledButton.shouldBeEnabled();
5
- await PlaygroundPage.termsCheckbox.shouldBeChecked();
6
- }
1
+ export default async function () {
2
+ await PlaygroundPage.open();
3
+ await PlaygroundPage.visibleElement.shouldBeVisible();
4
+ await PlaygroundPage.enabledButton.shouldBeEnabled();
5
+ await PlaygroundPage.termsCheckbox.shouldBeChecked();
6
+ }