@camunda/e2e-test-suite 0.0.248 → 0.0.250

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/README.md CHANGED
@@ -70,7 +70,6 @@ For C8Run, a test run can be manually triggered for specific minor versions, for
70
70
  - [C8Run On-Demand with macOS GitHub Action](https://github.com/camunda/c8-cross-component-e2e-tests/actions/workflows/playwright_c8Run_tests_manual_mac.yml)
71
71
  - [C8Run On-Demand with Windows GitHub Action](https://github.com/camunda/c8-cross-component-e2e-tests/actions/workflows/playwright_c8Run_tests_manual_windows.yml)
72
72
 
73
-
74
73
  ## Prerequisites
75
74
 
76
75
  1. Before running the test suite, make sure you have the following prerequisites installed:
@@ -133,6 +132,7 @@ Request the creation of an organisation identical to `Automation QA`
133
132
  **Environment:** `INT`
134
133
 
135
134
  **Requirements:**
135
+
136
136
  - You must be set as the **Owner**
137
137
  - Name the organisation: `Automation QA - Your_Name`
138
138
 
@@ -160,22 +160,21 @@ Within the `Automation QA - Your_Name` organisation, invite the following users:
160
160
  - `C8_PASSWORD`
161
161
  - `C8_PASSWORD_TEST`
162
162
 
163
-
164
163
  ## Running Smoke Tests in CI
165
164
 
166
165
  ### SaaS On-Demand Generation Creation Smoke
167
166
 
168
- To trigger the SaaS smoke tests in CI, use the workflow:
167
+ To trigger the SaaS smoke tests in CI, use the workflow:
169
168
 
170
169
  [SaaS On-Demand Generation Creation Smoke](https://github.com/camunda/c8-cross-component-e2e-tests/actions/workflows/playwright_saas_manual_generation_creation_smoke.yml)
171
170
 
172
171
  - You’ll be prompted to input the version you want to test for each component.
173
172
  - The **minor version** is simply the minor version your PR is targeting.
174
- - *Example:* If your PR targets `8.9`, then the minor version is `8.9`.
173
+ - _Example:_ If your PR targets `8.9`, then the minor version is `8.9`.
175
174
 
176
175
  ### Helm Chart Smoke Tests (Self-Managed)
177
176
 
178
- For Helm chart tests (if you want to run only the smoke test), use the workflow:
177
+ For Helm chart tests (if you want to run only the smoke test), use the workflow:
179
178
 
180
179
  [SM On-Demand Smoke 8.8+](https://github.com/camunda/c8-cross-component-e2e-tests/actions/workflows/playwright_sm_manual_smoke_8_8_plus.yml)
181
180
 
@@ -208,6 +207,7 @@ npx playwright test --ui
208
207
  ### Additional Notes for Local Testing
209
208
 
210
209
  #### C8 SaaS
210
+
211
211
  For a full test run, no additional configuration is required. However, if you are running a single test, ensure you have a healthy and active cluster.
212
212
 
213
213
  If you want to run tests against the production environment, add the following to your local .env file:
@@ -217,6 +217,7 @@ IS_PROD=true
217
217
  ```
218
218
 
219
219
  #### C8 Self-Managed (SM) with Helm
220
+
220
221
  To test locally on the SM Helm environment, you need an active SM instance. You can create one through any of the following GitHub Actions workflows:
221
222
 
222
223
  - [Basic Helm Chart for versions ≤ 8.7.X](https://github.com/camunda/c8-cross-component-e2e-tests/actions/workflows/playwright_sm_manual_no_tests.yml)
@@ -237,17 +238,20 @@ If you want to run tests with Resource-Based Access (RBA) enabled, add the follo
237
238
  ```bash
238
239
  IS_RBA=true
239
240
  ```
241
+
240
242
  If you want to run tests with Multi-Tenancy (MT) enabled, add the following to your .env file, otherwise SM tests default to MT disabled:
241
243
 
242
244
  ```bash
243
245
  IS_MT=true
244
246
  ```
247
+
245
248
  #### C8 Run
249
+
246
250
  To test locally against C8 Run, you must set up a local instance of C8 Run. Please follow the instructions provided in the [C8 Run README.md](https://github.com/camunda/camunda/blob/main/c8run/README.md). By default, the BASE_URL is localhost:8080, however if this is configured as something differently, tests can be run against this by inputting the new BASE_URL into your `.env` file under the `PLAYWRIGHT_BASE_URL` variable.
247
251
 
248
252
  ## Running MCP Tests (c8Run Only)
249
253
 
250
- The MCP (Model Context Protocol) test suite requires the MCP test server to be running locally. These tests are designed for **c8Run environments only**, as they require localhost access to the MCP server.
254
+ The MCP (Model Context Protocol) test suite requires the MCP test server to be running locally. These tests are designed for **c8Run environments only** (version 8.9+), as they require localhost access to the MCP server.
251
255
 
252
256
  The MCP test server is available as a Docker image from the [camunda/mcp](https://github.com/camunda/mcp) repository.
253
257
 
@@ -257,6 +261,15 @@ To run MCP tests locally with c8Run, you need to start both the MCP test server
257
261
 
258
262
  1. Start the MCP server:
259
263
 
264
+ **macOS/Windows:**
265
+ ```bash
266
+ docker run -d \
267
+ --name mcp-test-server \
268
+ -p 12001:12001 \
269
+ registry.camunda.cloud/mcp/mcp-test-server:latest
270
+ ```
271
+
272
+ **Linux:**
260
273
  ```bash
261
274
  docker run -d \
262
275
  --name mcp-test-server \
@@ -266,10 +279,10 @@ To run MCP tests locally with c8Run, you need to start both the MCP test server
266
279
 
267
280
  2. Start c8Run locally (follow [c8Run setup instructions](https://github.com/camunda/camunda/blob/main/c8run/README.md))
268
281
 
269
- 3. Run the MCP tests:
282
+ 3. Run the MCP tests (the `MCP_SERVER_AVAILABLE` env var is required to enable them):
270
283
 
271
284
  ```bash
272
- npx playwright test --project=chromium-v2 tests/c8Run-8.9/mcp-user-flows.spec.ts
285
+ MCP_SERVER_AVAILABLE=true npx playwright test --project=chromium-v2 tests/c8Run-8.9/mcp-user-flows.spec.ts
273
286
  ```
274
287
 
275
288
  4. Stop the MCP server when done:
@@ -291,6 +304,32 @@ You can override the MCP server URL by setting the `MCP_SERVER_URL` environment
291
304
  MCP_SERVER_URL=http://localhost:12001
292
305
  ```
293
306
 
307
+ ### Available MCP Operations
308
+
309
+ The comprehensive MCP test suite validates all 7 operations of the MCP Remote Client connector:
310
+
311
+ #### Tools Operations
312
+
313
+ - **tools/list**: Lists all available MCP tools (e.g., `greet`, `add`, `echo`)
314
+ - **tools/call**: Executes a specific tool with arguments (tests `greet` tool with `name: "John"`)
315
+
316
+ #### Resources Operations
317
+
318
+ - **resources/list**: Lists available MCP resources (tests `file://jokes-guide.md`)
319
+ - **resources/templates/list**: Lists resource templates (validates empty array response)
320
+ - **resources/read**: Reads content from a specific resource URI (`file://jokes-guide.md`)
321
+
322
+ #### Prompts Operations
323
+
324
+ - **prompts/list**: Lists available MCP prompts (tests `get-greeting` prompt)
325
+ - **prompts/get**: Retrieves a specific prompt with arguments (tests `get-greeting` with `name: "John"`)
326
+
327
+ Each operation stores its result in a dedicated process variable:
328
+
329
+ - `listToolsResult`, `callToolResult`, `listResourcesResult`, `listResourcesTemplateResult`, `readResourceResult`, `listPromptsResult`, `getPromptResult`
330
+
331
+ The test suite validates the JSON structure and content of each operation's response to ensure complete connector functionality.
332
+
294
333
  ### Available MCP Tools
295
334
 
296
335
  The MCP test server provides the following tools for testing:
@@ -303,7 +342,20 @@ For more details about the MCP server and its capabilities, see the [MCP reposit
303
342
 
304
343
  ### CI/CD Integration
305
344
 
306
- In c8Run CI/CD pipelines (Linux, macOS, Windows), the MCP server is automatically started before running tests and stopped after tests complete. No additional configuration is required.
345
+ In CI/CD pipelines, the MCP server runs **only on Linux (`ubuntu-latest`)** and only under the following conditions:
346
+
347
+ - c8Run version **>= 8.9**
348
+ - Tasklist **v2** mode (not v1)
349
+ - **Detached mode** only (not Docker Compose mode)
350
+
351
+ The `MCP_SERVER_AVAILABLE` environment variable is set to `true` when the server starts successfully. The test suite checks this variable and skips all MCP tests if it is not set, so runs on macOS, Windows, or unsupported versions will skip gracefully rather than fail.
352
+
353
+ **Why macOS and Windows are excluded from CI:**
354
+
355
+ - **macOS runners** (`macos-latest`, `macos-14`): GitHub Actions macOS runners do not have Docker pre-installed, so `docker run` fails with `docker: command not found`.
356
+ - **Windows runners**: The MCP test server image (`registry.camunda.cloud/mcp/mcp-test-server:latest`) has no `windows/amd64` manifest, so `docker run` fails with "no matching manifest for windows/amd64".
357
+
358
+ MCP tests can still be run locally on macOS and Windows using the instructions above.
307
359
 
308
360
  ## Automated Nightly Test Runs
309
361
 
@@ -331,34 +383,37 @@ login.spec.ts - Tests related to the login functionality using the LoginPage obj
331
383
 
332
384
  Feel free to add more test files or page objects to expand the test coverage based on your specific requirements.
333
385
 
334
- ## GitHub Actions Workflow Naming Convention
386
+ ## GitHub Actions Workflow Naming Convention
387
+
388
+ To maintain consistency and clarity in workflow names displayed in the GitHub Actions UI, we use the following naming pattern:
335
389
 
336
- To maintain consistency and clarity in workflow names displayed in the GitHub Actions UI, we use the following naming pattern:
390
+ ### **Naming Pattern:**
337
391
 
338
- ### **Naming Pattern:**
339
- `<Distribution> <Trigger> <Scope (if needed)>`
392
+ `<Distribution> <Trigger> <Scope (if needed)>`
340
393
 
341
- - **Distribution:**
342
- - `SaaS` → Cloud-based environment
343
- - `SM` → Self-Managed using the Helm Chart
344
- - `C8Run` → C8Run environment
394
+ - **Distribution:**
345
395
 
346
- - **Trigger:**
347
- - `Nightly` → Runs automatically every night
348
- - `PR` → Runs when a pull request is opened/updated
349
- - `On-Demand` → Runs when triggered via **workflow dispatch**
396
+ - `SaaS` → Cloud-based environment
397
+ - `SM` → Self-Managed using the Helm Chart
398
+ - `C8Run` → C8Run environment
350
399
 
351
- - **Scope** (optional):
352
- - `Linux`, `Connectors`, `OpenSearch`, `No Tests` etc.
400
+ - **Trigger:**
353
401
 
354
- ### **Examples**
402
+ - `Nightly` → Runs automatically every night
403
+ - `PR` → Runs when a pull request is opened/updated
404
+ - `On-Demand` → Runs when triggered via **workflow dispatch**
355
405
 
356
- | Workflow Name | Meaning |
357
- |--------------|---------|
358
- | `SaaS Nightly 8.8` | Runs SaaS tests nightly against the latest 8.8 SNAPSHOT |
359
- | `SM Nightly Chrome 8.7 OpenSearch` | Runs SM tests nightly against the latest 8.7 SNAPSHOT in Chrome with OpenSearch |
360
- | `SaaS/SM/C8Run PR` | Runs SaaS or Self-Manged or C8Run tests on PR updates |
361
- | `SM On-Demand MT No Tests` | Creates a Self-Managed environment with Multi-Tenancy Enabled via workflow dispatch with no test run|
406
+ - **Scope** (optional):
407
+ - `Linux`, `Connectors`, `OpenSearch`, `No Tests` etc.
408
+
409
+ ### **Examples**
410
+
411
+ | Workflow Name | Meaning |
412
+ | ---------------------------------- | ---------------------------------------------------------------------------------------------------- |
413
+ | `SaaS Nightly 8.8` | Runs SaaS tests nightly against the latest 8.8 SNAPSHOT |
414
+ | `SM Nightly Chrome 8.7 OpenSearch` | Runs SM tests nightly against the latest 8.7 SNAPSHOT in Chrome with OpenSearch |
415
+ | `SaaS/SM/C8Run PR` | Runs SaaS or Self-Manged or C8Run tests on PR updates |
416
+ | `SM On-Demand MT No Tests` | Creates a Self-Managed environment with Multi-Tenancy Enabled via workflow dispatch with no test run |
362
417
 
363
418
  ---
364
419
 
@@ -366,18 +421,17 @@ By following this convention, we ensure **clarity, consistency, and alignment wi
366
421
 
367
422
  ### SM Possible Directory Names
368
423
 
369
- | Directory Name | Meaning |
370
- |---------------------------------|--------------------------------------------------------------------------------------------------------------|
371
- | `camunda-platform-8.9-latest` | Runs SM tests against the latest 8.9 SNAPSHOT |
372
- | `camunda-platform-8.8-latest` | Runs SM tests against the latest 8.8 SNAPSHOT |
373
- | `camunda-platform-8.7-latest` | Runs SM tests against the latest 8.7 SNAPSHOT |
374
- | `camunda-platform-8.6-latest` | Runs SM tests against the latest 8.6 SNAPSHOT |
375
- | `camunda-platform-8.9` | Runs SM tests against the 8.9 directory. This is where the `release-candidate-8.9` branch is located |
376
- | `camunda-platform-8.8` | Runs SM tests against the 8.8 directory. This is where the `release-candidate-8.8` branch is located |
377
- | `camunda-platform-8.7` | Runs SM tests against the 8.7 directory. This is where the `release-candidate-8.7` branch is located |
378
- | `camunda-platform-8.6` | Runs SM tests against the 8.6 directory. This is where the `release-candidate-8.6` branch is located |
379
- | `all-latest` | Runs SM tests against all latest versions |
380
-
424
+ | Directory Name | Meaning |
425
+ | ----------------------------- | ---------------------------------------------------------------------------------------------------- |
426
+ | `camunda-platform-8.9-latest` | Runs SM tests against the latest 8.9 SNAPSHOT |
427
+ | `camunda-platform-8.8-latest` | Runs SM tests against the latest 8.8 SNAPSHOT |
428
+ | `camunda-platform-8.7-latest` | Runs SM tests against the latest 8.7 SNAPSHOT |
429
+ | `camunda-platform-8.6-latest` | Runs SM tests against the latest 8.6 SNAPSHOT |
430
+ | `camunda-platform-8.9` | Runs SM tests against the 8.9 directory. This is where the `release-candidate-8.9` branch is located |
431
+ | `camunda-platform-8.8` | Runs SM tests against the 8.8 directory. This is where the `release-candidate-8.8` branch is located |
432
+ | `camunda-platform-8.7` | Runs SM tests against the 8.7 directory. This is where the `release-candidate-8.7` branch is located |
433
+ | `camunda-platform-8.6` | Runs SM tests against the 8.6 directory. This is where the `release-candidate-8.6` branch is located |
434
+ | `all-latest` | Runs SM tests against all latest versions |
381
435
 
382
436
  ### c8Run Supported Versions, Modes and Projects
383
437
  | Version | Docker Allowed? | OS When Docker | OS When Non-Docker | Projects (Non-Docker) | Projects (Docker) |
@@ -409,7 +463,7 @@ To record video, you need to set the following config in the `use` block in the
409
463
 
410
464
  ```typescript
411
465
  use: {
412
- video: 'retain-on-failure'
466
+ video: 'retain-on-failure';
413
467
  }
414
468
  ```
415
469
 
@@ -429,9 +483,8 @@ To contribute, please follow these guidelines:
429
483
 
430
484
  ### TestRail Integration
431
485
 
432
- To ensure our test case documentation on TestRail remains up-to-date, if a PR contains updates to any test file or page file, the associated TestRail test case must be linked in the PR description.
486
+ To ensure our test case documentation on TestRail remains up-to-date, if a PR contains updates to any test file or page file, the associated TestRail test case must be linked in the PR description.
433
487
 
434
488
  If you do not have access to TestRail, please contact the Test Automation Team to request access.
435
489
 
436
-
437
490
  Thank you for using the C8 Cross-Component End-to-End Test Suite for Camunda C8 full product stack e2e testing. Happy testing! If you have any questions or need assistance, feel free to reach out to the maintainers for support.
@@ -15,5 +15,13 @@ declare class OperateProcessInstancePage {
15
15
  completedIconAssertion(): Promise<void>;
16
16
  activeIconAssertion(): Promise<void>;
17
17
  assertProcessVariableContainsText(variableName: string, text: string): Promise<void>;
18
+ /**
19
+ * Gets the JSON value of a variable by name
20
+ */
21
+ getVariableJsonValue(variableName: string): Promise<unknown>;
22
+ /**
23
+ * Verifies that a variable exists and contains expected JSON content
24
+ */
25
+ verifyVariableJsonContent(variableName: string, assertions: (value: unknown) => void | Promise<void>): Promise<void>;
18
26
  }
19
27
  export { OperateProcessInstancePage };
@@ -94,5 +94,27 @@ class OperateProcessInstancePage {
94
94
  }
95
95
  throw new Error(`Failed to assert variable ${variableName} contains ${text} after ${maxRetries} attempts.`);
96
96
  }
97
+ /**
98
+ * Gets the JSON value of a variable by name
99
+ */
100
+ async getVariableJsonValue(variableName) {
101
+ const variable = await this.getProcessVariableValue(variableName);
102
+ await (0, test_1.expect)(variable).toBeVisible();
103
+ const valueText = (await variable.textContent()) || '{}';
104
+ try {
105
+ return JSON.parse(valueText);
106
+ }
107
+ catch (error) {
108
+ throw new Error(`Failed to parse JSON for variable "${variableName}". ` +
109
+ `Raw value: ${valueText}. Original error: ${String(error)}`);
110
+ }
111
+ }
112
+ /**
113
+ * Verifies that a variable exists and contains expected JSON content
114
+ */
115
+ async verifyVariableJsonContent(variableName, assertions) {
116
+ const value = await this.getVariableJsonValue(variableName);
117
+ await assertions(value);
118
+ }
97
119
  }
98
120
  exports.OperateProcessInstancePage = OperateProcessInstancePage;
@@ -53,6 +53,9 @@ _8_9_1.test.describe('Cluster Setup Tests', () => {
53
53
  }
54
54
  });
55
55
  (0, _8_9_1.test)('Create Agentic Orchestration Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, clusterSecretsPage, }, testInfo) => {
56
+ if (process.env.IS_PROD === 'true') {
57
+ _8_9_1.test.skip(true, 'Skipping test because not required on PROD test org');
58
+ }
56
59
  _8_9_1.test.slow();
57
60
  const clusterName = 'Agentic Orchestration Cluster';
58
61
  const apiClientName = 'Test_API_Client' + (await (0, _setup_1.generateRandomStringAsync)(3));
@@ -1,42 +1,108 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const c8Run_8_9_1 = require("../../fixtures/c8Run-8.9");
4
+ const test_1 = require("@playwright/test");
4
5
  const UtilitiesPage_1 = require("../../pages/c8Run-8.9/UtilitiesPage");
5
6
  const _setup_1 = require("../../test-setup.js");
6
7
  const apiHelpers_1 = require("../../utils/apiHelpers");
7
8
  const zeebeClient_1 = require("../../utils/zeebeClient");
8
9
  const sleep_1 = require("../../utils/sleep");
9
- if (process.env.RUN_AS_DOCKER_COMPOSE != 'true') {
10
- //MCP server is not configured with Docker
11
- c8Run_8_9_1.test.beforeAll(async () => {
12
- await (0, apiHelpers_1.validateMcpServerHealth)();
13
- await (0, zeebeClient_1.deploy)('./resources/mcp_server/mcp_server_list_tools.bpmn');
14
- await (0, zeebeClient_1.createInstances)('mcp_remote_client', 1, 1);
15
- await (0, sleep_1.sleep)(5000);
16
- });
10
+ c8Run_8_9_1.test.beforeAll(async () => {
11
+ if (process.env.MCP_SERVER_AVAILABLE !== 'true') {
12
+ return;
13
+ }
14
+ await (0, apiHelpers_1.validateMcpServerHealth)();
15
+ await (0, zeebeClient_1.deploy)(['./resources/mcp_server/mcp_remote_client_operations.bpmn']);
16
+ await (0, zeebeClient_1.createInstances)('mcp_remote_client', 1, 1);
17
+ await (0, sleep_1.sleep)(2000);
18
+ });
19
+ c8Run_8_9_1.test.describe('@tasklistV2 MCP Client connector tests', () => {
20
+ c8Run_8_9_1.test.skip(process.env.MCP_SERVER_AVAILABLE !== 'true', 'MCP server is only available on Linux and macOS CI runners');
17
21
  c8Run_8_9_1.test.beforeEach(async ({ page, operateLoginPage, operateHomePage }) => {
18
22
  await (0, UtilitiesPage_1.navigateToApp)(page, 'operate');
19
23
  await operateLoginPage.login('demo', 'demo');
20
24
  await operateHomePage.operateBannerIsVisible();
21
25
  });
22
- c8Run_8_9_1.test.describe('@tasklistV2 MCP Test Server User Flows', () => {
23
- c8Run_8_9_1.test.afterEach(async ({ page }, testInfo) => {
24
- await (0, _setup_1.captureScreenshot)(page, testInfo);
25
- await (0, _setup_1.captureFailureVideo)(page, testInfo);
26
- });
27
- (0, c8Run_8_9_1.test)('MCP server returns list of tools from process', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
28
- c8Run_8_9_1.test.slow();
29
- await c8Run_8_9_1.test.step('User can access the completed process on operate', async () => {
30
- await operateHomePage.clickProcessesTab();
31
- await operateProcessesPage.clickProcessCompletedCheckbox();
32
- await operateProcessesPage.clickProcessInstanceLink('mcp_remote_client');
33
- await operateProcessInstancePage.completedIconAssertion();
26
+ c8Run_8_9_1.test.afterEach(async ({ page }, testInfo) => {
27
+ await (0, _setup_1.captureScreenshot)(page, testInfo);
28
+ await (0, _setup_1.captureFailureVideo)(page, testInfo);
29
+ });
30
+ (0, c8Run_8_9_1.test)('As an user I can invoke the MCP Client connector and use all its operations', async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
31
+ c8Run_8_9_1.test.slow();
32
+ await c8Run_8_9_1.test.step('Navigate to completed process instance', async () => {
33
+ await operateHomePage.clickProcessesTab();
34
+ await operateProcessesPage.clickProcessCompletedCheckbox();
35
+ await operateProcessesPage.clickProcessInstanceLink('mcp_remote_client');
36
+ await operateProcessInstancePage.completedIconAssertion();
37
+ });
38
+ await c8Run_8_9_1.test.step('Verify listToolsResult variable contains tools', async () => {
39
+ await operateProcessInstancePage.verifyVariableJsonContent('listToolsResult', (value) => {
40
+ const data = value;
41
+ (0, test_1.expect)(data.toolDefinitions).toBeDefined();
42
+ (0, test_1.expect)(data.toolDefinitions.length).toBeGreaterThan(0);
43
+ const greetTool = data.toolDefinitions.find((tool) => tool.name === 'greet');
44
+ (0, test_1.expect)(greetTool).toBeDefined();
45
+ (0, test_1.expect)(greetTool?.description).toBe('Return a nice greeting message');
46
+ });
47
+ });
48
+ await c8Run_8_9_1.test.step('Verify callToolResult variable from greet tool call', async () => {
49
+ await operateProcessInstancePage.verifyVariableJsonContent('callToolResult', (value) => {
50
+ const data = value;
51
+ (0, test_1.expect)(data.name).toBe('greet');
52
+ (0, test_1.expect)(data.isError).toBe(false);
53
+ (0, test_1.expect)(data.content).toBeDefined();
54
+ (0, test_1.expect)(data.content[0].type).toBe('text');
55
+ (0, test_1.expect)(data.content[0].text).toContain('Hello, John');
56
+ });
57
+ });
58
+ await c8Run_8_9_1.test.step('Verify listResourcesResult variable contains resources', async () => {
59
+ await operateProcessInstancePage.verifyVariableJsonContent('listResourcesResult', (value) => {
60
+ const data = value;
61
+ (0, test_1.expect)(data.resources).toBeDefined();
62
+ (0, test_1.expect)(data.resources.length).toBeGreaterThan(0);
63
+ const jokesResource = data.resources.find((resource) => resource.uri === 'file://jokes-guide.md');
64
+ (0, test_1.expect)(jokesResource).toBeDefined();
65
+ (0, test_1.expect)(jokesResource?.name).toBe('Jokes Guideline');
66
+ (0, test_1.expect)(jokesResource?.mimeType).toBe('text/markdown');
34
67
  });
35
- await c8Run_8_9_1.test.step('Verify MCP tools are returned in the process result', async () => {
36
- await operateProcessInstancePage.assertProcessVariableContainsText('toolCallResult', 'add');
37
- await operateProcessInstancePage.assertProcessVariableContainsText('toolCallResult', 'greet');
38
- await operateProcessInstancePage.assertProcessVariableContainsText('toolCallResult', 'echo');
68
+ });
69
+ await c8Run_8_9_1.test.step('Verify listResourcesTemplateResult variable contains resource templates', async () => {
70
+ await operateProcessInstancePage.verifyVariableJsonContent('listResourcesTemplateResult', (value) => {
71
+ const data = value;
72
+ (0, test_1.expect)(data.resourceTemplates).toBeDefined();
73
+ (0, test_1.expect)(data.resourceTemplates).toEqual([]);
74
+ });
75
+ });
76
+ await c8Run_8_9_1.test.step('Verify readResourceResult variable from jokes-guide.md', async () => {
77
+ await operateProcessInstancePage.verifyVariableJsonContent('readResourceResult', (value) => {
78
+ const data = value;
79
+ (0, test_1.expect)(data.contents).toBeDefined();
80
+ (0, test_1.expect)(data.contents.length).toBeGreaterThan(0);
81
+ (0, test_1.expect)(data.contents[0].uri).toBe('file://jokes-guide.md');
82
+ (0, test_1.expect)(data.contents[0].mimeType).toBe('text/markdown');
83
+ (0, test_1.expect)(data.contents[0].text).toContain('How to Write Jokes');
84
+ });
85
+ });
86
+ await c8Run_8_9_1.test.step('Verify listPromptsResult variable contains prompts', async () => {
87
+ await operateProcessInstancePage.verifyVariableJsonContent('listPromptsResult', (value) => {
88
+ const data = value;
89
+ (0, test_1.expect)(data.promptDescriptions).toBeDefined();
90
+ (0, test_1.expect)(data.promptDescriptions.length).toBeGreaterThan(0);
91
+ const greetingPrompt = data.promptDescriptions.find((prompt) => prompt.name === 'get-greeting');
92
+ (0, test_1.expect)(greetingPrompt).toBeDefined();
93
+ (0, test_1.expect)(greetingPrompt?.description).toContain('personalized greeting');
94
+ });
95
+ });
96
+ await c8Run_8_9_1.test.step('Verify getPromptResult variable from get-greeting prompt', async () => {
97
+ await operateProcessInstancePage.verifyVariableJsonContent('getPromptResult', (value) => {
98
+ const data = value;
99
+ (0, test_1.expect)(data.description).toBe('Greeting Prompt');
100
+ (0, test_1.expect)(data.messages).toBeDefined();
101
+ (0, test_1.expect)(data.messages.length).toBeGreaterThan(0);
102
+ (0, test_1.expect)(data.messages[0].role).toBe('user');
103
+ (0, test_1.expect)(data.messages[0].content.text).toContain('John');
104
+ (0, test_1.expect)(data.messages[0].content.text).toContain('greet tool');
39
105
  });
40
106
  });
41
107
  });
42
- }
108
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.248",
3
+ "version": "0.0.250",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",