diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e921e26a..619436c4 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -31,11 +31,11 @@ jobs: - name: Run Tests run: yarn test --ci --reporters=default --reporters=jest-junit env: - CONDUCTOR_SERVER_URL: ${{ secrets.SERVER_URL }} - CONDUCTOR_AUTH_KEY: ${{ secrets.KEY_ID }} - CONDUCTOR_AUTH_SECRET: ${{ secrets.KEY_SECRET }} + CONDUCTOR_SERVER_URL: ${{ vars.SERVER_URL }} + CONDUCTOR_AUTH_KEY: ${{ secrets.AUTH_KEY }} + CONDUCTOR_AUTH_SECRET: ${{ secrets.AUTH_SECRET }} - name: Publish Test Results - if: always() + if: always() uses: dorny/test-reporter@v2 with: name: Test report diff --git a/src/common/types.ts b/src/common/types.ts index 2fc488e5..5941bb50 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -119,6 +119,7 @@ export interface HttpTaskDef extends CommonTaskDef { http_request: HttpInputParameters; }; type: TaskType.HTTP; + asyncComplete?: boolean; } export interface InlineTaskInputParameters { diff --git a/src/core/__test__/executor.test.ts b/src/core/__test__/executor.test.ts index 650cc10e..44ac48dc 100644 --- a/src/core/__test__/executor.test.ts +++ b/src/core/__test__/executor.test.ts @@ -7,6 +7,8 @@ import {MetadataClient} from "../metadataClient"; import {TestUtil} from "./utils/test-util"; import {TaskResultStatusEnum} from "../../common/open-api/models/TaskResultStatusEnum"; import {SignalResponse} from "../../common/open-api/models/SignalResponse"; +import { httpTask } from "../sdk"; +import { TaskClient } from "../taskClient"; describe("Executor", () => { const clientPromise = orkesConductorClient({ useEnvVars: true }); @@ -111,6 +113,38 @@ describe("Executor", () => { const executionDetails = await executor.getWorkflow(executionId!, true); expect(executionDetails.idempotencyKey).toEqual(idempotencyKey); }); + + test("Should run workflow with http task with asyncComplete true", async () => { + const client = await clientPromise; + const executor = new WorkflowExecutor(client); + + await executor.registerWorkflow(true, { + name: "test_jssdk_workflow_with_http_task_with_asyncComplete_true", + version: 1, + ownerEmail: "developers@orkes.io", + tasks: [httpTask("test_jssdk_http_task_with_asyncComplete_true", { uri: "http://www.yahoo.com", method: "GET" }, true)], + inputParameters: [], + outputParameters: {}, + timeoutSeconds: 300, + }); + + const executionId = await executor.startWorkflow({ + name: "test_jssdk_workflow_with_http_task_with_asyncComplete_true", + input: {}, + version: 1, + }); + + const workflowStatusBefore = await TestUtil.waitForWorkflowStatus(executor, executionId, "RUNNING"); + + expect(["IN_PROGRESS", "SCHEDULED"]).toContain(workflowStatusBefore.tasks?.[0]?.status); + + const taskClient = new TaskClient(client); + taskClient.updateTaskResult(executionId, "test_jssdk_http_task_with_asyncComplete_true", "COMPLETED", { hello: "From manuall api call updating task result" }); + + const workflowStatusAfter = await TestUtil.waitForWorkflowStatus(executor, executionId, "COMPLETED"); + + expect(workflowStatusAfter.tasks?.[0]?.status).toEqual("COMPLETED"); + }); }); describe("Execute with Return Strategy and Consistency", () => { diff --git a/src/core/generators/HttpTask.ts b/src/core/generators/HttpTask.ts index cf52cee0..b6ba9249 100644 --- a/src/core/generators/HttpTask.ts +++ b/src/core/generators/HttpTask.ts @@ -18,6 +18,7 @@ export const generateHTTPTask = ( method: "GET", }, }, + asyncComplete: false, ...overrides, type: TaskType.HTTP, }); diff --git a/src/core/sdk/__test__/factory.test.ts b/src/core/sdk/__test__/factory.test.ts index 88470385..175cf027 100644 --- a/src/core/sdk/__test__/factory.test.ts +++ b/src/core/sdk/__test__/factory.test.ts @@ -150,6 +150,7 @@ describe("httpTask", () => { method: "GET", }); expect(httpTaskObj).toEqual({ + asyncComplete: false, name: "httpTask", taskReferenceName: "httpTask", inputParameters: { diff --git a/src/core/sdk/http.ts b/src/core/sdk/http.ts index 54525e8d..592f7008 100644 --- a/src/core/sdk/http.ts +++ b/src/core/sdk/http.ts @@ -6,12 +6,14 @@ import { export const httpTask = ( taskReferenceName: string, - inputParameters: HttpInputParameters + inputParameters: HttpInputParameters, + asyncComplete = false ): HttpTaskDef => ({ name: taskReferenceName, taskReferenceName, inputParameters: { http_request: inputParameters, }, + asyncComplete, type: TaskType.HTTP, });