@camunda/e2e-test-suite 0.0.248 → 0.0.249
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
|
-
-
|
|
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
|
|
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
|
|
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
|
-
|
|
390
|
+
### **Naming Pattern:**
|
|
337
391
|
|
|
338
|
-
|
|
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
|
-
-
|
|
347
|
-
- `
|
|
348
|
-
- `
|
|
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
|
-
- **
|
|
352
|
-
- `Linux`, `Connectors`, `OpenSearch`, `No Tests` etc.
|
|
400
|
+
- **Trigger:**
|
|
353
401
|
|
|
354
|
-
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
|
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
|
|
370
|
-
|
|
371
|
-
| `camunda-platform-8.9-latest`
|
|
372
|
-
| `camunda-platform-8.8-latest`
|
|
373
|
-
| `camunda-platform-8.7-latest`
|
|
374
|
-
| `camunda-platform-8.6-latest`
|
|
375
|
-
| `camunda-platform-8.9`
|
|
376
|
-
| `camunda-platform-8.8`
|
|
377
|
-
| `camunda-platform-8.7`
|
|
378
|
-
| `camunda-platform-8.6`
|
|
379
|
-
| `all-latest`
|
|
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;
|
|
@@ -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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
await
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
+
});
|