@camunda/e2e-test-suite 0.0.456 → 0.0.458

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.
@@ -15,7 +15,7 @@ class ClientCredentialsDetailsPage {
15
15
  }
16
16
  async isOpen(clientName) {
17
17
  await (0, test_1.expect)(this.clientNameHeading(clientName)).toBeVisible({
18
- timeout: 30000,
18
+ timeout: 60000,
19
19
  });
20
20
  }
21
21
  async getOperateUrl() {
@@ -137,7 +137,7 @@ class ClusterDetailsPage {
137
137
  this.orchestrationClusterCheckbox = page
138
138
  .locator('label')
139
139
  .filter({ hasText: /^Orchestration Cluster API$/ });
140
- this.clientCredentialsLink = (clientCredentials) => page.getByRole('cell', { name: clientCredentials });
140
+ this.clientCredentialsLink = (clientCredentials) => page.getByRole('cell', { name: clientCredentials }).locator('a');
141
141
  this.reviewUpdateButton = page.getByRole('button', { name: 'Review Update' });
142
142
  this.updateAvailableDialog = page
143
143
  .locator('.cds--modal-container')
@@ -92,7 +92,7 @@ class TaskDetailsPage {
92
92
  this.tagList = page.getByPlaceholder('Search');
93
93
  this.detailsInfo = page.getByTestId('details-info');
94
94
  this.textInput = page.locator('[class="fjs-input"]');
95
- this.taskCompletedBanner = this.page.getByText('Task completed');
95
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
96
96
  this.assignedToMeText = page
97
97
  .getByTestId('assignee')
98
98
  .getByText('Assigned to me');
@@ -93,7 +93,7 @@ class TaskDetailsPage {
93
93
  this.detailsInfo = page.getByTestId('details-info');
94
94
  this.textInput = page.locator('[class="fjs-input"]');
95
95
  this.textInput = page.locator('[class="fjs-input"]');
96
- this.taskCompletedBanner = this.page.getByText('Task completed');
96
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
97
97
  this.assignedToMeText = page
98
98
  .getByTestId('assignee')
99
99
  .getByText('Assigned to me');
@@ -94,7 +94,7 @@ class TaskDetailsPage {
94
94
  this.detailsInfo = page.getByTestId('details-info');
95
95
  this.textInput = page.locator('[class="fjs-input"]');
96
96
  this.textInput = page.locator('[class="fjs-input"]');
97
- this.taskCompletedBanner = this.page.getByText('Task completed');
97
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
98
98
  this.assignedToMeText = page
99
99
  .getByTestId('assignee')
100
100
  .getByText('Assigned to me');
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertReportWithRefreshes = exports.createReportForProcess = void 0;
4
4
  const UtilitiesPage_1 = require("../SM-8.8/UtilitiesPage");
5
5
  const createReportForProcess = async (page, optimizeCollectionsPage, optimizeReportPage, processName) => {
6
- const TOTAL_TIMEOUT_MS = 3 * 60 * 1000; // 3 minutes
6
+ const TOTAL_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes (OpenSearch ingestion can be slow)
7
7
  const startTime = Date.now();
8
8
  let attempt = 0;
9
9
  let found = false;
@@ -38,7 +38,7 @@ const createReportForProcess = async (page, optimizeCollectionsPage, optimizeRep
38
38
  };
39
39
  exports.createReportForProcess = createReportForProcess;
40
40
  const assertReportWithRefreshes = async (page, optimizeHomePage, optimizeCollectionsPage, optimizeReportPage, reportName, locator, text) => {
41
- const TOTAL_TIMEOUT_MS = 3 * 60 * 1000; // 3 minutes
41
+ const TOTAL_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes (OpenSearch ingestion can be slow)
42
42
  const startTime = Date.now();
43
43
  let attempt = 0;
44
44
  let found = false;
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -91,7 +91,7 @@ class TaskDetailsPage {
91
91
  this.tagList = page.getByPlaceholder('Search');
92
92
  this.detailsInfo = page.getByTestId('details-info');
93
93
  this.textInput = page.locator('[class="fjs-input"]');
94
- this.taskCompletedBanner = this.page.getByText('Task completed');
94
+ this.taskCompletedBanner = this.page.getByText('Task completed').first();
95
95
  this.assignedToMeText = this.page
96
96
  .getByTestId('assignee')
97
97
  .getByText('Assigned to me');
@@ -45,4 +45,21 @@ _8_10_1.test.describe('AWS Connectors User Flows', () => {
45
45
  await operateProcessInstancePage.assertProcessVariableContainsText('retrievedChunks', 'sourceUri');
46
46
  });
47
47
  });
48
+ (0, _8_10_1.test)('AWS AgentCore Runtime - Invoke deployed agent and receive response', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
49
+ _8_10_1.test.slow();
50
+ const processKey = await (0, apiHelpers_1.deployProcess)('./resources/connectors/aws/agentcore-runtime.bpmn', authToken);
51
+ if (processKey == null) {
52
+ throw new Error('Failed to deploy AgentCore Runtime process');
53
+ }
54
+ const instanceKey = await (0, apiHelpers_1.createProcessInstance)(String(processKey), authToken);
55
+ await _8_10_1.test.step('Process completes and agentResponse output variable is present', async () => {
56
+ await (0, sleep_1.sleep)(15000);
57
+ await operateHomePage.clickProcessesTab();
58
+ await operateProcessesPage.clickProcessCompletedCheckbox();
59
+ await operateProcessesPage.applyMoreFilters('Process Instance Key(s)', String(instanceKey));
60
+ await operateProcessesPage.clickProcessInstanceLink('AWS AgentCore Runtime');
61
+ await operateProcessInstancePage.assertProcessCompleteStatusWithRetry();
62
+ await (0, test_1.expect)(operateProcessInstancePage.connectorResultVariableName('agentResponse')).toBeVisible({ timeout: 30000 });
63
+ });
64
+ });
48
65
  });
@@ -11,11 +11,15 @@ _8_10_1.test.describe.configure({ mode: 'parallel' });
11
11
  _8_10_1.test.describe('Operate access requires authentication @tasklistV2', () => {
12
12
  let clientName;
13
13
  const clusterName = 'Test Cluster';
14
- _8_10_1.test.afterEach(async ({ page, clusterDetailsPage }, testInfo) => {
14
+ _8_10_1.test.afterEach(async ({ page, homePage, clusterPage, clusterDetailsPage }, testInfo) => {
15
15
  await (0, _setup_1.captureScreenshot)(page, testInfo);
16
16
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
17
- await clusterDetailsPage.clickAPITab();
18
- await clusterDetailsPage.deleteAPIClientsIfExist(clientName);
17
+ if (clientName) {
18
+ await homePage.clickClusters();
19
+ await clusterPage.clickClusterLink(clusterName);
20
+ await clusterDetailsPage.clickAPITab();
21
+ await clusterDetailsPage.deleteAPIClientsIfExist(clientName);
22
+ }
19
23
  });
20
24
  _8_10_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
21
25
  await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
@@ -41,6 +41,7 @@ _8_10_1.test.describe('Cluster Setup Tests', () => {
41
41
  await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.azureSecretsValues);
42
42
  await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.connectorSecretsValues);
43
43
  await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.bedrockKbSecretsValues);
44
+ await clusterSecretsPage.createSetOfSecrets(clusterName, connectorSecrets_1.agentcoreSecretsValues);
44
45
  }
45
46
  });
46
47
  (0, _8_10_1.test)('Create AWS Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, clusterSecretsPage, }, testInfo) => {
@@ -18,6 +18,10 @@ export declare const bedrockKbSecretsValues: {
18
18
  name: string;
19
19
  value: string;
20
20
  }[];
21
+ export declare const agentcoreSecretsValues: {
22
+ name: string;
23
+ value: string;
24
+ }[];
21
25
  export declare const connectorSecretsValues: {
22
26
  name: string;
23
27
  value: string;
@@ -31,6 +35,10 @@ export declare const allConnectorSecrets: {
31
35
  name: string;
32
36
  value: string;
33
37
  }[];
38
+ AgentCore: {
39
+ name: string;
40
+ value: string;
41
+ }[];
34
42
  GCP: {
35
43
  name: string;
36
44
  value: string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.allConnectorSecrets = exports.connectorSecretsValues = exports.bedrockKbSecretsValues = exports.azureSecretsValues = exports.gcpSecretsValues = exports.openAiSecretsValues = exports.awsSecretsValues = void 0;
3
+ exports.allConnectorSecrets = exports.connectorSecretsValues = 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 },
@@ -139,6 +139,24 @@ exports.bedrockKbSecretsValues = [
139
139
  value: process.env.BEDROCK_KB_KNOWLEDGE_BASE_ID,
140
140
  },
141
141
  ];
142
+ exports.agentcoreSecretsValues = [
143
+ {
144
+ name: 'AGENTCORE_AWS_ACCESS_KEY',
145
+ value: process.env.AGENTCORE_AWS_ACCESS_KEY,
146
+ },
147
+ {
148
+ name: 'AGENTCORE_AWS_SECRET_KEY',
149
+ value: process.env.AGENTCORE_AWS_SECRET_KEY,
150
+ },
151
+ {
152
+ name: 'AGENTCORE_AWS_REGION',
153
+ value: process.env.AGENTCORE_AWS_REGION,
154
+ },
155
+ {
156
+ name: 'AGENTCORE_AGENT_RUNTIME_ARN',
157
+ value: process.env.AGENTCORE_AGENT_RUNTIME_ARN,
158
+ },
159
+ ];
142
160
  exports.connectorSecretsValues = [
143
161
  {
144
162
  name: 'endpoint_url',
@@ -150,6 +168,7 @@ exports.connectorSecretsValues = [
150
168
  exports.allConnectorSecrets = {
151
169
  AWS: exports.awsSecretsValues,
152
170
  BedrockKB: exports.bedrockKbSecretsValues,
171
+ AgentCore: exports.agentcoreSecretsValues,
153
172
  GCP: exports.gcpSecretsValues,
154
173
  Azure: [...exports.azureSecretsValues, ...exports.openAiSecretsValues],
155
174
  Connectors: exports.connectorSecretsValues,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.456",
3
+ "version": "0.0.458",
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_runtime" name="AWS AgentCore Runtime" 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="AgentCoreTask" />
19
+ <bpmn:serviceTask id="AgentCoreTask" name="Invoke Agent Runtime"
20
+ zeebe:modelerTemplate="io.camunda.connectors.aws.bedrock.agentcore.runtime.v1"
21
+ zeebe:modelerTemplateVersion="1">
22
+ <bpmn:extensionElements>
23
+ <zeebe:taskDefinition type="io.camunda:aws-bedrock-agentcore-runtime:1" retries="3" />
24
+ <zeebe:ioMapping>
25
+ <zeebe:input source="credentials" target="authentication.type" />
26
+ <zeebe:input source="{{secrets.AGENTCORE_AWS_ACCESS_KEY}}" target="authentication.accessKey" />
27
+ <zeebe:input source="{{secrets.AGENTCORE_AWS_SECRET_KEY}}" target="authentication.secretKey" />
28
+ <zeebe:input source="{{secrets.AGENTCORE_AWS_REGION}}" target="configuration.region" />
29
+ <zeebe:input source="{{secrets.AGENTCORE_AGENT_RUNTIME_ARN}}" target="input.agentRuntimeArn" />
30
+ <zeebe:input source="={inputText: &quot;What is the capital of France?&quot;}" target="input.payload" />
31
+ </zeebe:ioMapping>
32
+ <zeebe:taskHeaders>
33
+ <zeebe:header key="elementTemplateVersion" value="1" />
34
+ <zeebe:header key="elementTemplateId" value="io.camunda.connectors.aws.bedrock.agentcore.runtime.v1" />
35
+ <zeebe:header key="resultVariable" value="agentCoreResult" />
36
+ <zeebe:header key="resultExpression" value="={agentResponse: response, sessionId: sessionId}" />
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="AgentCoreTask" 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_runtime">
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="AgentCoreTask_di" bpmnElement="AgentCoreTask">
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>