diff --git a/packages/backend/src/models/execution-step.js b/packages/backend/src/models/execution-step.js index b17343bb..2b3107dc 100644 --- a/packages/backend/src/models/execution-step.js +++ b/packages/backend/src/models/execution-step.js @@ -68,10 +68,19 @@ class ExecutionStep extends Base { } } + async updateExecutionStatus() { + const execution = await this.$relatedQuery('execution'); + + await execution.$query().patch({ + status: this.status === 'failure' ? 'failure' : 'success', + }); + } + async $afterInsert(queryContext) { await super.$afterInsert(queryContext); Telemetry.executionStepCreated(this); await this.increaseUsageCount(); + await this.updateExecutionStatus(); } } diff --git a/packages/backend/src/models/execution-step.test.js b/packages/backend/src/models/execution-step.test.js index 3148d6dd..b9ab8cab 100644 --- a/packages/backend/src/models/execution-step.test.js +++ b/packages/backend/src/models/execution-step.test.js @@ -149,4 +149,32 @@ describe('ExecutionStep model', () => { expect(increaseUsageCountSpy).toHaveBeenCalledOnce(); }); }); + + describe('updateExecutionStatus', () => { + it('should update execution status to failure when step status is failure', async () => { + const execution = await createExecution(); + const executionStep = await createExecutionStep({ + executionId: execution.id, + status: 'failure', + }); + + await executionStep.updateExecutionStatus(); + + const updatedExecution = await execution.$query(); + expect(updatedExecution.status).toBe('failure'); + }); + + it('should update execution status to success when step status is success', async () => { + const execution = await createExecution(); + const executionStep = await createExecutionStep({ + executionId: execution.id, + status: 'success', + }); + + await executionStep.updateExecutionStatus(); + + const updatedExecution = await execution.$query(); + expect(updatedExecution.status).toBe('success'); + }); + }); });