diff --git a/ee/spec/features/merge_trains/user_adds_merge_request_to_merge_train_spec.rb b/ee/spec/features/merge_trains/user_adds_merge_request_to_merge_train_spec.rb
index e62f82f28a7a81e9c153929b5815ea5cee783e4a..a8aae44de7d9037c16b2b7d4cdc7dd1cf53afe41 100644
--- a/ee/spec/features/merge_trains/user_adds_merge_request_to_merge_train_spec.rb
+++ b/ee/spec/features/merge_trains/user_adds_merge_request_to_merge_train_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-RSpec.describe 'User adds a merge request to a merge train', :js, feature_category: :merge_trains do
+RSpec.describe 'User adds a merge request to a merge train', :sidekiq_inline, :js, feature_category: :merge_trains do
   let_it_be_with_refind(:project) { create(:project, :repository) }
   let(:user) { project.owner }
 
@@ -20,99 +20,190 @@
     allow(Gitlab::QueryLimiting::Transaction).to receive(:threshold).and_return(200)
     stub_licensed_features(merge_pipelines: true, merge_trains: true)
     project.update!(merge_pipelines_enabled: true, merge_trains_enabled: true)
-    merge_request.all_pipelines.first.succeed!
-    merge_request.update_head_pipeline
     stub_ci_pipeline_yaml_file(YAML.dump(ci_yaml))
 
     sign_in(user)
   end
 
-  it "shows 'Start merge train' button" do
-    visit project_merge_request_path(project, merge_request)
-
-    expect(page).to have_button('Merge')
-    expect(page).to have_content('Add to merge train')
-  end
-
-  context 'when merge_trains EEP license is not available' do
+  context 'when no active pipeline' do
     before do
-      stub_licensed_features(merge_trains: false)
+      merge_request.all_pipelines.first.succeed!
+      merge_request.update_head_pipeline
     end
 
-    it 'does not show Start merge train helper text' do
+    it "shows 'Merge' button with 'Add to merge train' helper text" do
       visit project_merge_request_path(project, merge_request)
 
-      expect(page).not_to have_content('Start merge train')
+      expect(page).to have_button('Merge')
+      expect(page).to have_content('Add to merge train')
     end
-  end
 
-  context "when user clicks 'Start merge train' button" do
-    before do
-      visit project_merge_request_path(project, merge_request)
-      click_button 'Merge'
-      wait_for_requests
-    end
+    context 'when merge_trains EEP license is not available' do
+      before do
+        stub_licensed_features(merge_trains: false)
+      end
+
+      it 'does not show Add to merge train helper text' do
+        visit project_merge_request_path(project, merge_request)
 
-    it 'informs merge request that auto merge is enabled' do
-      page.within('.mr-state-widget') do
-        expect(page).to have_content("Added to the merge train by #{user.name}")
-        expect(page).to have_content('Source branch will not be deleted.')
-        expect(page).to have_button('Remove from merge train')
+        expect(page).not_to have_content('Add to merge train')
       end
     end
 
-    context 'when pipeline for merge train succeeds', :sidekiq_inline do
-      let(:project) { create(:project, :repository) }
-
+    context "when user clicks 'Merge' button to add to merge train" do
       before do
         visit project_merge_request_path(project, merge_request)
-        merge_request.merge_train_car.pipeline.builds.map(&:success!)
+        click_button 'Merge'
+        wait_for_requests
+      end
+
+      it 'shows merge request is added to merge train' do
+        page.within('.mr-state-widget') do
+          expect(page).to have_content("Added to the merge train by #{user.name}")
+          expect(page).to have_content('Source branch will not be deleted.')
+          expect(page).to have_button('Remove from merge train')
+        end
       end
 
-      it 'displays pipeline control' do
-        expect(page).to have_selector('[data-testid="mini-pipeline-graph-dropdown"]')
+      context 'when pipeline for merge train succeeds' do
+        let(:project) { create(:project, :repository) }
+
+        before do
+          visit project_merge_request_path(project, merge_request)
+          merge_request.merge_train_car.pipeline.builds.map(&:success!)
+        end
+
+        it 'displays the expected content', :js do
+          expect(page).to have_selector('[data-testid="mini-pipeline-graph-dropdown"]')
+
+          find_by_testid('mini-pipeline-graph-dropdown-toggle').click
+          page.within '.ci-job-component' do
+            expect(page).to have_selector('[data-testid="ci-icon"]')
+            expect(page).not_to have_selector('.retry')
+          end
+
+          expect(page).to have_content("Merged")
+        end
       end
 
-      it 'does not allow retry for merge train pipeline', :js do
-        find_by_testid('mini-pipeline-graph-dropdown-toggle').click
-        page.within '.ci-job-component' do
-          expect(page).to have_selector('[data-testid="ci-icon"]')
-          expect(page).not_to have_selector('.retry')
+      context "when user clicks 'Remove from merge train' button" do
+        before do
+          click_button 'Remove from merge train'
+        end
+
+        it 'cancels automatic merge' do
+          page.within('.mr-state-widget') do
+            expect(page).not_to have_content("Added to the merge train by #{user.name}")
+            expect(page).to have_button('Merge')
+            expect(page).to have_content('Add to merge train')
+          end
         end
       end
     end
 
-    context "when user clicks 'Remove from merge train' button" do
-      let(:project) { create(:project, :repository) }
-
+    context 'when the merge request is not the first queue on the train' do
       before do
-        click_button 'Remove from merge train'
+        create(:merge_request, :on_train,
+          source_project: project, source_branch: 'signed-commits',
+          target_project: project, target_branch: 'master')
       end
 
-      it 'cancels automatic merge' do
-        page.within('.mr-state-widget') do
-          expect(page).not_to have_content("Added to the merge train by #{user.name}")
-          expect(page).to have_button('Merge')
-          expect(page).to have_content('Add to merge train')
-        end
+      it "shows 'Merge' button and 'Add to merge train' helper text" do
+        visit project_merge_request_path(project, merge_request)
+
+        expect(page).to have_button('Merge')
+        expect(page).to have_content('Add to merge train')
       end
     end
   end
 
-  context 'when the merge request is not the first queue on the train' do
-    let(:project) { create(:project, :repository) }
-
+  context 'with an active pipeline' do
     before do
-      create(:merge_request, :on_train,
-        source_project: project, source_branch: 'signed-commits',
-        target_project: project, target_branch: 'master')
+      merge_request.all_pipelines.first.run!
+      merge_request.update_head_pipeline
     end
 
-    it "shows 'Merge' button and 'Add to merge train' helper text" do
+    it "shows 'Merge' button with 'Add to merge train when pipeline succeeds' helper text" do
       visit project_merge_request_path(project, merge_request)
 
       expect(page).to have_button('Merge')
-      expect(page).to have_content('Add to merge train')
+      expect(page).to have_content('Add to merge train when pipeline succeeds')
+    end
+
+    context 'when merge_trains EEP license is not available' do
+      before do
+        stub_licensed_features(merge_trains: false)
+      end
+
+      it "does not show 'Add to merge train when pipeline succeeds' helper text" do
+        visit project_merge_request_path(project, merge_request)
+
+        expect(page).not_to have_content('Add to merge train when pipeline succeeds')
+      end
+    end
+
+    context "when user clicks 'Add to merge train when pipeline succeeds' button" do
+      before do
+        visit project_merge_request_path(project, merge_request)
+        click_button 'Set to auto-merge'
+        wait_for_requests
+      end
+
+      it 'shows merge request will be added to merge train when pipeline succeeds' do
+        page.within('.mr-state-widget') do
+          expect(page).to have_content("Set by #{user.name} to start a merge train when the pipeline succeeds")
+          expect(page).to have_content('Source branch will not be deleted.')
+          expect(page).to have_button('Cancel auto-merge')
+        end
+      end
+
+      context 'when pipeline succeeds' do
+        before do
+          merge_request.head_pipeline.succeed!
+          visit project_merge_request_path(project, merge_request)
+        end
+
+        it 'adds the MR to the merge train but not yet merged' do
+          expect(page).to have_content("Added to the merge train by #{user.name}")
+          expect(page).to have_content('Source branch will not be deleted.')
+          expect(page).to have_button('Remove from merge train')
+
+          expect(page).not_to have_content("Merged")
+        end
+
+        context 'when the merge train pipeline passes' do
+          let(:project) { create(:project, :repository) }
+
+          it 'merges the MR' do
+            merge_request.merge_train_car.pipeline.builds.map(&:success!)
+
+            expect(page).to have_selector('[data-testid="mini-pipeline-graph-dropdown"]')
+
+            find_by_testid('mini-pipeline-graph-dropdown-toggle').click
+            page.within '.ci-job-component' do
+              expect(page).to have_selector('[data-testid="ci-icon"]')
+              expect(page).not_to have_selector('.retry')
+            end
+
+            expect(page).to have_content("Merged")
+          end
+        end
+      end
+
+      context "when user clicks 'Cancel auto-merge' button" do
+        before do
+          click_button 'Cancel auto-merge'
+        end
+
+        it 'cancels automatic merge' do
+          wait_for_requests
+
+          page.within('.mr-state-widget') do
+            expect(page).not_to have_content("Set by #{user.name} to start a merge train when the pipeline succeeds")
+            expect(page).to have_button('Set to auto-merge')
+          end
+        end
+      end
     end
   end
 end