@camunda/e2e-test-suite 0.0.580 → 0.0.582

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.
@@ -29,7 +29,6 @@ declare class ModelerCreatePage {
29
29
  readonly cancelButton: Locator;
30
30
  readonly restConnectorOption: Locator;
31
31
  readonly marketPlaceButton: Locator;
32
- private readonly changeTypeSearchInput;
33
32
  readonly clientIdTextbox: Locator;
34
33
  readonly clientSecretTextbox: Locator;
35
34
  readonly rememberCredentialsCheckbox: Locator;
@@ -34,7 +34,6 @@ class ModelerCreatePage {
34
34
  cancelButton;
35
35
  restConnectorOption;
36
36
  marketPlaceButton;
37
- changeTypeSearchInput;
38
37
  clientIdTextbox;
39
38
  clientSecretTextbox;
40
39
  rememberCredentialsCheckbox;
@@ -149,13 +148,6 @@ class ModelerCreatePage {
149
148
  name: 'REST Outbound Connector',
150
149
  });
151
150
  this.marketPlaceButton = page.getByTitle('Browse Marketplace for more Connectors');
152
- // Search input inside the Change element panel — used to filter the connector list
153
- this.changeTypeSearchInput = page
154
- .locator('div')
155
- .filter({ hasText: /^Change element/ })
156
- .locator('input')
157
- .or(page.locator('[data-testid="search-field"] input'))
158
- .first();
159
151
  this.clientIdTextbox = page.getByLabel('Client ID');
160
152
  this.clientSecretTextbox = page.getByLabel('Client secret');
161
153
  this.rememberCredentialsCheckbox = page.getByText('Remember credentials');
@@ -609,15 +601,6 @@ class ModelerCreatePage {
609
601
  await this.cancelButton.click();
610
602
  }
611
603
  async searchAndClickRestConnector() {
612
- // Fill the Change element search box with 'REST' to surface the connector
613
- // regardless of scroll position. Wrapped in try/catch so a missing or
614
- // unfocusable search box doesn't abort the attempt.
615
- try {
616
- await this.changeTypeSearchInput.fill('REST', { timeout: 5000 });
617
- }
618
- catch {
619
- // Search box unavailable — connector may still be visible without filtering
620
- }
621
604
  await (0, test_1.expect)(this.restConnectorOption).toBeVisible({ timeout: 90000 });
622
605
  await this.restConnectorOption.click({ timeout: 90000 });
623
606
  }
@@ -49,7 +49,18 @@ class OperateProcessesPage {
49
49
  async checkCheckbox(checkbox) {
50
50
  await checkbox.waitFor({ state: 'attached', timeout: constants_1._1_SECOND_IN_MS * 10 });
51
51
  if (!(await checkbox.isChecked())) {
52
- await checkbox.check({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
52
+ // Carbon Design System checkboxes use a hidden input + label pattern.
53
+ // Clicking the label triggers the React onChange event; .check({force})
54
+ // does not fire synthetic events on hidden inputs.
55
+ const id = await checkbox.getAttribute('id');
56
+ if (id) {
57
+ await this.page
58
+ .locator(`label[for="${id}"]`)
59
+ .click({ timeout: constants_1._1_SECOND_IN_MS * 30 });
60
+ }
61
+ else {
62
+ await checkbox.check({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
63
+ }
53
64
  await (0, test_1.expect)(checkbox).toBeChecked({
54
65
  checked: true,
55
66
  timeout: constants_1._1_SECOND_IN_MS * 30,
@@ -59,7 +70,15 @@ class OperateProcessesPage {
59
70
  async uncheckCheckbox(checkbox) {
60
71
  await checkbox.waitFor({ state: 'attached', timeout: constants_1._1_SECOND_IN_MS * 10 });
61
72
  if (await checkbox.isChecked()) {
62
- await checkbox.uncheck({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
73
+ const id = await checkbox.getAttribute('id');
74
+ if (id) {
75
+ await this.page
76
+ .locator(`label[for="${id}"]`)
77
+ .click({ timeout: constants_1._1_SECOND_IN_MS * 30 });
78
+ }
79
+ else {
80
+ await checkbox.uncheck({ force: true, timeout: constants_1._1_SECOND_IN_MS * 30 });
81
+ }
63
82
  await (0, test_1.expect)(checkbox).toBeChecked({
64
83
  checked: false,
65
84
  timeout: constants_1._1_SECOND_IN_MS * 30,
@@ -0,0 +1,70 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
3
+ xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
4
+ xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
5
+ xmlns:zeebe="http://camunda.org/schema/zeebe/1.0"
6
+ xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
7
+ xmlns:modeler="http://camunda.org/schema/modeler/1.0"
8
+ id="Definitions_1"
9
+ targetNamespace="http://bpmn.io/schema/bpmn"
10
+ exporter="Camunda Web Modeler"
11
+ exporterVersion="1.0.0"
12
+ modeler:executionPlatform="Camunda Cloud"
13
+ modeler:executionPlatformVersion="8.10.0">
14
+ <bpmn:process id="aws_agentcore_code_interpreter" name="AWS AgentCore Code Interpreter" isExecutable="true">
15
+ <bpmn:startEvent id="StartEvent_1">
16
+ <bpmn:outgoing>Flow_1</bpmn:outgoing>
17
+ </bpmn:startEvent>
18
+ <bpmn:sequenceFlow id="Flow_1" sourceRef="StartEvent_1" targetRef="CodeInterpreterTask" />
19
+ <bpmn:serviceTask id="CodeInterpreterTask" name="Execute Python Code"
20
+ zeebe:modelerTemplate="io.camunda.connectors.aws.bedrock.codeinterpreter.v1"
21
+ zeebe:modelerTemplateVersion="1">
22
+ <bpmn:extensionElements>
23
+ <zeebe:taskDefinition type="io.camunda:aws-bedrock-codeinterpreter:1" retries="3" />
24
+ <zeebe:ioMapping>
25
+ <zeebe:input source="credentials" target="authentication.type" />
26
+ <zeebe:input source="{{secrets.BEDROCK_CI_AWS_ACCESS_KEY}}" target="authentication.accessKey" />
27
+ <zeebe:input source="{{secrets.BEDROCK_CI_AWS_SECRET_KEY}}" target="authentication.secretKey" />
28
+ <zeebe:input source="{{secrets.BEDROCK_CI_AWS_REGION}}" target="configuration.region" />
29
+ <zeebe:input source="python" target="input.language" />
30
+ <zeebe:input source="print('Hello from AgentCore Code Interpreter!')" target="input.code" />
31
+ </zeebe:ioMapping>
32
+ <zeebe:taskHeaders>
33
+ <zeebe:header key="elementTemplateVersion" value="1" />
34
+ <zeebe:header key="elementTemplateId" value="io.camunda.connectors.aws.bedrock.codeinterpreter.v1" />
35
+ <zeebe:header key="resultVariable" value="codeInterpreterResult" />
36
+ <zeebe:header key="resultExpression" value="={stdout: stdout, exitCode: exitCode}" />
37
+ <zeebe:header key="retryBackoff" value="PT0S" />
38
+ </zeebe:taskHeaders>
39
+ </bpmn:extensionElements>
40
+ <bpmn:incoming>Flow_1</bpmn:incoming>
41
+ <bpmn:outgoing>Flow_2</bpmn:outgoing>
42
+ </bpmn:serviceTask>
43
+ <bpmn:sequenceFlow id="Flow_2" sourceRef="CodeInterpreterTask" targetRef="EndEvent_1" />
44
+ <bpmn:endEvent id="EndEvent_1">
45
+ <bpmn:incoming>Flow_2</bpmn:incoming>
46
+ </bpmn:endEvent>
47
+ </bpmn:process>
48
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
49
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="aws_agentcore_code_interpreter">
50
+ <bpmndi:BPMNShape id="StartEvent_1_di" bpmnElement="StartEvent_1">
51
+ <dc:Bounds x="152" y="82" width="36" height="36" />
52
+ </bpmndi:BPMNShape>
53
+ <bpmndi:BPMNShape id="CodeInterpreterTask_di" bpmnElement="CodeInterpreterTask">
54
+ <dc:Bounds x="240" y="60" width="100" height="80" />
55
+ <bpmndi:BPMNLabel />
56
+ </bpmndi:BPMNShape>
57
+ <bpmndi:BPMNShape id="EndEvent_1_di" bpmnElement="EndEvent_1">
58
+ <dc:Bounds x="392" y="82" width="36" height="36" />
59
+ </bpmndi:BPMNShape>
60
+ <bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1">
61
+ <di:waypoint x="188" y="100" />
62
+ <di:waypoint x="240" y="100" />
63
+ </bpmndi:BPMNEdge>
64
+ <bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2">
65
+ <di:waypoint x="340" y="100" />
66
+ <di:waypoint x="392" y="100" />
67
+ </bpmndi:BPMNEdge>
68
+ </bpmndi:BPMNPlane>
69
+ </bpmndi:BPMNDiagram>
70
+ </bpmn:definitions>
@@ -1,5 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * AWS Connectors User Flows
5
+ *
6
+ * Happy-path E2E tests for AWS Bedrock connector integrations running on the
7
+ * Test Cluster (SaaS). Each test deploys a BPMN process, starts an instance,
8
+ * and asserts that the connector completed successfully via Operate.
9
+ *
10
+ * ## AWS IAM Requirements
11
+ *
12
+ * The IAM user configured via `BEDROCK_CI_AWS_ACCESS_KEY` /
13
+ * `BEDROCK_CI_AWS_SECRET_KEY` must have the following policies. Missing
14
+ * actions surface as connector incidents with `AccessDeniedException` in the
15
+ * Operate variables panel.
16
+ *
17
+ * ### AgentCore Code Interpreter (`io.camunda:aws-bedrock-codeinterpreter:1`)
18
+ * ```json
19
+ * {
20
+ * "Action": [
21
+ * "bedrock-agentcore:StartCodeInterpreterSession",
22
+ * "bedrock-agentcore:InvokeCodeInterpreter",
23
+ * "bedrock-agentcore:StopCodeInterpreterSession"
24
+ * ],
25
+ * "Resource": "*"
26
+ * }
27
+ * ```
28
+ * NOTE: `CreateCodeInterpreterSession` and `ExecuteCode` are NOT valid IAM
29
+ * actions — AWS will reject the policy if they are included.
30
+ *
31
+ * ### AgentCore Runtime (`io.camunda:aws-bedrock-agentcore-runtime:1`)
32
+ * Requires IAM access to the specific agent runtime ARN set via
33
+ * `AGENTCORE_AGENT_RUNTIME_ARN`.
34
+ *
35
+ * ### AgentCore Long-Term Memory (`io.camunda:aws-bedrock-agentcore-lt-memory:1`)
36
+ * Requires IAM access to the memory resource ARN set via
37
+ * `AGENTCORE_LTM_MEMORY_ID`.
38
+ *
39
+ * ### Bedrock Knowledge Base (`io.camunda:aws-bedrock-knowledgebase:1`)
40
+ * Requires `bedrock:Retrieve` on the knowledge base ARN set via
41
+ * `BEDROCK_KB_KNOWLEDGE_BASE_ID`.
42
+ *
43
+ */
3
44
  const test_1 = require("@playwright/test");
4
45
  const _8_10_1 = require("../../fixtures/8.10");
5
46
  const UtilitiesPage_1 = require("../../pages/8.10/UtilitiesPage");
@@ -86,4 +127,28 @@ _8_10_1.test.describe('AWS Connectors User Flows', () => {
86
127
  await (0, test_1.expect)(operateProcessInstancePage.connectorResultVariableName('agentResponse')).toBeVisible({ timeout: 30000 });
87
128
  });
88
129
  });
130
+ // IAM: bedrock-agentcore:StartCodeInterpreterSession,
131
+ // bedrock-agentcore:InvokeCodeInterpreter,
132
+ // bedrock-agentcore:StopCodeInterpreterSession on Resource: *
133
+ (0, _8_10_1.test)('AWS AgentCore Code Interpreter - Execute Python code and receive stdout', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
134
+ _8_10_1.test.slow();
135
+ const processKey = await (0, apiHelpers_1.deployProcess)('./resources/connectors/aws/agentcore-code-interpreter.bpmn', authToken);
136
+ if (processKey == null) {
137
+ throw new Error('Failed to deploy AgentCore Code Interpreter process');
138
+ }
139
+ const instanceKey = await (0, apiHelpers_1.createProcessInstance)(String(processKey), authToken);
140
+ await _8_10_1.test.step('Process completes and stdout output variable is present', async () => {
141
+ await (0, sleep_1.sleep)(15000);
142
+ await operateHomePage.clickProcessesTab();
143
+ await operateProcessesPage.clickProcessCompletedCheckbox();
144
+ await operateProcessesPage.applyMoreFilters('Process Instance Key(s)', String(instanceKey));
145
+ await operateProcessesPage.clickProcessInstanceLink('AWS AgentCore Code Interpreter');
146
+ await operateProcessInstancePage.assertProcessCompleteStatusWithRetry();
147
+ await (0, test_1.expect)(operateProcessInstancePage.connectorResultVariableName('stdout')).toBeVisible({ timeout: 30000 });
148
+ // Confirms the Python code executed end-to-end inside AWS AgentCore and
149
+ // the result expression `={stdout: stdout, exitCode: exitCode}` was
150
+ // evaluated — stdout is the key observable for this connector.
151
+ await operateProcessInstancePage.assertProcessVariableContainsText('stdout', 'Hello from AgentCore Code Interpreter!');
152
+ });
153
+ });
89
154
  });
@@ -44,6 +44,7 @@ _8_10_1.test.describe('Cluster Setup Tests', () => {
44
44
  await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.bedrockKbSecretsValues);
45
45
  await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.agentcoreSecretsValues);
46
46
  await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.agentcoreLtmSecretsValues);
47
+ await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.bedrockCodeInterpreterSecretsValues);
47
48
  }
48
49
  });
49
50
  (0, _8_10_1.test)('Create Agentic Orchestration Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, clusterSecretsPage, }, testInfo) => {
@@ -26,6 +26,10 @@ export declare const agentcoreLtmSecretsValues: {
26
26
  name: string;
27
27
  value: string;
28
28
  }[];
29
+ export declare const bedrockCodeInterpreterSecretsValues: {
30
+ name: string;
31
+ value: string;
32
+ }[];
29
33
  export declare const connectorSecretsValues: {
30
34
  name: string;
31
35
  value: string;
@@ -47,6 +51,10 @@ export declare const allConnectorSecrets: {
47
51
  name: string;
48
52
  value: string;
49
53
  }[];
54
+ BedrockCodeInterpreter: {
55
+ name: string;
56
+ value: string;
57
+ }[];
50
58
  GCP: {
51
59
  name: string;
52
60
  value: string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.allConnectorSecrets = exports.connectorSecretsValues = exports.agentcoreLtmSecretsValues = exports.agentcoreSecretsValues = exports.bedrockKbSecretsValues = exports.azureSecretsValues = exports.gcpSecretsValues = exports.openAiSecretsValues = exports.awsSecretsValues = void 0;
3
+ exports.allConnectorSecrets = exports.connectorSecretsValues = exports.bedrockCodeInterpreterSecretsValues = exports.agentcoreLtmSecretsValues = exports.agentcoreSecretsValues = exports.bedrockKbSecretsValues = exports.azureSecretsValues = exports.gcpSecretsValues = exports.openAiSecretsValues = exports.awsSecretsValues = void 0;
4
4
  exports.awsSecretsValues = [
5
5
  { name: 'IDP_AWS_REGION', value: process.env.IDP_AWS_REGION },
6
6
  { name: 'IDP_AWS_BUCKET_NAME', value: process.env.IDP_AWS_BUCKET_NAME },
@@ -179,6 +179,20 @@ exports.agentcoreLtmSecretsValues = [
179
179
  value: process.env.AGENTCORE_LTM_NAMESPACE,
180
180
  },
181
181
  ];
182
+ exports.bedrockCodeInterpreterSecretsValues = [
183
+ {
184
+ name: 'BEDROCK_CI_AWS_ACCESS_KEY',
185
+ value: process.env.BEDROCK_CI_AWS_ACCESS_KEY,
186
+ },
187
+ {
188
+ name: 'BEDROCK_CI_AWS_SECRET_KEY',
189
+ value: process.env.BEDROCK_CI_AWS_SECRET_KEY,
190
+ },
191
+ {
192
+ name: 'BEDROCK_CI_AWS_REGION',
193
+ value: process.env.BEDROCK_CI_AWS_REGION,
194
+ },
195
+ ];
182
196
  exports.connectorSecretsValues = [
183
197
  {
184
198
  name: 'endpoint_url',
@@ -192,6 +206,7 @@ exports.allConnectorSecrets = {
192
206
  BedrockKB: exports.bedrockKbSecretsValues,
193
207
  AgentCore: exports.agentcoreSecretsValues,
194
208
  AgentCoreLTM: exports.agentcoreLtmSecretsValues,
209
+ BedrockCodeInterpreter: exports.bedrockCodeInterpreterSecretsValues,
195
210
  GCP: exports.gcpSecretsValues,
196
211
  Azure: [...exports.azureSecretsValues, ...exports.openAiSecretsValues],
197
212
  Connectors: exports.connectorSecretsValues,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.580",
3
+ "version": "0.0.582",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,70 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
3
+ xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
4
+ xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
5
+ xmlns:zeebe="http://camunda.org/schema/zeebe/1.0"
6
+ xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
7
+ xmlns:modeler="http://camunda.org/schema/modeler/1.0"
8
+ id="Definitions_1"
9
+ targetNamespace="http://bpmn.io/schema/bpmn"
10
+ exporter="Camunda Web Modeler"
11
+ exporterVersion="1.0.0"
12
+ modeler:executionPlatform="Camunda Cloud"
13
+ modeler:executionPlatformVersion="8.10.0">
14
+ <bpmn:process id="aws_agentcore_code_interpreter" name="AWS AgentCore Code Interpreter" isExecutable="true">
15
+ <bpmn:startEvent id="StartEvent_1">
16
+ <bpmn:outgoing>Flow_1</bpmn:outgoing>
17
+ </bpmn:startEvent>
18
+ <bpmn:sequenceFlow id="Flow_1" sourceRef="StartEvent_1" targetRef="CodeInterpreterTask" />
19
+ <bpmn:serviceTask id="CodeInterpreterTask" name="Execute Python Code"
20
+ zeebe:modelerTemplate="io.camunda.connectors.aws.bedrock.codeinterpreter.v1"
21
+ zeebe:modelerTemplateVersion="1">
22
+ <bpmn:extensionElements>
23
+ <zeebe:taskDefinition type="io.camunda:aws-bedrock-codeinterpreter:1" retries="3" />
24
+ <zeebe:ioMapping>
25
+ <zeebe:input source="credentials" target="authentication.type" />
26
+ <zeebe:input source="{{secrets.BEDROCK_CI_AWS_ACCESS_KEY}}" target="authentication.accessKey" />
27
+ <zeebe:input source="{{secrets.BEDROCK_CI_AWS_SECRET_KEY}}" target="authentication.secretKey" />
28
+ <zeebe:input source="{{secrets.BEDROCK_CI_AWS_REGION}}" target="configuration.region" />
29
+ <zeebe:input source="python" target="input.language" />
30
+ <zeebe:input source="print('Hello from AgentCore Code Interpreter!')" target="input.code" />
31
+ </zeebe:ioMapping>
32
+ <zeebe:taskHeaders>
33
+ <zeebe:header key="elementTemplateVersion" value="1" />
34
+ <zeebe:header key="elementTemplateId" value="io.camunda.connectors.aws.bedrock.codeinterpreter.v1" />
35
+ <zeebe:header key="resultVariable" value="codeInterpreterResult" />
36
+ <zeebe:header key="resultExpression" value="={stdout: stdout, exitCode: exitCode}" />
37
+ <zeebe:header key="retryBackoff" value="PT0S" />
38
+ </zeebe:taskHeaders>
39
+ </bpmn:extensionElements>
40
+ <bpmn:incoming>Flow_1</bpmn:incoming>
41
+ <bpmn:outgoing>Flow_2</bpmn:outgoing>
42
+ </bpmn:serviceTask>
43
+ <bpmn:sequenceFlow id="Flow_2" sourceRef="CodeInterpreterTask" targetRef="EndEvent_1" />
44
+ <bpmn:endEvent id="EndEvent_1">
45
+ <bpmn:incoming>Flow_2</bpmn:incoming>
46
+ </bpmn:endEvent>
47
+ </bpmn:process>
48
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
49
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="aws_agentcore_code_interpreter">
50
+ <bpmndi:BPMNShape id="StartEvent_1_di" bpmnElement="StartEvent_1">
51
+ <dc:Bounds x="152" y="82" width="36" height="36" />
52
+ </bpmndi:BPMNShape>
53
+ <bpmndi:BPMNShape id="CodeInterpreterTask_di" bpmnElement="CodeInterpreterTask">
54
+ <dc:Bounds x="240" y="60" width="100" height="80" />
55
+ <bpmndi:BPMNLabel />
56
+ </bpmndi:BPMNShape>
57
+ <bpmndi:BPMNShape id="EndEvent_1_di" bpmnElement="EndEvent_1">
58
+ <dc:Bounds x="392" y="82" width="36" height="36" />
59
+ </bpmndi:BPMNShape>
60
+ <bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1">
61
+ <di:waypoint x="188" y="100" />
62
+ <di:waypoint x="240" y="100" />
63
+ </bpmndi:BPMNEdge>
64
+ <bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2">
65
+ <di:waypoint x="340" y="100" />
66
+ <di:waypoint x="392" y="100" />
67
+ </bpmndi:BPMNEdge>
68
+ </bpmndi:BPMNPlane>
69
+ </bpmndi:BPMNDiagram>
70
+ </bpmn:definitions>