diff --git a/ee/app/graphql/resolvers/ai/duo_workflows/workflows_resolver.rb b/ee/app/graphql/resolvers/ai/duo_workflows/workflows_resolver.rb index f76f136ee9eaba43f92ca04b7030662c7ce06a00..e710063a46b322d519253127408bf261097afcad 100644 --- a/ee/app/graphql/resolvers/ai/duo_workflows/workflows_resolver.rb +++ b/ee/app/graphql/resolvers/ai/duo_workflows/workflows_resolver.rb @@ -51,7 +51,7 @@ def resolve(**args) workflows = workflows.for_project(object).from_pipeline else - workflows = workflows.for_user(current_user.id) + workflows = workflows.for_user(current_user.id).not_archived if args[:project_path].present? project = Project.find_by_full_path(args[:project_path]) diff --git a/ee/app/models/ai/duo_workflows/workflow.rb b/ee/app/models/ai/duo_workflows/workflow.rb index 9c0cf8a6830b63ed07262100e4e7afb3ccc56913..7aa89210f01c8ea14508143bfcab36c978d50bea 100644 --- a/ee/app/models/ai/duo_workflows/workflow.rb +++ b/ee/app/models/ai/duo_workflows/workflow.rb @@ -37,6 +37,7 @@ class Workflow < ::ApplicationRecord scope :with_workflow_definition, ->(definition) { where(workflow_definition: definition) } scope :with_environment, ->(environment) { where(environment: environment) } scope :from_pipeline, -> { where.not(workflow_definition: :chat).with_environment(:web) } + scope :not_archived, -> { where(created_at: CHECKPOINT_RETENTION_DAYS.days.ago..) } TARGET_STATUSES = { start: :running, diff --git a/ee/spec/models/ai/duo_workflows/workflow_spec.rb b/ee/spec/models/ai/duo_workflows/workflow_spec.rb index c009a0eb889aa36912bc29bf1032b516d4120476..9f3161e5cf08b3f5ad90e1518aa636b66b39307d 100644 --- a/ee/spec/models/ai/duo_workflows/workflow_spec.rb +++ b/ee/spec/models/ai/duo_workflows/workflow_spec.rb @@ -118,6 +118,17 @@ end end + describe '.not_archived' do + let!(:recent_workflow) { create(:duo_workflows_workflow, created_at: 1.day.ago) } + let!(:archived_workflow) do + create(:duo_workflows_workflow, created_at: (Ai::DuoWorkflows::CHECKPOINT_RETENTION_DAYS + 1).days.ago) + end + + it 'finds workflows that are not archived' do + expect(described_class.not_archived).to contain_exactly(recent_workflow) + end + end + describe '#only_known_pre_approved_agent_priviliges' do let(:agent_privileges) { [] } let(:pre_approved_agent_privileges) { [] } diff --git a/ee/spec/requests/api/graphql/ai/duo_workflows/workflows_spec.rb b/ee/spec/requests/api/graphql/ai/duo_workflows/workflows_spec.rb index 41a8f49ed88f10f8521f05ff70b1ca976f9bb605..eacd85cb10a7a4291bd9ad7647aa2f6c21c79c92 100644 --- a/ee/spec/requests/api/graphql/ai/duo_workflows/workflows_spec.rb +++ b/ee/spec/requests/api/graphql/ai/duo_workflows/workflows_spec.rb @@ -63,7 +63,6 @@ workflow_without_environment, workflow_with_ide_environment, workflow_with_web_environment, - archived_workflow, stalled_workflow, non_stalled_workflow_with_checkpoint ] @@ -447,12 +446,6 @@ returned_workflows_by_id = returned_workflows.index_by { |w| w['id'] } - # Check archived workflow - archived_result = returned_workflows_by_id[archived_workflow.to_global_id.to_s] - expect(archived_result).not_to be_nil - expect(archived_result['archived']).to be(true) - expect(archived_result['stalled']).to be(false) # archived workflows in created state are not stalled - # Check stalled workflow (running state with no checkpoints) stalled_result = returned_workflows_by_id[stalled_workflow.to_global_id.to_s] expect(stalled_result).not_to be_nil