diff --git a/spec/config/object_store_settings_spec.rb b/spec/config/object_store_settings_spec.rb
index b1ada3c99db626320a9b5184b0ef6a14155573f6..efb620fe6ddcda4d8e277af5692285ea31035e40 100644
--- a/spec/config/object_store_settings_spec.rb
+++ b/spec/config/object_store_settings_spec.rb
@@ -3,7 +3,7 @@ require Rails.root.join('config', 'object_store_settings.rb')
 
 describe ObjectStoreSettings do
   describe '.parse' do
-    it 'should set correct default values' do
+    it 'sets correct default values' do
       settings = described_class.parse(nil)
 
       expect(settings['enabled']).to be false
diff --git a/spec/controllers/dashboard/milestones_controller_spec.rb b/spec/controllers/dashboard/milestones_controller_spec.rb
index ab40b4eb1782013fb75140a6fed304c0f2634285..828de0e7ca5e540684a7b90a10e2cd47ca0c52e2 100644
--- a/spec/controllers/dashboard/milestones_controller_spec.rb
+++ b/spec/controllers/dashboard/milestones_controller_spec.rb
@@ -75,7 +75,7 @@ describe Dashboard::MilestonesController do
       expect(response.body).not_to include(project_milestone.title)
     end
 
-    it 'should show counts of group and project milestones to which the user belongs to' do
+    it 'shows counts of group and project milestones to which the user belongs to' do
       get :index
 
       expect(response.body).to include("Open\n<span class=\"badge badge-pill\">2</span>")
diff --git a/spec/controllers/groups/clusters_controller_spec.rb b/spec/controllers/groups/clusters_controller_spec.rb
index ef23ffaa843dea2700be462b5a26f4c86f00d986..e5180ec5c5c7326e6d19fd894aef0b776ad0821b 100644
--- a/spec/controllers/groups/clusters_controller_spec.rb
+++ b/spec/controllers/groups/clusters_controller_spec.rb
@@ -455,7 +455,7 @@ describe Groups::ClustersController do
     context 'when domain is invalid' do
       let(:domain) { 'http://not-a-valid-domain' }
 
-      it 'should not update cluster attributes' do
+      it 'does not update cluster attributes' do
         go
 
         cluster.reload
diff --git a/spec/controllers/groups/settings/ci_cd_controller_spec.rb b/spec/controllers/groups/settings/ci_cd_controller_spec.rb
index 15eb0a442a620ed57e6d3949e46388a9367cba72..3290ed8b088bafd1d3d5e1310bcaeef0433183d2 100644
--- a/spec/controllers/groups/settings/ci_cd_controller_spec.rb
+++ b/spec/controllers/groups/settings/ci_cd_controller_spec.rb
@@ -124,7 +124,7 @@ describe Groups::Settings::CiCdController do
         end
 
         context 'when explicitly enabling auto devops' do
-          it 'should update group attribute' do
+          it 'updates group attribute' do
             expect(group.auto_devops_enabled).to eq(true)
           end
         end
@@ -132,7 +132,7 @@ describe Groups::Settings::CiCdController do
         context 'when explicitly disabling auto devops' do
           let(:auto_devops_param) { '0' }
 
-          it 'should update group attribute' do
+          it 'updates group attribute' do
             expect(group.auto_devops_enabled).to eq(false)
           end
         end
diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb
index 38d7240ea81bcaf556207fb110724882970d0640..2b803e7151f593c5bb920e950d4062f15e0a853d 100644
--- a/spec/controllers/groups_controller_spec.rb
+++ b/spec/controllers/groups_controller_spec.rb
@@ -566,11 +566,11 @@ describe GroupsController do
           }
       end
 
-      it 'should return a notice' do
+      it 'returns a notice' do
         expect(flash[:notice]).to eq("Group '#{group.name}' was successfully transferred.")
       end
 
-      it 'should redirect to the new path' do
+      it 'redirects to the new path' do
         expect(response).to redirect_to("/#{new_parent_group.path}/#{group.path}")
       end
     end
@@ -587,11 +587,11 @@ describe GroupsController do
           }
       end
 
-      it 'should return a notice' do
+      it 'returns a notice' do
         expect(flash[:notice]).to eq("Group '#{group.name}' was successfully transferred.")
       end
 
-      it 'should redirect to the new path' do
+      it 'redirects to the new path' do
         expect(response).to redirect_to("/#{group.path}")
       end
     end
@@ -611,11 +611,11 @@ describe GroupsController do
           }
       end
 
-      it 'should return an alert' do
+      it 'returns an alert' do
         expect(flash[:alert]).to eq "Transfer failed: namespace directory cannot be moved"
       end
 
-      it 'should redirect to the current path' do
+      it 'redirects to the current path' do
         expect(response).to redirect_to(edit_group_path(group))
       end
     end
@@ -633,7 +633,7 @@ describe GroupsController do
           }
       end
 
-      it 'should be denied' do
+      it 'is denied' do
         expect(response).to have_gitlab_http_status(404)
       end
     end
diff --git a/spec/controllers/omniauth_callbacks_controller_spec.rb b/spec/controllers/omniauth_callbacks_controller_spec.rb
index 06c6f49f7cc2ad746a6f3245507f9eb1008862d1..b823a8d7463b5ca5dee20db918b19039989d27d3 100644
--- a/spec/controllers/omniauth_callbacks_controller_spec.rb
+++ b/spec/controllers/omniauth_callbacks_controller_spec.rb
@@ -55,7 +55,7 @@ describe OmniauthCallbacksController, type: :controller do
         allow(@routes).to receive(:generate_extras) { [path, []] }
       end
 
-      it 'it calls through to the failure handler' do
+      it 'calls through to the failure handler' do
         request.env['omniauth.error'] = OneLogin::RubySaml::ValidationError.new("Fingerprint mismatch")
         request.env['omniauth.error.strategy'] = OmniAuth::Strategies::SAML.new(nil)
         stub_route_as('/users/auth/saml/callback')
diff --git a/spec/controllers/projects/blob_controller_spec.rb b/spec/controllers/projects/blob_controller_spec.rb
index 3801fca09dcefc01c3b3d91e0ae4a11ef9bca08c..32949e0e7d60ce8eb4a97564a459e3e5e1e1822c 100644
--- a/spec/controllers/projects/blob_controller_spec.rb
+++ b/spec/controllers/projects/blob_controller_spec.rb
@@ -285,7 +285,7 @@ describe Projects::BlobController do
           merge_request.update!(source_project: other_project, target_project: other_project)
         end
 
-        it "it redirect to blob" do
+        it "redirects to blob" do
           put :update, params: mr_params
 
           expect(response).to redirect_to(blob_after_edit_path)
diff --git a/spec/controllers/projects/ci/lints_controller_spec.rb b/spec/controllers/projects/ci/lints_controller_spec.rb
index cfa010c2d1c2057ea517f881ad4a7ccf3cf0fe03..0b79484bbfa072aa8e12785de9038217182deb81 100644
--- a/spec/controllers/projects/ci/lints_controller_spec.rb
+++ b/spec/controllers/projects/ci/lints_controller_spec.rb
@@ -16,15 +16,15 @@ describe Projects::Ci::LintsController do
         get :show, params: { namespace_id: project.namespace, project_id: project }
       end
 
-      it 'should be success' do
+      it 'is success' do
         expect(response).to be_success
       end
 
-      it 'should render show page' do
+      it 'renders show page' do
         expect(response).to render_template :show
       end
 
-      it 'should retrieve project' do
+      it 'retrieves project' do
         expect(assigns(:project)).to eq(project)
       end
     end
@@ -36,7 +36,7 @@ describe Projects::Ci::LintsController do
         get :show, params: { namespace_id: project.namespace, project_id: project }
       end
 
-      it 'should respond with 404' do
+      it 'responds with 404' do
         expect(response).to have_gitlab_http_status(404)
       end
     end
@@ -74,7 +74,7 @@ describe Projects::Ci::LintsController do
         post :create, params: { namespace_id: project.namespace, project_id: project, content: content }
       end
 
-      it 'should be success' do
+      it 'is success' do
         expect(response).to be_success
       end
 
@@ -82,7 +82,7 @@ describe Projects::Ci::LintsController do
         expect(response).to render_template :show
       end
 
-      it 'should retrieve project' do
+      it 'retrieves project' do
         expect(assigns(:project)).to eq(project)
       end
     end
@@ -102,7 +102,7 @@ describe Projects::Ci::LintsController do
         post :create, params: { namespace_id: project.namespace, project_id: project, content: content }
       end
 
-      it 'should assign errors' do
+      it 'assigns errors' do
         expect(assigns[:error]).to eq('jobs:rubocop config contains unknown keys: scriptt')
       end
     end
@@ -114,7 +114,7 @@ describe Projects::Ci::LintsController do
         post :create, params: { namespace_id: project.namespace, project_id: project, content: content }
       end
 
-      it 'should respond with 404' do
+      it 'responds with 404' do
         expect(response).to have_gitlab_http_status(404)
       end
     end
diff --git a/spec/controllers/projects/commits_controller_spec.rb b/spec/controllers/projects/commits_controller_spec.rb
index 8cb9130b834c1128c22251f079742a0ac04feed4..9fb455dd97452596ef9c1254ec436bcc218745b9 100644
--- a/spec/controllers/projects/commits_controller_spec.rb
+++ b/spec/controllers/projects/commits_controller_spec.rb
@@ -15,7 +15,7 @@ describe Projects::CommitsController do
 
     describe "GET commits_root" do
       context "no ref is provided" do
-        it 'should redirect to the default branch of the project' do
+        it 'redirects to the default branch of the project' do
           get(:commits_root,
               params: {
                 namespace_id: project.namespace,
diff --git a/spec/controllers/projects/mirrors_controller_spec.rb b/spec/controllers/projects/mirrors_controller_spec.rb
index 86a12a5e903fb35b1e266a810ac7424ac02b2b98..f2b73956e8dcc0702b4f9732a09c68566b388631 100644
--- a/spec/controllers/projects/mirrors_controller_spec.rb
+++ b/spec/controllers/projects/mirrors_controller_spec.rb
@@ -65,7 +65,7 @@ describe Projects::MirrorsController do
         expect(flash[:notice]).to match(/successfully updated/)
       end
 
-      it 'should create a RemoteMirror object' do
+      it 'creates a RemoteMirror object' do
         expect { do_put(project, remote_mirrors_attributes: remote_mirror_attributes) }.to change(RemoteMirror, :count).by(1)
       end
     end
@@ -82,7 +82,7 @@ describe Projects::MirrorsController do
         expect(flash[:alert]).to match(/Only allowed protocols are/)
       end
 
-      it 'should not create a RemoteMirror object' do
+      it 'does not create a RemoteMirror object' do
         expect { do_put(project, remote_mirrors_attributes: remote_mirror_attributes) }.not_to change(RemoteMirror, :count)
       end
     end
diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/spec/controllers/projects/project_members_controller_spec.rb
index 3cc3fe69fba030a98e4becd91976c9d2cd1f7ff4..33486edcdd1810b71fed477c31c7c93ae80ca7cc 100644
--- a/spec/controllers/projects/project_members_controller_spec.rb
+++ b/spec/controllers/projects/project_members_controller_spec.rb
@@ -5,7 +5,7 @@ describe Projects::ProjectMembersController do
   let(:project) { create(:project, :public, :access_requestable) }
 
   describe 'GET index' do
-    it 'should have the project_members address with a 200 status code' do
+    it 'has the project_members address with a 200 status code' do
       get :index, params: { namespace_id: project.namespace, project_id: project }
 
       expect(response).to have_gitlab_http_status(200)
diff --git a/spec/controllers/projects/services_controller_spec.rb b/spec/controllers/projects/services_controller_spec.rb
index 601a292bf54c32986edcf94e3869cf86474b69ef..d00d5bf579dc566e046cf02e95d9f1cb820837e9 100644
--- a/spec/controllers/projects/services_controller_spec.rb
+++ b/spec/controllers/projects/services_controller_spec.rb
@@ -147,7 +147,7 @@ describe Projects::ServicesController do
           params: { namespace_id: project.namespace, project_id: project, id: service.to_param, service: { namespace: 'updated_namespace' } }
       end
 
-      it 'should not update the service' do
+      it 'does not update the service' do
         service.reload
         expect(service.namespace).not_to eq('updated_namespace')
       end
@@ -172,7 +172,7 @@ describe Projects::ServicesController do
     context 'with approved services' do
       let(:service_id) { 'jira' }
 
-      it 'should render edit page' do
+      it 'renders edit page' do
         expect(response).to be_success
       end
     end
@@ -180,7 +180,7 @@ describe Projects::ServicesController do
     context 'with a deprecated service' do
       let(:service_id) { 'kubernetes' }
 
-      it 'should render edit page' do
+      it 'renders edit page' do
         expect(response).to be_success
       end
     end
diff --git a/spec/controllers/user_callouts_controller_spec.rb b/spec/controllers/user_callouts_controller_spec.rb
index c71d75a3e7fded42ee3faee09669724fc0bcbc31..3cbbba934b8509a7f4c85abdb073623c6c54da8d 100644
--- a/spec/controllers/user_callouts_controller_spec.rb
+++ b/spec/controllers/user_callouts_controller_spec.rb
@@ -14,11 +14,11 @@ describe UserCalloutsController do
       let(:feature_name) { UserCallout.feature_names.keys.first }
 
       context 'when callout entry does not exist' do
-        it 'should create a callout entry with dismissed state' do
+        it 'creates a callout entry with dismissed state' do
           expect { subject }.to change { UserCallout.count }.by(1)
         end
 
-        it 'should return success' do
+        it 'returns success' do
           subject
 
           expect(response).to have_gitlab_http_status(:ok)
@@ -28,7 +28,7 @@ describe UserCalloutsController do
       context 'when callout entry already exists' do
         let!(:callout) { create(:user_callout, feature_name: UserCallout.feature_names.keys.first, user: user) }
 
-        it 'should return success' do
+        it 'returns success' do
           subject
 
           expect(response).to have_gitlab_http_status(:ok)
@@ -39,7 +39,7 @@ describe UserCalloutsController do
     context 'with invalid feature name' do
       let(:feature_name) { 'bogus_feature_name' }
 
-      it 'should return bad request' do
+      it 'returns bad request' do
         subject
 
         expect(response).to have_gitlab_http_status(:bad_request)
diff --git a/spec/features/expand_collapse_diffs_spec.rb b/spec/features/expand_collapse_diffs_spec.rb
index 8d8011611488cb722369d7e07e7c8457fdc78dea..b2b3382666a2f0f3c2c4b952a7bd4e051a8a4e38 100644
--- a/spec/features/expand_collapse_diffs_spec.rb
+++ b/spec/features/expand_collapse_diffs_spec.rb
@@ -34,7 +34,7 @@ describe 'Expand and collapse diffs', :js do
     define_method(file.split('.').first) { file_container(file) }
   end
 
-  it 'should show the diff content with a highlighted line when linking to line' do
+  it 'shows the diff content with a highlighted line when linking to line' do
     expect(large_diff).not_to have_selector('.code')
     expect(large_diff).to have_selector('.nothing-here-block')
 
@@ -48,7 +48,7 @@ describe 'Expand and collapse diffs', :js do
     expect(large_diff).to have_selector('.hll')
   end
 
-  it 'should show the diff content when linking to file' do
+  it 'shows the diff content when linking to file' do
     expect(large_diff).not_to have_selector('.code')
     expect(large_diff).to have_selector('.nothing-here-block')
 
diff --git a/spec/features/explore/groups_list_spec.rb b/spec/features/explore/groups_list_spec.rb
index 8ed4051856e1750e1ea9d6fc108c9aeafd4c9f08..56f6b1f7eaf74ef3b1959662726fe99d9ca5266f 100644
--- a/spec/features/explore/groups_list_spec.rb
+++ b/spec/features/explore/groups_list_spec.rb
@@ -68,17 +68,17 @@ describe 'Explore Groups page', :js do
   end
 
   describe 'landing component' do
-    it 'should show a landing component' do
+    it 'shows a landing component' do
       expect(page).to have_content('Below you will find all the groups that are public.')
     end
 
-    it 'should be dismissable' do
+    it 'is dismissable' do
       find('.dismiss-button').click
 
       expect(page).not_to have_content('Below you will find all the groups that are public.')
     end
 
-    it 'should persistently not show once dismissed' do
+    it 'does not show persistently once dismissed' do
       find('.dismiss-button').click
 
       visit explore_groups_path
diff --git a/spec/features/groups/settings/ci_cd_spec.rb b/spec/features/groups/settings/ci_cd_spec.rb
index 0f793dbab6e4f740f0d615daea66a5d220f8b163..5b1a9512c55cacac7c8269c72d735af248692159 100644
--- a/spec/features/groups/settings/ci_cd_spec.rb
+++ b/spec/features/groups/settings/ci_cd_spec.rb
@@ -43,7 +43,7 @@ describe 'Group CI/CD settings' do
     end
 
     context 'as owner first visiting group settings' do
-      it 'should see instance enabled badge' do
+      it 'sees instance enabled badge' do
         visit group_settings_ci_cd_path(group)
 
         page.within '#auto-devops-settings' do
@@ -53,7 +53,7 @@ describe 'Group CI/CD settings' do
     end
 
     context 'when Auto DevOps group has been enabled' do
-      it 'should see group enabled badge' do
+      it 'sees group enabled badge' do
         group.update!(auto_devops_enabled: true)
 
         visit group_settings_ci_cd_path(group)
@@ -65,7 +65,7 @@ describe 'Group CI/CD settings' do
     end
 
     context 'when Auto DevOps group has been disabled' do
-      it 'should not see a badge' do
+      it 'does not see a badge' do
         group.update!(auto_devops_enabled: false)
 
         visit group_settings_ci_cd_path(group)
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index c2f32c7642263ef8e2162d51296c26ef6a92ef6d..8e7f78cab81d6977abf53af601bea5b1a3355d77 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -237,7 +237,7 @@ describe 'Group' do
     let!(:project) { create(:project, namespace: group) }
     let!(:path) { group_path(group) }
 
-    it 'it renders projects and groups on the page' do
+    it 'renders projects and groups on the page' do
       visit path
       wait_for_requests
 
diff --git a/spec/features/help_pages_spec.rb b/spec/features/help_pages_spec.rb
index e24b1f4349d892152d425c86e0545f2bc185df60..bcd2b90d3bbfabc162dba1f8c34a7f89e44b765d 100644
--- a/spec/features/help_pages_spec.rb
+++ b/spec/features/help_pages_spec.rb
@@ -82,15 +82,15 @@ describe 'Help Pages' do
       visit help_path
     end
 
-    it 'should display custom help page text' do
+    it 'displays custom help page text' do
       expect(page).to have_text "My Custom Text"
     end
 
-    it 'should hide marketing content when enabled' do
+    it 'hides marketing content when enabled' do
       expect(page).not_to have_link "Get a support subscription"
     end
 
-    it 'should use a custom support url' do
+    it 'uses a custom support url' do
       expect(page).to have_link "See our website for getting help", href: "http://example.com/help"
     end
   end
diff --git a/spec/features/issues/filtered_search/dropdown_assignee_spec.rb b/spec/features/issues/filtered_search/dropdown_assignee_spec.rb
index e0b1e286dee93d1beb1363608ae5e4634e270984..75313442b65c411d7903346935a0fbd594b909fc 100644
--- a/spec/features/issues/filtered_search/dropdown_assignee_spec.rb
+++ b/spec/features/issues/filtered_search/dropdown_assignee_spec.rb
@@ -42,7 +42,7 @@ describe 'Dropdown assignee', :js do
       expect(page).to have_css(js_dropdown_assignee, visible: false)
     end
 
-    it 'should show loading indicator when opened' do
+    it 'shows loading indicator when opened' do
       slow_requests do
         # We aren't using `input_filtered_search` because we want to see the loading indicator
         filtered_search.set('assignee:')
@@ -51,13 +51,13 @@ describe 'Dropdown assignee', :js do
       end
     end
 
-    it 'should hide loading indicator when loaded' do
+    it 'hides loading indicator when loaded' do
       input_filtered_search('assignee:', submit: false, extra_space: false)
 
       expect(find(js_dropdown_assignee)).not_to have_css('.filter-dropdown-loading')
     end
 
-    it 'should load all the assignees when opened' do
+    it 'loads all the assignees when opened' do
       input_filtered_search('assignee:', submit: false, extra_space: false)
 
       expect(dropdown_assignee_size).to eq(4)
diff --git a/spec/features/issues/filtered_search/dropdown_author_spec.rb b/spec/features/issues/filtered_search/dropdown_author_spec.rb
index bedc61b9eed89d5a69fff95b0991f23773834356..bc8d9bc8450b51620052f3e61c8680c098b4893a 100644
--- a/spec/features/issues/filtered_search/dropdown_author_spec.rb
+++ b/spec/features/issues/filtered_search/dropdown_author_spec.rb
@@ -50,7 +50,7 @@ describe 'Dropdown author', :js do
       expect(page).to have_css(js_dropdown_author, visible: false)
     end
 
-    it 'should show loading indicator when opened' do
+    it 'shows loading indicator when opened' do
       slow_requests do
         filtered_search.set('author:')
 
@@ -58,13 +58,13 @@ describe 'Dropdown author', :js do
       end
     end
 
-    it 'should hide loading indicator when loaded' do
+    it 'hides loading indicator when loaded' do
       send_keys_to_filtered_search('author:')
 
       expect(page).not_to have_css('#js-dropdown-author .filter-dropdown-loading')
     end
 
-    it 'should load all the authors when opened' do
+    it 'loads all the authors when opened' do
       send_keys_to_filtered_search('author:')
 
       expect(dropdown_author_size).to eq(4)
diff --git a/spec/features/issues/filtered_search/dropdown_emoji_spec.rb b/spec/features/issues/filtered_search/dropdown_emoji_spec.rb
index f36d4e8f23ff75bd2562f1030a86cf0f4848c9b8..a5c3ab7e7d08cf424da7bf33ca21a662faa02840 100644
--- a/spec/features/issues/filtered_search/dropdown_emoji_spec.rb
+++ b/spec/features/issues/filtered_search/dropdown_emoji_spec.rb
@@ -69,7 +69,7 @@ describe 'Dropdown emoji', :js do
         expect(page).to have_css(js_dropdown_emoji, visible: false)
       end
 
-      it 'should show loading indicator when opened' do
+      it 'shows loading indicator when opened' do
         slow_requests do
           filtered_search.set('my-reaction:')
 
@@ -77,13 +77,13 @@ describe 'Dropdown emoji', :js do
         end
       end
 
-      it 'should hide loading indicator when loaded' do
+      it 'hides loading indicator when loaded' do
         send_keys_to_filtered_search('my-reaction:')
 
         expect(page).not_to have_css('#js-dropdown-my-reaction .filter-dropdown-loading')
       end
 
-      it 'should load all the emojis when opened' do
+      it 'loads all the emojis when opened' do
         send_keys_to_filtered_search('my-reaction:')
 
         expect(dropdown_emoji_size).to eq(4)
diff --git a/spec/features/issues/filtered_search/dropdown_milestone_spec.rb b/spec/features/issues/filtered_search/dropdown_milestone_spec.rb
index b330eafe1d1f74a7caeb0f7017609c7a45a7e919..7584339ccc02e61d5bbffbbd41f17092aade7ed2 100644
--- a/spec/features/issues/filtered_search/dropdown_milestone_spec.rb
+++ b/spec/features/issues/filtered_search/dropdown_milestone_spec.rb
@@ -49,7 +49,7 @@ describe 'Dropdown milestone', :js do
       expect(page).to have_css(js_dropdown_milestone, visible: false)
     end
 
-    it 'should show loading indicator when opened' do
+    it 'shows loading indicator when opened' do
       slow_requests do
         filtered_search.set('milestone:')
 
@@ -57,13 +57,13 @@ describe 'Dropdown milestone', :js do
       end
     end
 
-    it 'should hide loading indicator when loaded' do
+    it 'hides loading indicator when loaded' do
       filtered_search.set('milestone:')
 
       expect(find(js_dropdown_milestone)).not_to have_css('.filter-dropdown-loading')
     end
 
-    it 'should load all the milestones when opened' do
+    it 'loads all the milestones when opened' do
       filtered_search.set('milestone:')
 
       expect(filter_dropdown).to have_selector('.filter-dropdown .filter-dropdown-item', count: 6)
diff --git a/spec/features/issues/form_spec.rb b/spec/features/issues/form_spec.rb
index f2e4c5779dffc532c78641eeef39f8f42bf3a84b..26c781350e5b36df50542a93538e70ff66041d48 100644
--- a/spec/features/issues/form_spec.rb
+++ b/spec/features/issues/form_spec.rb
@@ -45,7 +45,7 @@ describe 'New/edit issue', :js do
         wait_for_requests
       end
 
-      it 'should display selected users even if they are not part of the original API call' do
+      it 'displays selected users even if they are not part of the original API call' do
         find('.dropdown-input-field').native.send_keys user2.name
 
         page.within '.dropdown-menu-user' do
diff --git a/spec/features/issues/issue_detail_spec.rb b/spec/features/issues/issue_detail_spec.rb
index 76bc93e97667e4b54dccf1b69ec1fc14dbb2a08d..791bd003597d4eb524901520f0c9a696f4238b01 100644
--- a/spec/features/issues/issue_detail_spec.rb
+++ b/spec/features/issues/issue_detail_spec.rb
@@ -26,7 +26,7 @@ describe 'Issue Detail', :js do
       wait_for_requests
     end
 
-    it 'should encode the description to prevent xss issues' do
+    it 'encodes the description to prevent xss issues' do
       page.within('.issuable-details .detail-page-description') do
         expect(page).to have_selector('img', count: 1)
         expect(find('img')['onerror']).to be_nil
diff --git a/spec/features/labels_hierarchy_spec.rb b/spec/features/labels_hierarchy_spec.rb
index 7c31e67a7fafe2d7e4cd300858d1f10ab5defad6..bac297de4a6f8e26ca6b3f3281b8724b31714679 100644
--- a/spec/features/labels_hierarchy_spec.rb
+++ b/spec/features/labels_hierarchy_spec.rb
@@ -145,7 +145,7 @@ describe 'Labels Hierarchy', :js, :nested_groups do
       visit new_project_issue_path(project_1)
     end
 
-    it 'should be able to assign ancestor group labels' do
+    it 'is able to assign ancestor group labels' do
       fill_in 'issue_title', with: 'new created issue'
       fill_in 'issue_description', with: 'new issue description'
 
diff --git a/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb b/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb
index 0ccab5b2face8ee11ec519ce2d62ef2ed46a177f..b8c4a78e24f4be4f75ba3f12f8f9450690ac14bd 100644
--- a/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb
+++ b/spec/features/merge_request/user_allows_commits_from_memebers_who_can_merge_spec.rb
@@ -76,7 +76,7 @@ describe 'create a merge request, allowing commits from members who can merge to
       sign_in(member)
     end
 
-    it 'it hides the option from members' do
+    it 'hides the option from members' do
       visit edit_project_merge_request_path(target_project, merge_request)
 
       expect(page).not_to have_content('Allows commits from members who can merge to the target branch')
diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb
index 2609546990dfd558b4c324f97fd89502cd92e655..40ba676ff92124ba55e0b9f8feb59ab27ff26c9f 100644
--- a/spec/features/merge_request/user_sees_merge_widget_spec.rb
+++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb
@@ -302,7 +302,7 @@ describe 'Merge request > User sees merge widget', :js do
       visit project_merge_request_path(project_only_mwps, merge_request_in_only_mwps_project)
     end
 
-    it 'should be allowed to merge' do
+    it 'is allowed to merge' do
       # Wait for the `ci_status` and `merge_check` requests
       wait_for_requests
 
diff --git a/spec/features/merge_request/user_sees_versions_spec.rb b/spec/features/merge_request/user_sees_versions_spec.rb
index 5c45e36399797016cb8031ce3feaa48cd8296221..6eae3fd467647c1580db0d4251f3d1cfeb828df2 100644
--- a/spec/features/merge_request/user_sees_versions_spec.rb
+++ b/spec/features/merge_request/user_sees_versions_spec.rb
@@ -230,7 +230,7 @@ describe 'Merge request > User sees versions', :js do
       wait_for_requests
     end
 
-    it 'should only show diffs from the commit' do
+    it 'only shows diffs from the commit' do
       diff_commit_ids = find_all('.diff-file [data-commit-id]').map {|diff| diff['data-commit-id']}
 
       expect(diff_commit_ids).not_to be_empty
diff --git a/spec/features/projects/blobs/blob_show_spec.rb b/spec/features/projects/blobs/blob_show_spec.rb
index a7aa63018fda7817b9c1b43bba5b66b9f6bb534d..aa2e538cc8ee0a6716c2c0f6673c4dfacddcfa2e 100644
--- a/spec/features/projects/blobs/blob_show_spec.rb
+++ b/spec/features/projects/blobs/blob_show_spec.rb
@@ -572,7 +572,7 @@ describe 'File blob', :js do
       visit_blob('files/ruby/test.rb', ref: 'feature')
     end
 
-    it 'should show the realtime pipeline status' do
+    it 'shows the realtime pipeline status' do
       page.within('.commit-actions') do
         expect(page).to have_css('.ci-status-icon')
         expect(page).to have_css('.ci-status-icon-running')
diff --git a/spec/features/projects/clusters/applications_spec.rb b/spec/features/projects/clusters/applications_spec.rb
index aa1c3902f0f526ae794373c2a6aa4beb9d51cc60..527508b35196a4326d7bc83de6a57e9ced9ef952 100644
--- a/spec/features/projects/clusters/applications_spec.rb
+++ b/spec/features/projects/clusters/applications_spec.rb
@@ -80,7 +80,7 @@ describe 'Clusters Applications', :js do
         context 'on an abac cluster' do
           let(:cluster) { create(:cluster, :provided_by_gcp, :rbac_disabled, projects: [project]) }
 
-          it 'should show info block and not be installable' do
+          it 'shows info block and not be installable' do
             page.within('.js-cluster-application-row-knative') do
               expect(page).to have_css('.rbac-notice')
               expect(page.find(:css, '.js-cluster-application-install-button')['disabled']).to eq('true')
@@ -91,7 +91,7 @@ describe 'Clusters Applications', :js do
         context 'on an rbac cluster' do
           let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
 
-          it 'should not show callout block and be installable' do
+          it 'does not show callout block and be installable' do
             page.within('.js-cluster-application-row-knative') do
               expect(page).not_to have_css('.rbac-notice')
               expect(page).to have_css('.js-cluster-application-install-button:not([disabled])')
diff --git a/spec/features/projects/commit/mini_pipeline_graph_spec.rb b/spec/features/projects/commit/mini_pipeline_graph_spec.rb
index 19f6ebf2c1a0bbed566689abffbe8b15d62e2655..614f11c83926071336e8a90e784dd22d931b0390 100644
--- a/spec/features/projects/commit/mini_pipeline_graph_spec.rb
+++ b/spec/features/projects/commit/mini_pipeline_graph_spec.rb
@@ -43,7 +43,7 @@ describe 'Mini Pipeline Graph in Commit View', :js do
       visit project_commit_path(project, project.commit.id)
     end
 
-    it 'should not display a mini pipeline graph' do
+    it 'does not display a mini pipeline graph' do
       expect(page).not_to have_selector('.mr-widget-pipeline-graph')
     end
   end
diff --git a/spec/features/projects/environments/environment_spec.rb b/spec/features/projects/environments/environment_spec.rb
index fe71cb7661a11c85e625e50ce9ed3b2858141286..da4ef6428d424438bb3333355512d45d75d8161c 100644
--- a/spec/features/projects/environments/environment_spec.rb
+++ b/spec/features/projects/environments/environment_spec.rb
@@ -159,7 +159,7 @@ describe 'Environment' do
               context 'for project maintainer' do
                 let(:role) { :maintainer }
 
-                it 'it shows the terminal button' do
+                it 'shows the terminal button' do
                   expect(page).to have_terminal_button
                 end
 
diff --git a/spec/features/projects/environments/environments_spec.rb b/spec/features/projects/environments/environments_spec.rb
index b2a435e554d414c9e819c342d9e7513374dcc307..7b7e45312d902e8ae63d671a0405e9b42c69cc80 100644
--- a/spec/features/projects/environments/environments_spec.rb
+++ b/spec/features/projects/environments/environments_spec.rb
@@ -30,7 +30,7 @@ describe 'Environments page', :js do
       end
 
       describe 'in available tab page' do
-        it 'should show one environment' do
+        it 'shows one environment' do
           visit_environments(project, scope: 'available')
 
           expect(page).to have_css('.environments-container')
@@ -44,7 +44,7 @@ describe 'Environments page', :js do
           create_list(:environment, 4, project: project, state: :available)
         end
 
-        it 'should render second page of pipelines' do
+        it 'renders second page of pipelines' do
           visit_environments(project, scope: 'available')
 
           find('.js-next-button').click
@@ -56,7 +56,7 @@ describe 'Environments page', :js do
       end
 
       describe 'in stopped tab page' do
-        it 'should show no environments' do
+        it 'shows no environments' do
           visit_environments(project, scope: 'stopped')
 
           expect(page).to have_css('.environments-container')
@@ -72,7 +72,7 @@ describe 'Environments page', :js do
           allow_any_instance_of(Kubeclient::Client).to receive(:proxy_url).and_raise(Kubeclient::HttpError.new(401, 'Unauthorized', nil))
         end
 
-        it 'should show one environment without error' do
+        it 'shows one environment without error' do
           visit_environments(project, scope: 'available')
 
           expect(page).to have_css('.environments-container')
@@ -87,7 +87,7 @@ describe 'Environments page', :js do
       end
 
       describe 'in available tab page' do
-        it 'should show no environments' do
+        it 'shows no environments' do
           visit_environments(project, scope: 'available')
 
           expect(page).to have_css('.environments-container')
@@ -96,7 +96,7 @@ describe 'Environments page', :js do
       end
 
       describe 'in stopped tab page' do
-        it 'should show one environment' do
+        it 'shows one environment' do
           visit_environments(project, scope: 'stopped')
 
           expect(page).to have_css('.environments-container')
diff --git a/spec/features/projects/members/invite_group_spec.rb b/spec/features/projects/members/invite_group_spec.rb
index b2d2dba55f16b3ed84d6947b40dc093377419f7c..7432c600c1ec1950408f0291c27948757a4c392c 100644
--- a/spec/features/projects/members/invite_group_spec.rb
+++ b/spec/features/projects/members/invite_group_spec.rb
@@ -159,7 +159,7 @@ describe 'Project > Members > Invite group', :js do
         open_select2 '#link_group_id'
       end
 
-      it 'should infinitely scroll' do
+      it 'infinitely scrolls' do
         expect(find('.select2-drop .select2-results')).to have_selector('.select2-result', count: 1)
 
         scroll_select2_to_bottom('.select2-drop .select2-results:visible')
diff --git a/spec/features/projects/pipeline_schedules_spec.rb b/spec/features/projects/pipeline_schedules_spec.rb
index ee6b67b2188080ccee6e2a59282d68032cea3ed4..b1a705f09ceddb65d702438c1973b81fe41fd6aa 100644
--- a/spec/features/projects/pipeline_schedules_spec.rb
+++ b/spec/features/projects/pipeline_schedules_spec.rb
@@ -93,14 +93,14 @@ describe 'Pipeline Schedules', :js do
         expect(page).to have_button('UTC')
       end
 
-      it 'it creates a new scheduled pipeline' do
+      it 'creates a new scheduled pipeline' do
         fill_in_schedule_form
         save_pipeline_schedule
 
         expect(page).to have_content('my fancy description')
       end
 
-      it 'it prevents an invalid form from being submitted' do
+      it 'prevents an invalid form from being submitted' do
         save_pipeline_schedule
 
         expect(page).to have_content('This field is required')
@@ -112,7 +112,7 @@ describe 'Pipeline Schedules', :js do
         edit_pipeline_schedule
       end
 
-      it 'it displays existing properties' do
+      it 'displays existing properties' do
         description = find_field('schedule_description').value
         expect(description).to eq('pipeline schedule')
         expect(page).to have_button('master')
diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb
index b197557039d0c482d3cf796b5170dd5b00cf199c..cf334e1e4da9de43b5179310b74c502d87648630 100644
--- a/spec/features/projects/pipelines/pipeline_spec.rb
+++ b/spec/features/projects/pipelines/pipeline_spec.rb
@@ -154,7 +154,7 @@ describe 'Pipeline', :js do
           end
         end
 
-        it 'should be possible to retry the success job' do
+        it 'is possible to retry the success job' do
           find('#ci-badge-build .ci-action-icon-container').click
 
           expect(page).not_to have_content('Retry job')
@@ -194,13 +194,13 @@ describe 'Pipeline', :js do
           end
         end
 
-        it 'should be possible to retry the failed build' do
+        it 'is possible to retry the failed build' do
           find('#ci-badge-test .ci-action-icon-container').click
 
           expect(page).not_to have_content('Retry job')
         end
 
-        it 'should include the failure reason' do
+        it 'includes the failure reason' do
           page.within('#ci-badge-test') do
             build_link = page.find('.js-pipeline-graph-job-link')
             expect(build_link['data-original-title']).to eq('test - failed - (unknown failure)')
@@ -220,7 +220,7 @@ describe 'Pipeline', :js do
           end
         end
 
-        it 'should be possible to play the manual job' do
+        it 'is possible to play the manual job' do
           find('#ci-badge-manual-build .ci-action-icon-container').click
 
           expect(page).not_to have_content('Play job')
@@ -454,7 +454,7 @@ describe 'Pipeline', :js do
         expect(page).to have_content('Cancel running')
       end
 
-      it 'should not link to job' do
+      it 'does not link to job' do
         expect(page).not_to have_selector('.js-pipeline-graph-job-link')
       end
     end
diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb
index 7ca3b3d8edd72573e512b24e85ae39062b20781b..cb14db7665d2568e436ddd1331cce8111bd5eda2 100644
--- a/spec/features/projects/pipelines/pipelines_spec.rb
+++ b/spec/features/projects/pipelines/pipelines_spec.rb
@@ -542,19 +542,19 @@ describe 'Pipelines', :js do
           visit_project_pipelines
         end
 
-        it 'should render a mini pipeline graph' do
+        it 'renders a mini pipeline graph' do
           expect(page).to have_selector('.js-mini-pipeline-graph')
           expect(page).to have_selector('.js-builds-dropdown-button')
         end
 
         context 'when clicking a stage badge' do
-          it 'should open a dropdown' do
+          it 'opens a dropdown' do
             find('.js-builds-dropdown-button').click
 
             expect(page).to have_link build.name
           end
 
-          it 'should be possible to cancel pending build' do
+          it 'is possible to cancel pending build' do
             find('.js-builds-dropdown-button').click
             find('.js-ci-action').click
             wait_for_requests
@@ -570,7 +570,7 @@ describe 'Pipelines', :js do
                                        name: 'build')
           end
 
-          it 'should display the failure reason' do
+          it 'displays the failure reason' do
             find('.js-builds-dropdown-button').click
 
             within('.js-builds-dropdown-list') do
@@ -587,21 +587,21 @@ describe 'Pipelines', :js do
           create(:ci_empty_pipeline, project: project)
         end
 
-        it 'should render pagination' do
+        it 'renders pagination' do
           visit project_pipelines_path(project)
           wait_for_requests
 
           expect(page).to have_selector('.gl-pagination')
         end
 
-        it 'should render second page of pipelines' do
+        it 'renders second page of pipelines' do
           visit project_pipelines_path(project, page: '2')
           wait_for_requests
 
           expect(page).to have_selector('.gl-pagination .page', count: 2)
         end
 
-        it 'should show updated content' do
+        it 'shows updated content' do
           visit project_pipelines_path(project)
           wait_for_requests
           page.find('.js-next-button .page-link').click
diff --git a/spec/features/projects/snippets/user_comments_on_snippet_spec.rb b/spec/features/projects/snippets/user_comments_on_snippet_spec.rb
index 9c1ef78b0cab78531607f0ff007ca035c7bdcb58..4e1e2f330ecad1af3678256ff32a59c6be42ee35 100644
--- a/spec/features/projects/snippets/user_comments_on_snippet_spec.rb
+++ b/spec/features/projects/snippets/user_comments_on_snippet_spec.rb
@@ -23,14 +23,14 @@ describe 'Projects > Snippets > User comments on a snippet', :js do
     expect(page).to have_content('Good snippet!')
   end
 
-  it 'should have autocomplete' do
+  it 'has autocomplete' do
     find('#note_note').native.send_keys('')
     fill_in 'note[note]', with: '@'
 
     expect(page).to have_selector('.atwho-view')
   end
 
-  it 'should have zen mode' do
+  it 'has zen mode' do
     find('.js-zen-enter').click
     expect(page).to have_selector('.fullscreen')
   end
diff --git a/spec/features/raven_js_spec.rb b/spec/features/raven_js_spec.rb
index b0923b451eeff66cd339fb4e27955260bbe7671e..9a049764dec0c08ea76c3bbdcfdd71b06a2e84ca 100644
--- a/spec/features/raven_js_spec.rb
+++ b/spec/features/raven_js_spec.rb
@@ -3,13 +3,13 @@ require 'spec_helper'
 describe 'RavenJS' do
   let(:raven_path) { '/raven.chunk.js' }
 
-  it 'should not load raven if sentry is disabled' do
+  it 'does not load raven if sentry is disabled' do
     visit new_user_session_path
 
     expect(has_requested_raven).to eq(false)
   end
 
-  it 'should load raven if sentry is enabled' do
+  it 'loads raven if sentry is enabled' do
     stub_application_setting(clientside_sentry_dsn: 'https://key@domain.com/id', clientside_sentry_enabled: true)
 
     visit new_user_session_path
diff --git a/spec/features/snippets/notes_on_personal_snippets_spec.rb b/spec/features/snippets/notes_on_personal_snippets_spec.rb
index fc6726985aec199fc8724379802efb08747cc7fd..78e0a43ce6d937ad220317f4512a520a4cd2e913 100644
--- a/spec/features/snippets/notes_on_personal_snippets_spec.rb
+++ b/spec/features/snippets/notes_on_personal_snippets_spec.rb
@@ -83,7 +83,7 @@ describe 'Comments on personal snippets', :js do
       expect(find('div#notes')).to have_content('This is awesome!')
     end
 
-    it 'should not have autocomplete' do
+    it 'does not have autocomplete' do
       wait_for_requests
 
       find('#note_note').native.send_keys('')
diff --git a/spec/features/users/overview_spec.rb b/spec/features/users/overview_spec.rb
index 3db9ae7a95134cae5359d4a819cc0f9e4d35dc18..bfa85696e19f9883b972a54878561f82427bfa52 100644
--- a/spec/features/users/overview_spec.rb
+++ b/spec/features/users/overview_spec.rb
@@ -93,7 +93,7 @@ describe 'Overview tab on a user profile', :js do
     describe 'user has no personal projects' do
       include_context 'visit overview tab'
 
-      it 'it shows an empty project list with an info message' do
+      it 'shows an empty project list with an info message' do
         page.within('.projects-block') do
           expect(page).to have_selector('.loading', visible: false)
           expect(page).to have_content('You haven\'t created any personal projects.')
@@ -113,7 +113,7 @@ describe 'Overview tab on a user profile', :js do
 
       include_context 'visit overview tab'
 
-      it 'it shows one entry in the list of projects' do
+      it 'shows one entry in the list of projects' do
         page.within('.projects-block') do
           expect(page).to have_selector('.project-row', count: 1)
         end
@@ -139,7 +139,7 @@ describe 'Overview tab on a user profile', :js do
 
       include_context 'visit overview tab'
 
-      it 'it shows max. ten entries in the list of projects' do
+      it 'shows max. ten entries in the list of projects' do
         page.within('.projects-block') do
           expect(page).to have_selector('.project-row', count: 10)
         end
diff --git a/spec/finders/milestones_finder_spec.rb b/spec/finders/milestones_finder_spec.rb
index ecffbb9e197a5089c274158c811d44056df4940e..34c7b508c56c55679f285ad065bac2fd5a13a5b4 100644
--- a/spec/finders/milestones_finder_spec.rb
+++ b/spec/finders/milestones_finder_spec.rb
@@ -9,7 +9,7 @@ describe MilestonesFinder do
   let!(:milestone_3) { create(:milestone, project: project_1, state: 'active', due_date: Date.tomorrow) }
   let!(:milestone_4) { create(:milestone, project: project_2, state: 'active') }
 
-  it 'it returns milestones for projects' do
+  it 'returns milestones for projects' do
     result = described_class.new(project_ids: [project_1.id, project_2.id], state: 'all').execute
 
     expect(result).to contain_exactly(milestone_3, milestone_4)
diff --git a/spec/helpers/icons_helper_spec.rb b/spec/helpers/icons_helper_spec.rb
index 4b40d52328793d4ad992fdb4f572a0e292713071..37e9ddadb8c0b5484b12255d78f6daebe7cf7102 100644
--- a/spec/helpers/icons_helper_spec.rb
+++ b/spec/helpers/icons_helper_spec.rb
@@ -59,19 +59,19 @@ describe IconsHelper do
     describe 'non existing icon' do
       non_existing = 'non_existing_icon_sprite'
 
-      it 'should raise in development mode' do
+      it 'raises in development mode' do
         allow(Rails.env).to receive(:development?).and_return(true)
 
         expect { sprite_icon(non_existing) }.to raise_error(ArgumentError, /is not a known icon/)
       end
 
-      it 'should raise in test mode' do
+      it 'raises in test mode' do
         allow(Rails.env).to receive(:test?).and_return(true)
 
         expect { sprite_icon(non_existing) }.to raise_error(ArgumentError, /is not a known icon/)
       end
 
-      it 'should not raise in production mode' do
+      it 'does not raise in production mode' do
         allow(Rails.env).to receive(:test?).and_return(false)
         allow(Rails.env).to receive(:development?).and_return(false)
 
diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb
index 9cff0291250125d52f4ad7d94c7b6cf9fa1f690a..2f59cfda0a06b5cf77f1df48249822284e4b68be 100644
--- a/spec/helpers/search_helper_spec.rb
+++ b/spec/helpers/search_helper_spec.rb
@@ -12,7 +12,7 @@ describe SearchHelper do
         allow(self).to receive(:current_user).and_return(nil)
       end
 
-      it "it returns nil" do
+      it "returns nil" do
         expect(search_autocomplete_opts("q")).to be_nil
       end
     end
diff --git a/spec/helpers/version_check_helper_spec.rb b/spec/helpers/version_check_helper_spec.rb
index bfec7ad4bba13f47f1b59e9d403db276bdd2bcf0..e384e2bf9a098cee3bb95c2d1ed2ccb7e7618ad3 100644
--- a/spec/helpers/version_check_helper_spec.rb
+++ b/spec/helpers/version_check_helper_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe VersionCheckHelper do
   describe '#version_status_badge' do
-    it 'should return nil if not dev environment and not enabled' do
+    it 'returns nil if not dev environment and not enabled' do
       allow(Rails.env).to receive(:production?) { false }
       allow(Gitlab::CurrentSettings.current_application_settings).to receive(:version_check_enabled) { false }
 
@@ -16,16 +16,16 @@ describe VersionCheckHelper do
         allow(VersionCheck).to receive(:url) { 'https://version.host.com/check.svg?gitlab_info=xxx' }
       end
 
-      it 'should return an image tag' do
+      it 'returns an image tag' do
         expect(helper.version_status_badge).to start_with('<img')
       end
 
-      it 'should have a js prefixed css class' do
+      it 'has a js prefixed css class' do
         expect(helper.version_status_badge)
           .to match(/class="js-version-status-badge lazy"/)
       end
 
-      it 'should have a VersionCheck url as the src' do
+      it 'has a VersionCheck url as the src' do
         expect(helper.version_status_badge)
           .to include(%{src="https://version.host.com/check.svg?gitlab_info=xxx"})
       end
diff --git a/spec/lib/api/helpers/custom_validators_spec.rb b/spec/lib/api/helpers/custom_validators_spec.rb
index 9945d598a14747e390fd4a8b4a02201d0806967f..aed86b21cb7c5088f89edb32dd2c3c29e7311fa6 100644
--- a/spec/lib/api/helpers/custom_validators_spec.rb
+++ b/spec/lib/api/helpers/custom_validators_spec.rb
@@ -21,7 +21,7 @@ describe API::Helpers::CustomValidators do
     end
 
     context 'invalid parameters' do
-      it 'should raise a validation error' do
+      it 'raises a validation error' do
         expect_validation_error({ 'test' => 'some_value' })
       end
     end
@@ -44,7 +44,7 @@ describe API::Helpers::CustomValidators do
     end
 
     context 'invalid parameters' do
-      it 'should raise a validation error' do
+      it 'raises a validation error' do
         expect_validation_error({ 'test' => 'some_other_string' })
       end
     end
@@ -67,7 +67,7 @@ describe API::Helpers::CustomValidators do
     end
 
     context 'invalid parameters' do
-      it 'should raise a validation error' do
+      it 'raises a validation error' do
         expect_validation_error({ 'test' => 'some_other_string' })
       end
     end
diff --git a/spec/lib/banzai/filter/plantuml_filter_spec.rb b/spec/lib/banzai/filter/plantuml_filter_spec.rb
index 8235c411eb754b62b78e9d2aecf9ad88241295d9..6f7acfe7072efb549b8fd00c4a843e712e3a3f40 100644
--- a/spec/lib/banzai/filter/plantuml_filter_spec.rb
+++ b/spec/lib/banzai/filter/plantuml_filter_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Banzai::Filter::PlantumlFilter do
   include FilterSpecHelper
 
-  it 'should replace plantuml pre tag with img tag' do
+  it 'replaces plantuml pre tag with img tag' do
     stub_application_setting(plantuml_enabled: true, plantuml_url: "http://localhost:8080")
     input = '<pre><code lang="plantuml">Bob -> Sara : Hello</code></pre>'
     output = '<div class="imageblock"><div class="content"><img class="plantuml" src="http://localhost:8080/png/U9npoazIqBLJ24uiIbImKl18pSd91m0rkGMq"></div></div>'
@@ -12,7 +12,7 @@ describe Banzai::Filter::PlantumlFilter do
     expect(doc.to_s).to eq output
   end
 
-  it 'should not replace plantuml pre tag with img tag if disabled' do
+  it 'does not replace plantuml pre tag with img tag if disabled' do
     stub_application_setting(plantuml_enabled: false)
     input = '<pre><code lang="plantuml">Bob -> Sara : Hello</code></pre>'
     output = '<pre><code lang="plantuml">Bob -&gt; Sara : Hello</code></pre>'
@@ -21,7 +21,7 @@ describe Banzai::Filter::PlantumlFilter do
     expect(doc.to_s).to eq output
   end
 
-  it 'should not replace plantuml pre tag with img tag if url is invalid' do
+  it 'does not replace plantuml pre tag with img tag if url is invalid' do
     stub_application_setting(plantuml_enabled: true, plantuml_url: "invalid")
     input = '<pre><code lang="plantuml">Bob -> Sara : Hello</code></pre>'
     output = '<div class="listingblock"><div class="content"><pre class="plantuml plantuml-error"> PlantUML Error: cannot connect to PlantUML server at "invalid"</pre></div></div>'
diff --git a/spec/lib/forever_spec.rb b/spec/lib/forever_spec.rb
index 494c0561975c6e6f1aa2f4b18982e9db611040f4..b9ffe895bf0ee8ea6d3659c3cef9a66f20c3e6d8 100644
--- a/spec/lib/forever_spec.rb
+++ b/spec/lib/forever_spec.rb
@@ -5,7 +5,7 @@ describe Forever do
     subject { described_class.date }
 
     context 'when using PostgreSQL' do
-      it 'should return Postgresql future date' do
+      it 'returns Postgresql future date' do
         allow(Gitlab::Database).to receive(:postgresql?).and_return(true)
 
         expect(subject).to eq(described_class::POSTGRESQL_DATE)
@@ -13,7 +13,7 @@ describe Forever do
     end
 
     context 'when using MySQL' do
-      it 'should return MySQL future date' do
+      it 'returns MySQL future date' do
         allow(Gitlab::Database).to receive(:postgresql?).and_return(false)
 
         expect(subject).to eq(described_class::MYSQL_DATE)
diff --git a/spec/lib/gitlab/background_migration/populate_cluster_kubernetes_namespace_table_spec.rb b/spec/lib/gitlab/background_migration/populate_cluster_kubernetes_namespace_table_spec.rb
index 812e0cc6947774b4bd34a61c9921ed87049edcf7..128e118ac1700a51b3629426cd4230f61062c148 100644
--- a/spec/lib/gitlab/background_migration/populate_cluster_kubernetes_namespace_table_spec.rb
+++ b/spec/lib/gitlab/background_migration/populate_cluster_kubernetes_namespace_table_spec.rb
@@ -19,7 +19,7 @@ describe Gitlab::BackgroundMigration::PopulateClusterKubernetesNamespaceTable, :
   end
 
   shared_examples 'consistent kubernetes namespace attributes' do
-    it 'should populate namespace and service account information' do
+    it 'populates namespace and service account information' do
       migration.perform
 
       clusters_with_namespace.each do |cluster|
@@ -41,7 +41,7 @@ describe Gitlab::BackgroundMigration::PopulateClusterKubernetesNamespaceTable, :
   context 'when no Clusters::Project has a Clusters::KubernetesNamespace' do
     let(:cluster_projects) { cluster_projects_table.all }
 
-    it 'should create a Clusters::KubernetesNamespace per Clusters::Project' do
+    it 'creates a Clusters::KubernetesNamespace per Clusters::Project' do
       expect do
         migration.perform
       end.to change(Clusters::KubernetesNamespace, :count).by(cluster_projects_table.count)
@@ -57,7 +57,7 @@ describe Gitlab::BackgroundMigration::PopulateClusterKubernetesNamespaceTable, :
       create_kubernetes_namespace(clusters_table.all)
     end
 
-    it 'should not create any Clusters::KubernetesNamespace' do
+    it 'does not create any Clusters::KubernetesNamespace' do
       expect do
         migration.perform
       end.not_to change(Clusters::KubernetesNamespace, :count)
@@ -78,7 +78,7 @@ describe Gitlab::BackgroundMigration::PopulateClusterKubernetesNamespaceTable, :
       end.to change(Clusters::KubernetesNamespace, :count).by(with_no_kubernetes_namespace.count)
     end
 
-    it 'should not modify clusters with Clusters::KubernetesNamespace' do
+    it 'does not modify clusters with Clusters::KubernetesNamespace' do
       migration.perform
 
       with_kubernetes_namespace.each do |cluster|
diff --git a/spec/lib/gitlab/background_migration/populate_fork_networks_range_spec.rb b/spec/lib/gitlab/background_migration/populate_fork_networks_range_spec.rb
index 8582af96199d3f606a9ec648ebe81a1b2ad4b351..0e73c8c59c960bbf94f4a6d7a42413f2645e7bda 100644
--- a/spec/lib/gitlab/background_migration/populate_fork_networks_range_spec.rb
+++ b/spec/lib/gitlab/background_migration/populate_fork_networks_range_spec.rb
@@ -41,7 +41,7 @@ describe Gitlab::BackgroundMigration::PopulateForkNetworksRange, :migration, sch
     migration.perform(1, 3)
   end
 
-  it 'it creates the fork network' do
+  it 'creates the fork network' do
     expect(fork_network1).not_to be_nil
     expect(fork_network2).not_to be_nil
   end
diff --git a/spec/lib/gitlab/ci/config/external/file/base_spec.rb b/spec/lib/gitlab/ci/config/external/file/base_spec.rb
index fa39b32d7abce3df4816b692e70ef661a9a65123..dd536a241bd733a148b77f238e9d701092c6bcb0 100644
--- a/spec/lib/gitlab/ci/config/external/file/base_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/base_spec.rb
@@ -26,7 +26,7 @@ describe Gitlab::Ci::Config::External::File::Base do
     context 'when a location is present' do
       let(:location) { 'some-location' }
 
-      it 'should return true' do
+      it 'returns true' do
         expect(subject).to be_matching
       end
     end
@@ -34,7 +34,7 @@ describe Gitlab::Ci::Config::External::File::Base do
     context 'with a location is missing' do
       let(:location) { nil }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(subject).not_to be_matching
       end
     end
diff --git a/spec/lib/gitlab/ci/config/external/file/local_spec.rb b/spec/lib/gitlab/ci/config/external/file/local_spec.rb
index dc14b07287e1698a54d14f78f5617fd536e8f810..9451db9522a9cdec60660a69fb6f3b0eec29689c 100644
--- a/spec/lib/gitlab/ci/config/external/file/local_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/local_spec.rb
@@ -15,7 +15,7 @@ describe Gitlab::Ci::Config::External::File::Local do
     context 'when a local is specified' do
       let(:params) { { local: 'file' } }
 
-      it 'should return true' do
+      it 'returns true' do
         expect(local_file).to be_matching
       end
     end
@@ -23,7 +23,7 @@ describe Gitlab::Ci::Config::External::File::Local do
     context 'with a missing local' do
       let(:params) { { local: nil } }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(local_file).not_to be_matching
       end
     end
@@ -31,7 +31,7 @@ describe Gitlab::Ci::Config::External::File::Local do
     context 'with a missing local key' do
       let(:params) { {} }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(local_file).not_to be_matching
       end
     end
@@ -45,7 +45,7 @@ describe Gitlab::Ci::Config::External::File::Local do
         allow_any_instance_of(described_class).to receive(:fetch_local_content).and_return("image: 'ruby2:2'")
       end
 
-      it 'should return true' do
+      it 'returns true' do
         expect(local_file.valid?).to be_truthy
       end
     end
@@ -53,7 +53,7 @@ describe Gitlab::Ci::Config::External::File::Local do
     context 'when is not a valid local path' do
       let(:location) { '/lib/gitlab/ci/templates/non-existent-file.yml' }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(local_file.valid?).to be_falsy
       end
     end
@@ -61,7 +61,7 @@ describe Gitlab::Ci::Config::External::File::Local do
     context 'when is not a yaml file' do
       let(:location) { '/config/application.rb' }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(local_file.valid?).to be_falsy
       end
     end
@@ -84,7 +84,7 @@ describe Gitlab::Ci::Config::External::File::Local do
         allow_any_instance_of(described_class).to receive(:fetch_local_content).and_return(local_file_content)
       end
 
-      it 'should return the content of the file' do
+      it 'returns the content of the file' do
         expect(local_file.content).to eq(local_file_content)
       end
     end
@@ -92,7 +92,7 @@ describe Gitlab::Ci::Config::External::File::Local do
     context 'with an invalid file' do
       let(:location) { '/lib/gitlab/ci/templates/non-existent-file.yml' }
 
-      it 'should be nil' do
+      it 'is nil' do
         expect(local_file.content).to be_nil
       end
     end
@@ -101,7 +101,7 @@ describe Gitlab::Ci::Config::External::File::Local do
   describe '#error_message' do
     let(:location) { '/lib/gitlab/ci/templates/non-existent-file.yml' }
 
-    it 'should return an error message' do
+    it 'returns an error message' do
       expect(local_file.error_message).to eq("Local file `#{location}` does not exist!")
     end
   end
diff --git a/spec/lib/gitlab/ci/config/external/file/project_spec.rb b/spec/lib/gitlab/ci/config/external/file/project_spec.rb
index 6e89bb1b30f1531158cb56b82ce672d9322e395b..4acb4f324d3469d7c74ebb877388100f21fd7918 100644
--- a/spec/lib/gitlab/ci/config/external/file/project_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/project_spec.rb
@@ -19,7 +19,7 @@ describe Gitlab::Ci::Config::External::File::Project do
     context 'when a file and project is specified' do
       let(:params) { { file: 'file.yml', project: 'project' } }
 
-      it 'should return true' do
+      it 'returns true' do
         expect(project_file).to be_matching
       end
     end
@@ -27,7 +27,7 @@ describe Gitlab::Ci::Config::External::File::Project do
     context 'with only file is specified' do
       let(:params) { { file: 'file.yml' } }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(project_file).not_to be_matching
       end
     end
@@ -35,7 +35,7 @@ describe Gitlab::Ci::Config::External::File::Project do
     context 'with only project is specified' do
       let(:params) { { project: 'project' } }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(project_file).not_to be_matching
       end
     end
@@ -43,7 +43,7 @@ describe Gitlab::Ci::Config::External::File::Project do
     context 'with a missing local key' do
       let(:params) { {} }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(project_file).not_to be_matching
       end
     end
@@ -61,14 +61,14 @@ describe Gitlab::Ci::Config::External::File::Project do
         stub_project_blob(root_ref_sha, '/file.yml') { 'image: ruby:2.1' }
       end
 
-      it 'should return true' do
+      it 'returns true' do
         expect(project_file).to be_valid
       end
 
       context 'when user does not have permission to access file' do
         let(:context_user) { create(:user) }
 
-        it 'should return false' do
+        it 'returns false' do
           expect(project_file).not_to be_valid
           expect(project_file.error_message).to include("Project `#{project.full_path}` not found or access denied!")
         end
@@ -86,7 +86,7 @@ describe Gitlab::Ci::Config::External::File::Project do
         stub_project_blob(ref_sha, '/file.yml') { 'image: ruby:2.1' }
       end
 
-      it 'should return true' do
+      it 'returns true' do
         expect(project_file).to be_valid
       end
     end
@@ -102,7 +102,7 @@ describe Gitlab::Ci::Config::External::File::Project do
         stub_project_blob(root_ref_sha, '/file.yml') { '' }
       end
 
-      it 'should return false' do
+      it 'returns false' do
         expect(project_file).not_to be_valid
         expect(project_file.error_message).to include("Project `#{project.full_path}` file `/file.yml` is empty!")
       end
@@ -113,7 +113,7 @@ describe Gitlab::Ci::Config::External::File::Project do
         { project: project.full_path, ref: 'I-Do-Not-Exist', file: '/file.yml' }
       end
 
-      it 'should return false' do
+      it 'returns false' do
         expect(project_file).not_to be_valid
         expect(project_file.error_message).to include("Project `#{project.full_path}` reference `I-Do-Not-Exist` does not exist!")
       end
@@ -124,7 +124,7 @@ describe Gitlab::Ci::Config::External::File::Project do
         { project: project.full_path, file: '/invalid-file.yml' }
       end
 
-      it 'should return false' do
+      it 'returns false' do
         expect(project_file).not_to be_valid
         expect(project_file.error_message).to include("Project `#{project.full_path}` file `/invalid-file.yml` does not exist!")
       end
@@ -135,7 +135,7 @@ describe Gitlab::Ci::Config::External::File::Project do
         { project: project.full_path, file: '/invalid-file' }
       end
 
-      it 'should return false' do
+      it 'returns false' do
         expect(project_file).not_to be_valid
         expect(project_file.error_message).to include('Included file `/invalid-file` does not have YAML extension!')
       end
diff --git a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
index c5b32c29759ef05adf177759561ecf20b6185939..d8a61618e77947db4e6224058add46af5403cd78 100644
--- a/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/remote_spec.rb
@@ -21,7 +21,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'when a remote is specified' do
       let(:params) { { remote: 'http://remote' } }
 
-      it 'should return true' do
+      it 'returns true' do
         expect(remote_file).to be_matching
       end
     end
@@ -29,7 +29,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'with a missing remote' do
       let(:params) { { remote: nil } }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(remote_file).not_to be_matching
       end
     end
@@ -37,7 +37,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'with a missing remote key' do
       let(:params) { {} }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(remote_file).not_to be_matching
       end
     end
@@ -49,7 +49,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         WebMock.stub_request(:get, location).to_return(body: remote_file_content)
       end
 
-      it 'should return true' do
+      it 'returns true' do
         expect(remote_file.valid?).to be_truthy
       end
     end
@@ -57,7 +57,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'with an irregular url' do
       let(:location) { 'not-valid://gitlab.com/gitlab-org/gitlab-ce/blob/1234/.gitlab-ci-1.yml' }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(remote_file.valid?).to be_falsy
       end
     end
@@ -67,7 +67,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         allow(Gitlab::HTTP).to receive(:get).and_raise(Timeout::Error)
       end
 
-      it 'should be falsy' do
+      it 'is falsy' do
         expect(remote_file.valid?).to be_falsy
       end
     end
@@ -75,7 +75,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'when is not a yaml file' do
       let(:location) { 'https://asdasdasdaj48ggerexample.com' }
 
-      it 'should be falsy' do
+      it 'is falsy' do
         expect(remote_file.valid?).to be_falsy
       end
     end
@@ -83,7 +83,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'with an internal url' do
       let(:location) { 'http://localhost:8080' }
 
-      it 'should be falsy' do
+      it 'is falsy' do
         expect(remote_file.valid?).to be_falsy
       end
     end
@@ -95,7 +95,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         WebMock.stub_request(:get, location).to_return(body: remote_file_content)
       end
 
-      it 'should return the content of the file' do
+      it 'returns the content of the file' do
         expect(remote_file.content).to eql(remote_file_content)
       end
     end
@@ -105,7 +105,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         allow(Gitlab::HTTP).to receive(:get).and_raise(Timeout::Error)
       end
 
-      it 'should be falsy' do
+      it 'is falsy' do
         expect(remote_file.content).to be_falsy
       end
     end
@@ -117,7 +117,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         WebMock.stub_request(:get, location).to_raise(SocketError.new('Some HTTP error'))
       end
 
-      it 'should be nil' do
+      it 'is nil' do
         expect(remote_file.content).to be_nil
       end
     end
@@ -125,7 +125,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'with an internal url' do
       let(:location) { 'http://localhost:8080' }
 
-      it 'should be nil' do
+      it 'is nil' do
         expect(remote_file.content).to be_nil
       end
     end
@@ -147,7 +147,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         WebMock.stub_request(:get, location).to_timeout
       end
 
-      it 'should returns error message about a timeout' do
+      it 'returns error message about a timeout' do
         expect(subject).to match /could not be fetched because of a timeout error!/
       end
     end
@@ -157,7 +157,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         WebMock.stub_request(:get, location).to_raise(Gitlab::HTTP::Error)
       end
 
-      it 'should returns error message about a HTTP error' do
+      it 'returns error message about a HTTP error' do
         expect(subject).to match /could not be fetched because of HTTP error!/
       end
     end
@@ -167,7 +167,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
         WebMock.stub_request(:get, location).to_return(body: remote_file_content, status: 404)
       end
 
-      it 'should returns error message about a timeout' do
+      it 'returns error message about a timeout' do
         expect(subject).to match /could not be fetched because of HTTP code `404` error!/
       end
     end
@@ -175,7 +175,7 @@ describe Gitlab::Ci::Config::External::File::Remote do
     context 'when the URL is blocked' do
       let(:location) { 'http://127.0.0.1/some/path/to/config.yaml' }
 
-      it 'should include details about blocked URL' do
+      it 'includes details about blocked URL' do
         expect(subject).to eq "Remote file could not be fetched because URL '#{location}' " \
                               'is blocked: Requests to localhost are not allowed!'
       end
diff --git a/spec/lib/gitlab/ci/config/external/file/template_spec.rb b/spec/lib/gitlab/ci/config/external/file/template_spec.rb
index 8ecaf4800f8d7f568a59235c3d9bf203b9ffdf90..1609b8fd66b05df692e000b7183e2048483180da 100644
--- a/spec/lib/gitlab/ci/config/external/file/template_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/file/template_spec.rb
@@ -16,7 +16,7 @@ describe Gitlab::Ci::Config::External::File::Template do
     context 'when a template is specified' do
       let(:params) { { template: 'some-template' } }
 
-      it 'should return true' do
+      it 'returns true' do
         expect(template_file).to be_matching
       end
     end
@@ -24,7 +24,7 @@ describe Gitlab::Ci::Config::External::File::Template do
     context 'with a missing template' do
       let(:params) { { template: nil } }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(template_file).not_to be_matching
       end
     end
@@ -32,7 +32,7 @@ describe Gitlab::Ci::Config::External::File::Template do
     context 'with a missing template key' do
       let(:params) { {} }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(template_file).not_to be_matching
       end
     end
@@ -42,7 +42,7 @@ describe Gitlab::Ci::Config::External::File::Template do
     context 'when is a valid template name' do
       let(:template) { 'Auto-DevOps.gitlab-ci.yml' }
 
-      it 'should return true' do
+      it 'returns true' do
         expect(template_file).to be_valid
       end
     end
@@ -50,7 +50,7 @@ describe Gitlab::Ci::Config::External::File::Template do
     context 'with invalid template name' do
       let(:template) { 'Template.yml' }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(template_file).not_to be_valid
         expect(template_file.error_message).to include('Template file `Template.yml` is not a valid location!')
       end
@@ -59,7 +59,7 @@ describe Gitlab::Ci::Config::External::File::Template do
     context 'with a non-existing template' do
       let(:template) { 'I-Do-Not-Have-This-Template.gitlab-ci.yml' }
 
-      it 'should return false' do
+      it 'returns false' do
         expect(template_file).not_to be_valid
         expect(template_file.error_message).to include('Included file `I-Do-Not-Have-This-Template.gitlab-ci.yml` is empty or does not exist!')
       end
diff --git a/spec/lib/gitlab/ci/config/external/processor_spec.rb b/spec/lib/gitlab/ci/config/external/processor_spec.rb
index 3f6f6d7c5d95ce7584005cd4c8e449cac76081b2..e94bb44f9906906f2b34a0f2d55fc2767ac6063b 100644
--- a/spec/lib/gitlab/ci/config/external/processor_spec.rb
+++ b/spec/lib/gitlab/ci/config/external/processor_spec.rb
@@ -21,7 +21,7 @@ describe Gitlab::Ci::Config::External::Processor do
     context 'when no external files defined' do
       let(:values) { { image: 'ruby:2.2' } }
 
-      it 'should return the same values' do
+      it 'returns the same values' do
         expect(processor.perform).to eq(values)
       end
     end
@@ -29,7 +29,7 @@ describe Gitlab::Ci::Config::External::Processor do
     context 'when an invalid local file is defined' do
       let(:values) { { include: '/lib/gitlab/ci/templates/non-existent-file.yml', image: 'ruby:2.2' } }
 
-      it 'should raise an error' do
+      it 'raises an error' do
         expect { processor.perform }.to raise_error(
           described_class::IncludeError,
           "Local file `/lib/gitlab/ci/templates/non-existent-file.yml` does not exist!"
@@ -45,7 +45,7 @@ describe Gitlab::Ci::Config::External::Processor do
         WebMock.stub_request(:get, remote_file).to_raise(SocketError.new('Some HTTP error'))
       end
 
-      it 'should raise an error' do
+      it 'raises an error' do
         expect { processor.perform }.to raise_error(
           described_class::IncludeError,
           "Remote file `#{remote_file}` could not be fetched because of a socket error!"
@@ -78,12 +78,12 @@ describe Gitlab::Ci::Config::External::Processor do
         WebMock.stub_request(:get, remote_file).to_return(body: external_file_content)
       end
 
-      it 'should append the file to the values' do
+      it 'appends the file to the values' do
         output = processor.perform
         expect(output.keys).to match_array([:image, :before_script, :rspec, :rubocop])
       end
 
-      it "should remove the 'include' keyword" do
+      it "removes the 'include' keyword" do
         expect(processor.perform[:include]).to be_nil
       end
     end
@@ -105,12 +105,12 @@ describe Gitlab::Ci::Config::External::Processor do
           .to receive(:fetch_local_content).and_return(local_file_content)
       end
 
-      it 'should append the file to the values' do
+      it 'appends the file to the values' do
         output = processor.perform
         expect(output.keys).to match_array([:image, :before_script])
       end
 
-      it "should remove the 'include' keyword" do
+      it "removes the 'include' keyword" do
         expect(processor.perform[:include]).to be_nil
       end
     end
@@ -148,11 +148,11 @@ describe Gitlab::Ci::Config::External::Processor do
         WebMock.stub_request(:get, remote_file).to_return(body: remote_file_content)
       end
 
-      it 'should append the files to the values' do
+      it 'appends the files to the values' do
         expect(processor.perform.keys).to match_array([:image, :stages, :before_script, :rspec])
       end
 
-      it "should remove the 'include' keyword" do
+      it "removes the 'include' keyword" do
         expect(processor.perform[:include]).to be_nil
       end
     end
@@ -167,7 +167,7 @@ describe Gitlab::Ci::Config::External::Processor do
           .to receive(:fetch_local_content).and_return(local_file_content)
       end
 
-      it 'should raise an error' do
+      it 'raises an error' do
         expect { processor.perform }.to raise_error(
           described_class::IncludeError,
           "Included file `/lib/gitlab/ci/templates/template.yml` does not have valid YAML syntax!"
@@ -190,7 +190,7 @@ describe Gitlab::Ci::Config::External::Processor do
         HEREDOC
       end
 
-      it 'should take precedence' do
+      it 'takes precedence' do
         WebMock.stub_request(:get, remote_file).to_return(body: remote_file_content)
         expect(processor.perform[:image]).to eq('ruby:2.2')
       end
diff --git a/spec/lib/gitlab/ci/config_spec.rb b/spec/lib/gitlab/ci/config_spec.rb
index 00b2753c5fcce79db11e7276ea07b72e60b5ac50..fd2a29e4ddb2d02f7800d4375a53947fac79289b 100644
--- a/spec/lib/gitlab/ci/config_spec.rb
+++ b/spec/lib/gitlab/ci/config_spec.rb
@@ -225,7 +225,7 @@ describe Gitlab::Ci::Config do
     end
 
     context "when gitlab_ci_yml has valid 'include' defined" do
-      it 'should return a composed hash' do
+      it 'returns a composed hash' do
         before_script_values = [
           "apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs", "ruby -v",
           "which ruby",
@@ -316,7 +316,7 @@ describe Gitlab::Ci::Config do
         HEREDOC
       end
 
-      it 'should take precedence' do
+      it 'takes precedence' do
         expect(config.to_hash).to eq({ image: 'ruby:2.2' })
       end
     end
@@ -341,7 +341,7 @@ describe Gitlab::Ci::Config do
         HEREDOC
       end
 
-      it 'should merge the variables dictionaries' do
+      it 'merges the variables dictionaries' do
         expect(config.to_hash).to eq({ variables: { A: 'alpha', B: 'beta', C: 'gamma', D: 'delta' } })
       end
     end
diff --git a/spec/lib/gitlab/ci/pipeline/chain/skip_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/skip_spec.rb
index dc13cae961c0cd77fe1e56771a00a477e8f5ac8f..c7f4fc98ca37860384410818c9989f20b7900012 100644
--- a/spec/lib/gitlab/ci/pipeline/chain/skip_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline/chain/skip_spec.rb
@@ -23,7 +23,7 @@ describe Gitlab::Ci::Pipeline::Chain::Skip do
       step.perform!
     end
 
-    it 'should break the chain' do
+    it 'breaks the chain' do
       expect(step.break?).to be true
     end
 
@@ -37,11 +37,11 @@ describe Gitlab::Ci::Pipeline::Chain::Skip do
       step.perform!
     end
 
-    it 'should not break the chain' do
+    it 'does not break the chain' do
       expect(step.break?).to be false
     end
 
-    it 'should not skip a pipeline chain' do
+    it 'does not skip a pipeline chain' do
       expect(pipeline.reload).not_to be_skipped
     end
   end
diff --git a/spec/lib/gitlab/contributions_calendar_spec.rb b/spec/lib/gitlab/contributions_calendar_spec.rb
index b7924302014a0f9a3e0817ce7c288f16b8303a76..51e5bdc6307a973ab32b56b97768e95b1144d2c2 100644
--- a/spec/lib/gitlab/contributions_calendar_spec.rb
+++ b/spec/lib/gitlab/contributions_calendar_spec.rb
@@ -150,13 +150,13 @@ describe Gitlab::ContributionsCalendar do
   end
 
   describe '#starting_year' do
-    it "should be the start of last year" do
+    it "is the start of last year" do
       expect(calendar.starting_year).to eq(last_year.year)
     end
   end
 
   describe '#starting_month' do
-    it "should be the start of this month" do
+    it "is the start of this month" do
       expect(calendar.starting_month).to eq(today.month)
     end
   end
diff --git a/spec/lib/gitlab/database/rename_reserved_paths_migration/v1_spec.rb b/spec/lib/gitlab/database/rename_reserved_paths_migration/v1_spec.rb
index 1d31f96159ca9f4f25dae368a9088314c12601f3..ddd54a669a3d0d9dd1d6d80f829520adaf81a16a 100644
--- a/spec/lib/gitlab/database/rename_reserved_paths_migration/v1_spec.rb
+++ b/spec/lib/gitlab/database/rename_reserved_paths_migration/v1_spec.rb
@@ -27,7 +27,7 @@ describe Gitlab::Database::RenameReservedPathsMigration::V1, :delete do
   describe '#rename_wildcard_paths' do
     it_behaves_like 'renames child namespaces'
 
-    it 'should rename projects' do
+    it 'renames projects' do
       rename_projects = double
       expect(described_class::RenameProjects)
         .to receive(:new).with(['the-path'], subject)
@@ -40,7 +40,7 @@ describe Gitlab::Database::RenameReservedPathsMigration::V1, :delete do
   end
 
   describe '#rename_root_paths' do
-    it 'should rename namespaces' do
+    it 'renames namespaces' do
       rename_namespaces = double
       expect(described_class::RenameNamespaces)
         .to receive(:new).with(['the-path'], subject)
diff --git a/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb b/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb
index 256166dbad3496a5f85372aada7dafcb9914fbdd..0697594c7256f12e76dd7c12b77206004d29b916 100644
--- a/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb
+++ b/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb
@@ -27,7 +27,7 @@ describe Gitlab::Diff::FileCollection::MergeRequestDiff do
     let(:diffable) { merge_request.merge_request_diff }
   end
 
-  it 'it uses a different cache key if diff line keys change' do
+  it 'uses a different cache key if diff line keys change' do
     mr_diff = described_class.new(merge_request.merge_request_diff, diff_options: nil)
     key = mr_diff.cache_key
 
diff --git a/spec/lib/gitlab/git/commit_spec.rb b/spec/lib/gitlab/git/commit_spec.rb
index 4a4ac833e39fdc1b43e1cd5c8e4cff23b5128369..507bf2228100bc3589fa32b847b315f211f7c1c8 100644
--- a/spec/lib/gitlab/git/commit_spec.rb
+++ b/spec/lib/gitlab/git/commit_spec.rb
@@ -113,13 +113,13 @@ describe Gitlab::Git::Commit, :seed_helper do
 
   context 'Class methods' do
     shared_examples '.find' do
-      it "should return first head commit if without params" do
+      it "returns first head commit if without params" do
         expect(described_class.last(repository).id).to eq(
           rugged_repo.head.target.oid
         )
       end
 
-      it "should return valid commit" do
+      it "returns valid commit" do
         expect(described_class.find(repository, SeedRepo::Commit::ID)).to be_valid_commit
       end
 
@@ -127,21 +127,21 @@ describe Gitlab::Git::Commit, :seed_helper do
         expect(described_class.find(repository, SeedRepo::Commit::ID).parent_ids).to be_an(Array)
       end
 
-      it "should return valid commit for tag" do
+      it "returns valid commit for tag" do
         expect(described_class.find(repository, 'v1.0.0').id).to eq('6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9')
       end
 
-      it "should return nil for non-commit ids" do
+      it "returns nil for non-commit ids" do
         blob = Gitlab::Git::Blob.find(repository, SeedRepo::Commit::ID, "files/ruby/popen.rb")
         expect(described_class.find(repository, blob.id)).to be_nil
       end
 
-      it "should return nil for parent of non-commit object" do
+      it "returns nil for parent of non-commit object" do
         blob = Gitlab::Git::Blob.find(repository, SeedRepo::Commit::ID, "files/ruby/popen.rb")
         expect(described_class.find(repository, "#{blob.id}^")).to be_nil
       end
 
-      it "should return nil for nonexisting ids" do
+      it "returns nil for nonexisting ids" do
         expect(described_class.find(repository, "+123_4532530XYZ")).to be_nil
       end
 
@@ -328,7 +328,7 @@ describe Gitlab::Git::Commit, :seed_helper do
     end
 
     describe '.find_all' do
-      it 'should return a return a collection of commits' do
+      it 'returns a return a collection of commits' do
         commits = described_class.find_all(repository)
 
         expect(commits).to all( be_a_kind_of(described_class) )
diff --git a/spec/lib/gitlab/git/diff_spec.rb b/spec/lib/gitlab/git/diff_spec.rb
index 1d22329b6700f6723f130666cb122b16d09e5ba0..9ab669ad488d657f82ebb652fef6a8da2f64483f 100644
--- a/spec/lib/gitlab/git/diff_spec.rb
+++ b/spec/lib/gitlab/git/diff_spec.rb
@@ -182,7 +182,7 @@ EOT
     context "without default options" do
       let(:filtered_options) { described_class.filter_diff_options(options) }
 
-      it "should filter invalid options" do
+      it "filters invalid options" do
         expect(filtered_options).not_to have_key(:invalid_opt)
       end
     end
@@ -193,16 +193,16 @@ EOT
         described_class.filter_diff_options(options, default_options)
       end
 
-      it "should filter invalid options" do
+      it "filters invalid options" do
         expect(filtered_options).not_to have_key(:invalid_opt)
         expect(filtered_options).not_to have_key(:bad_opt)
       end
 
-      it "should merge with default options" do
+      it "merges with default options" do
         expect(filtered_options).to have_key(:ignore_whitespace_change)
       end
 
-      it "should override default options" do
+      it "overrides default options" do
         expect(filtered_options).to have_key(:max_files)
         expect(filtered_options[:max_files]).to eq(100)
       end
diff --git a/spec/lib/gitlab/git/gitmodules_parser_spec.rb b/spec/lib/gitlab/git/gitmodules_parser_spec.rb
index 6fd2b33486b20fad5475fea11950614517616188..de81dcd227d181e42b0b607040d9eab00e289c2e 100644
--- a/spec/lib/gitlab/git/gitmodules_parser_spec.rb
+++ b/spec/lib/gitlab/git/gitmodules_parser_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Git::GitmodulesParser do
-  it 'should parse a .gitmodules file correctly' do
+  it 'parses a .gitmodules file correctly' do
     data = <<~GITMODULES
       [submodule "vendor/libgit2"]
          path = vendor/libgit2
diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb
index fc8f590068a6868dd8448d147bb9df081f1fbad0..fdb43d1221aa87ed3e09e3c8f06af63d99964b64 100644
--- a/spec/lib/gitlab/git/repository_spec.rb
+++ b/spec/lib/gitlab/git/repository_spec.rb
@@ -450,20 +450,20 @@ describe Gitlab::Git::Repository, :seed_helper do
       ensure_seeds
     end
 
-    it "should create a new branch" do
+    it "creates a new branch" do
       expect(repository.create_branch('new_branch', 'master')).not_to be_nil
     end
 
-    it "should create a new branch with the right name" do
+    it "creates a new branch with the right name" do
       expect(repository.create_branch('another_branch', 'master').name).to eq('another_branch')
     end
 
-    it "should fail if we create an existing branch" do
+    it "fails if we create an existing branch" do
       repository.create_branch('duplicated_branch', 'master')
       expect {repository.create_branch('duplicated_branch', 'master')}.to raise_error("Branch duplicated_branch already exists")
     end
 
-    it "should fail if we create a branch from a non existing ref" do
+    it "fails if we create a branch from a non existing ref" do
       expect {repository.create_branch('branch_based_in_wrong_ref', 'master_2_the_revenge')}.to raise_error("Invalid reference master_2_the_revenge")
     end
   end
@@ -522,7 +522,7 @@ describe Gitlab::Git::Repository, :seed_helper do
   describe "#refs_hash" do
     subject { repository.refs_hash }
 
-    it "should have as many entries as branches and tags" do
+    it "has as many entries as branches and tags" do
       expected_refs = SeedRepo::Repo::BRANCHES + SeedRepo::Repo::TAGS
       # We flatten in case a commit is pointed at by more than one branch and/or tag
       expect(subject.values.flatten.size).to eq(expected_refs.size)
@@ -613,11 +613,11 @@ describe Gitlab::Git::Repository, :seed_helper do
     end
 
     shared_examples 'search files by content' do
-      it 'should have 2 items' do
+      it 'has 2 items' do
         expect(search_results.size).to eq(2)
       end
 
-      it 'should have the correct matching line' do
+      it 'has the correct matching line' do
         expect(search_results).to contain_exactly("search-files-by-content-branch:encoding/CHANGELOG\u00001\u0000search-files-by-content change\n",
                                                   "search-files-by-content-branch:anotherfile\u00001\u0000search-files-by-content change\n")
       end
@@ -850,7 +850,7 @@ describe Gitlab::Git::Repository, :seed_helper do
       context "where provides 'after' timestamp" do
         options = { after: Time.iso8601('2014-03-03T20:15:01+00:00') }
 
-        it "should returns commits on or after that timestamp" do
+        it "returns commits on or after that timestamp" do
           commits = repository.log(options)
 
           expect(commits.size).to be > 0
@@ -863,7 +863,7 @@ describe Gitlab::Git::Repository, :seed_helper do
       context "where provides 'before' timestamp" do
         options = { before: Time.iso8601('2014-03-03T20:15:01+00:00') }
 
-        it "should returns commits on or before that timestamp" do
+        it "returns commits on or before that timestamp" do
           commits = repository.log(options)
 
           expect(commits.size).to be > 0
@@ -1064,14 +1064,14 @@ describe Gitlab::Git::Repository, :seed_helper do
   end
 
   describe '#find_branch' do
-    it 'should return a Branch for master' do
+    it 'returns a Branch for master' do
       branch = repository.find_branch('master')
 
       expect(branch).to be_a_kind_of(Gitlab::Git::Branch)
       expect(branch.name).to eq('master')
     end
 
-    it 'should handle non-existent branch' do
+    it 'handles non-existent branch' do
       branch = repository.find_branch('this-is-garbage')
 
       expect(branch).to eq(nil)
diff --git a/spec/lib/gitlab/kubernetes/cluster_role_binding_spec.rb b/spec/lib/gitlab/kubernetes/cluster_role_binding_spec.rb
index 4a669408025b197c42b42ab83a5d50beae492621..e1106f7496af74805c8f1002c654c3229e7f4d2f 100644
--- a/spec/lib/gitlab/kubernetes/cluster_role_binding_spec.rb
+++ b/spec/lib/gitlab/kubernetes/cluster_role_binding_spec.rb
@@ -28,7 +28,7 @@ describe Gitlab::Kubernetes::ClusterRoleBinding do
 
     subject { cluster_role_binding.generate }
 
-    it 'should build a Kubeclient Resource' do
+    it 'builds a Kubeclient Resource' do
       is_expected.to eq(resource)
     end
   end
diff --git a/spec/lib/gitlab/kubernetes/config_map_spec.rb b/spec/lib/gitlab/kubernetes/config_map_spec.rb
index fe65d03875f794d2d25018fc162e7d7978904bdb..911d6024804a2c9346c6af758edf518c86e8048f 100644
--- a/spec/lib/gitlab/kubernetes/config_map_spec.rb
+++ b/spec/lib/gitlab/kubernetes/config_map_spec.rb
@@ -18,7 +18,7 @@ describe Gitlab::Kubernetes::ConfigMap do
     let(:resource) { ::Kubeclient::Resource.new(metadata: metadata, data: application.files) }
     subject { config_map.generate }
 
-    it 'should build a Kubeclient Resource' do
+    it 'builds a Kubeclient Resource' do
       is_expected.to eq(resource)
     end
   end
diff --git a/spec/lib/gitlab/kubernetes/helm/base_command_spec.rb b/spec/lib/gitlab/kubernetes/helm/base_command_spec.rb
index aacae78be4395b1c18be80e484ab97154cd6b411..78a4eb44e38df3717051f48c2ee3bf46532e3c82 100644
--- a/spec/lib/gitlab/kubernetes/helm/base_command_spec.rb
+++ b/spec/lib/gitlab/kubernetes/helm/base_command_spec.rb
@@ -41,7 +41,7 @@ describe Gitlab::Kubernetes::Helm::BaseCommand do
   describe '#pod_resource' do
     subject { base_command.pod_resource }
 
-    it 'should returns a kubeclient resoure with pod content for application' do
+    it 'returns a kubeclient resoure with pod content for application' do
       is_expected.to be_an_instance_of ::Kubeclient::Resource
     end
 
diff --git a/spec/lib/gitlab/kubernetes/helm/certificate_spec.rb b/spec/lib/gitlab/kubernetes/helm/certificate_spec.rb
index 167bee22fc36f035067e9c36e2608ac9923952e5..046493539761125ba47de0bc795f8fb58d7b1ef9 100644
--- a/spec/lib/gitlab/kubernetes/helm/certificate_spec.rb
+++ b/spec/lib/gitlab/kubernetes/helm/certificate_spec.rb
@@ -5,7 +5,7 @@ describe Gitlab::Kubernetes::Helm::Certificate do
   describe '.generate_root' do
     subject { described_class.generate_root }
 
-    it 'should generate a root CA that expires a long way in the future' do
+    it 'generates a root CA that expires a long way in the future' do
       expect(subject.cert.not_after).to be > 999.years.from_now
     end
   end
@@ -13,14 +13,14 @@ describe Gitlab::Kubernetes::Helm::Certificate do
   describe '#issue' do
     subject { described_class.generate_root.issue }
 
-    it 'should generate a cert that expires soon' do
+    it 'generates a cert that expires soon' do
       expect(subject.cert.not_after).to be < 60.minutes.from_now
     end
 
     context 'passing in INFINITE_EXPIRY' do
       subject { described_class.generate_root.issue(expires_in: described_class::INFINITE_EXPIRY) }
 
-      it 'should generate a cert that expires a long way in the future' do
+      it 'generates a cert that expires a long way in the future' do
         expect(subject.cert.not_after).to be > 999.years.from_now
       end
     end
diff --git a/spec/lib/gitlab/kubernetes/helm/pod_spec.rb b/spec/lib/gitlab/kubernetes/helm/pod_spec.rb
index 95b6b3fd953d76980fc8b4559bbdfdc7df391e53..06c8d12795102fce33e4598ff6e3c78883968800 100644
--- a/spec/lib/gitlab/kubernetes/helm/pod_spec.rb
+++ b/spec/lib/gitlab/kubernetes/helm/pod_spec.rb
@@ -10,11 +10,11 @@ describe Gitlab::Kubernetes::Helm::Pod do
     subject { described_class.new(command, namespace, service_account_name: service_account_name) }
 
     context 'with a command' do
-      it 'should generate a Kubeclient::Resource' do
+      it 'generates a Kubeclient::Resource' do
         expect(subject.generate).to be_a_kind_of(Kubeclient::Resource)
       end
 
-      it 'should generate the appropriate metadata' do
+      it 'generates the appropriate metadata' do
         metadata = subject.generate.metadata
         expect(metadata.name).to eq("install-#{app.name}")
         expect(metadata.namespace).to eq('gitlab-managed-apps')
@@ -22,12 +22,12 @@ describe Gitlab::Kubernetes::Helm::Pod do
         expect(metadata.labels['gitlab.org/application']).to eq(app.name)
       end
 
-      it 'should generate a container spec' do
+      it 'generates a container spec' do
         spec = subject.generate.spec
         expect(spec.containers.count).to eq(1)
       end
 
-      it 'should generate the appropriate specifications for the container' do
+      it 'generates the appropriate specifications for the container' do
         container = subject.generate.spec.containers.first
         expect(container.name).to eq('helm')
         expect(container.image).to eq('registry.gitlab.com/gitlab-org/cluster-integration/helm-install-image/releases/2.12.3-kube-1.11.7')
@@ -37,30 +37,30 @@ describe Gitlab::Kubernetes::Helm::Pod do
         expect(container.args).to match_array(["-c", "$(COMMAND_SCRIPT)"])
       end
 
-      it 'should include a never restart policy' do
+      it 'includes a never restart policy' do
         spec = subject.generate.spec
         expect(spec.restartPolicy).to eq('Never')
       end
 
-      it 'should include volumes for the container' do
+      it 'includes volumes for the container' do
         container = subject.generate.spec.containers.first
         expect(container.volumeMounts.first['name']).to eq('configuration-volume')
         expect(container.volumeMounts.first['mountPath']).to eq("/data/helm/#{app.name}/config")
       end
 
-      it 'should include a volume inside the specification' do
+      it 'includes a volume inside the specification' do
         spec = subject.generate.spec
         expect(spec.volumes.first['name']).to eq('configuration-volume')
       end
 
-      it 'should mount configMap specification in the volume' do
+      it 'mounts configMap specification in the volume' do
         volume = subject.generate.spec.volumes.first
         expect(volume.configMap['name']).to eq("values-content-configuration-#{app.name}")
         expect(volume.configMap['items'].first['key']).to eq(:'values.yaml')
         expect(volume.configMap['items'].first['path']).to eq(:'values.yaml')
       end
 
-      it 'should have no serviceAccountName' do
+      it 'has no serviceAccountName' do
         spec = subject.generate.spec
         expect(spec.serviceAccountName).to be_nil
       end
@@ -68,7 +68,7 @@ describe Gitlab::Kubernetes::Helm::Pod do
       context 'with a service_account_name' do
         let(:service_account_name) { 'sa' }
 
-        it 'should use the serviceAccountName provided' do
+        it 'uses the serviceAccountName provided' do
           spec = subject.generate.spec
           expect(spec.serviceAccountName).to eq(service_account_name)
         end
diff --git a/spec/lib/gitlab/kubernetes/role_binding_spec.rb b/spec/lib/gitlab/kubernetes/role_binding_spec.rb
index a1a59533bfb1dbf8ab7583db1b8f6563bd5b3026..50acee254cb4a2fa054b2fde537def2b7cadeefe 100644
--- a/spec/lib/gitlab/kubernetes/role_binding_spec.rb
+++ b/spec/lib/gitlab/kubernetes/role_binding_spec.rb
@@ -42,7 +42,7 @@ describe Gitlab::Kubernetes::RoleBinding, '#generate' do
     ).generate
   end
 
-  it 'should build a Kubeclient Resource' do
+  it 'builds a Kubeclient Resource' do
     is_expected.to eq(resource)
   end
 end
diff --git a/spec/lib/gitlab/kubernetes/service_account_spec.rb b/spec/lib/gitlab/kubernetes/service_account_spec.rb
index 8da9e932dc3e4be0c4ffe61a6ca04a16c8af0a50..0d525966d1842ee17ad24ce0be19ef29bf9a17f2 100644
--- a/spec/lib/gitlab/kubernetes/service_account_spec.rb
+++ b/spec/lib/gitlab/kubernetes/service_account_spec.rb
@@ -17,7 +17,7 @@ describe Gitlab::Kubernetes::ServiceAccount do
 
     subject { service_account.generate }
 
-    it 'should build a Kubeclient Resource' do
+    it 'builds a Kubeclient Resource' do
       is_expected.to eq(resource)
     end
   end
diff --git a/spec/lib/gitlab/kubernetes/service_account_token_spec.rb b/spec/lib/gitlab/kubernetes/service_account_token_spec.rb
index 0773d3d9aec11b4ac4a3b5a61a2aad976a524ae1..0d334bed45fdb3c8c34c720adba3a56cd122f83c 100644
--- a/spec/lib/gitlab/kubernetes/service_account_token_spec.rb
+++ b/spec/lib/gitlab/kubernetes/service_account_token_spec.rb
@@ -28,7 +28,7 @@ describe Gitlab::Kubernetes::ServiceAccountToken do
 
     subject { service_account_token.generate }
 
-    it 'should build a Kubeclient Resource' do
+    it 'builds a Kubeclient Resource' do
       is_expected.to eq(resource)
     end
   end
diff --git a/spec/lib/gitlab/search_results_spec.rb b/spec/lib/gitlab/search_results_spec.rb
index 4b57eecff9305b6caf24c9dbc73c03504205ba0c..312aa3be490b2c8e01eee8a7da3ad1f72454e244 100644
--- a/spec/lib/gitlab/search_results_spec.rb
+++ b/spec/lib/gitlab/search_results_spec.rb
@@ -97,7 +97,7 @@ describe Gitlab::SearchResults do
         results.objects('merge_requests')
       end
 
-      it 'it skips project filter if default project context is used' do
+      it 'skips project filter if default project context is used' do
         allow(results).to receive(:default_project_filter).and_return(true)
 
         expect(results).not_to receive(:project_ids_relation)
@@ -113,7 +113,7 @@ describe Gitlab::SearchResults do
         results.objects('issues')
       end
 
-      it 'it skips project filter if default project context is used' do
+      it 'skips project filter if default project context is used' do
         allow(results).to receive(:default_project_filter).and_return(true)
 
         expect(results).not_to receive(:project_ids_relation)
diff --git a/spec/lib/gitlab/tracing/rails/action_view_subscriber_spec.rb b/spec/lib/gitlab/tracing/rails/action_view_subscriber_spec.rb
index c9d1a06b3e63aa93484daa9e918a16f068466c12..0bbaf5968ed4d87b593eb1fad25ae475c5263d79 100644
--- a/spec/lib/gitlab/tracing/rails/action_view_subscriber_spec.rb
+++ b/spec/lib/gitlab/tracing/rails/action_view_subscriber_spec.rb
@@ -7,19 +7,19 @@ describe Gitlab::Tracing::Rails::ActionViewSubscriber do
   using RSpec::Parameterized::TableSyntax
 
   shared_examples 'an actionview notification' do
-    it 'should notify the tracer when the hash contains null values' do
+    it 'notifies the tracer when the hash contains null values' do
       expect(subject).to receive(:postnotify_span).with(notification_name, start, finish, tags: expected_tags, exception: exception)
 
       subject.public_send(notify_method, start, finish, payload)
     end
 
-    it 'should notify the tracer when the payload is missing values' do
+    it 'notifies the tracer when the payload is missing values' do
       expect(subject).to receive(:postnotify_span).with(notification_name, start, finish, tags: expected_tags, exception: exception)
 
       subject.public_send(notify_method, start, finish, payload.compact)
     end
 
-    it 'should not throw exceptions when with the default tracer' do
+    it 'does not throw exceptions when with the default tracer' do
       expect { subject.public_send(notify_method, start, finish, payload) }.not_to raise_error
     end
   end
diff --git a/spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb b/spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb
index 3d0668431489869b3b93c68f2f135d6f59841591..7bd0875fa680d46798b325e3a6c8bb8dc2451da6 100644
--- a/spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb
+++ b/spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb
@@ -53,19 +53,19 @@ describe Gitlab::Tracing::Rails::ActiveRecordSubscriber do
         }
       end
 
-      it 'should notify the tracer when the hash contains null values' do
+      it 'notifies the tracer when the hash contains null values' do
         expect(subject).to receive(:postnotify_span).with(operation_name, start, finish, tags: expected_tags, exception: exception)
 
         subject.notify(start, finish, payload)
       end
 
-      it 'should notify the tracer when the payload is missing values' do
+      it 'notifies the tracer when the payload is missing values' do
         expect(subject).to receive(:postnotify_span).with(operation_name, start, finish, tags: expected_tags, exception: exception)
 
         subject.notify(start, finish, payload.compact)
       end
 
-      it 'should not throw exceptions when with the default tracer' do
+      it 'does not throw exceptions when with the default tracer' do
         expect { subject.notify(start, finish, payload) }.not_to raise_error
       end
     end
diff --git a/spec/lib/gitlab/tracing_spec.rb b/spec/lib/gitlab/tracing_spec.rb
index 566b5050e47978e22564f1d95e405ed3eba56773..db75ce2a998e0c32332903f2e44a75f24df293d3 100644
--- a/spec/lib/gitlab/tracing_spec.rb
+++ b/spec/lib/gitlab/tracing_spec.rb
@@ -14,7 +14,7 @@ describe Gitlab::Tracing do
     end
 
     with_them do
-      it 'should return the correct state for .enabled?' do
+      it 'returns the correct state for .enabled?' do
         expect(described_class).to receive(:connection_string).and_return(connection_string)
 
         expect(described_class.enabled?).to eq(enabled_state)
@@ -33,7 +33,7 @@ describe Gitlab::Tracing do
     end
 
     with_them do
-      it 'should return the correct state for .tracing_url_enabled?' do
+      it 'returns the correct state for .tracing_url_enabled?' do
         expect(described_class).to receive(:enabled?).and_return(enabled?)
         allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)
 
@@ -56,7 +56,7 @@ describe Gitlab::Tracing do
     end
 
     with_them do
-      it 'should return the correct state for .tracing_url' do
+      it 'returns the correct state for .tracing_url' do
         expect(described_class).to receive(:tracing_url_enabled?).and_return(tracing_url_enabled?)
         allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)
         allow(Gitlab::CorrelationId).to receive(:current_id).and_return(correlation_id)
diff --git a/spec/lib/gitlab/url_sanitizer_spec.rb b/spec/lib/gitlab/url_sanitizer_spec.rb
index 6e98a9997663f7ec8d1010239c1fd4c190c3cc58..5861e6955a6140245ae794d0c57a1f60a03c29a3 100644
--- a/spec/lib/gitlab/url_sanitizer_spec.rb
+++ b/spec/lib/gitlab/url_sanitizer_spec.rb
@@ -161,7 +161,7 @@ describe Gitlab::UrlSanitizer do
   end
 
   context 'when credentials contains special chars' do
-    it 'should parse the URL without errors' do
+    it 'parses the URL without errors' do
       url_sanitizer = described_class.new("https://foo:b?r@github.com/me/project.git")
 
       expect(url_sanitizer.sanitized_url).to eq("https://github.com/me/project.git")
diff --git a/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb b/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb
index b1ff3cfd355a3806c612fbc712669a8387ed18f0..349cffea70efba33cd35606c49c5aae942841d3f 100644
--- a/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb
+++ b/spec/migrations/migrate_auto_dev_ops_domain_to_cluster_domain_spec.rb
@@ -25,7 +25,7 @@ describe MigrateAutoDevOpsDomainToClusterDomain, :migration do
   context 'with ProjectAutoDevOps with no domain' do
     let(:domain) { nil }
 
-    it 'should not update cluster project' do
+    it 'does not update cluster project' do
       migrate!
 
       expect(clusters_without_domain.count).to eq(clusters_table.count)
@@ -35,7 +35,7 @@ describe MigrateAutoDevOpsDomainToClusterDomain, :migration do
   context 'with ProjectAutoDevOps with domain' do
     let(:domain) { 'example-domain.com' }
 
-    it 'should update all cluster projects' do
+    it 'updates all cluster projects' do
       migrate!
 
       expect(clusters_with_domain.count).to eq(clusters_table.count)
@@ -49,7 +49,7 @@ describe MigrateAutoDevOpsDomainToClusterDomain, :migration do
       setup_cluster_projects_with_domain(quantity: 25, domain: nil)
     end
 
-    it 'should only update specific cluster projects' do
+    it 'only updates specific cluster projects' do
       migrate!
 
       expect(clusters_with_domain.count).to eq(20)
diff --git a/spec/models/badge_spec.rb b/spec/models/badge_spec.rb
index 314d7d1e9f488ff77fbdf2e04e60bc61ab056450..c661f5384eaff1a98f26c26e6f41f2aaeda790cc 100644
--- a/spec/models/badge_spec.rb
+++ b/spec/models/badge_spec.rb
@@ -61,7 +61,7 @@ describe Badge do
   end
 
   shared_examples 'rendered_links' do
-    it 'should use the project information to populate the url placeholders' do
+    it 'uses the project information to populate the url placeholders' do
       stub_project_commit_info(project)
 
       expect(badge.public_send("rendered_#{method}", project)).to eq "http://www.example.com/#{project.full_path}/#{project.id}/master/whatever"
diff --git a/spec/models/badges/project_badge_spec.rb b/spec/models/badges/project_badge_spec.rb
index e683d110252b71252de2ff004da3b606ed6c13e2..d41c5cf2ca14bf5fc0eea67480d6700f60ee628e 100644
--- a/spec/models/badges/project_badge_spec.rb
+++ b/spec/models/badges/project_badge_spec.rb
@@ -14,7 +14,7 @@ describe ProjectBadge do
   end
 
   shared_examples 'rendered_links' do
-    it 'should use the badge project information to populate the url placeholders' do
+    it 'uses the badge project information to populate the url placeholders' do
       stub_project_commit_info(project)
 
       expect(badge.public_send("rendered_#{method}")).to eq "http://www.example.com/#{project.full_path}/#{project.id}/master/whatever"
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index 697fe3fda06afd3abaa0c9314783a4e9e83d1878..b9ece6a394acd6dd99572eec533a15637e95d116 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -2726,13 +2726,13 @@ describe Ci::Build do
           project.deploy_tokens << deploy_token
         end
 
-        it 'should include deploy token variables' do
+        it 'includes deploy token variables' do
           is_expected.to include(*deploy_token_variables)
         end
       end
 
       context 'when gitlab-deploy-token does not exist' do
-        it 'should not include deploy token variables' do
+        it 'does not include deploy token variables' do
           expect(subject.find { |v| v[:key] == 'CI_DEPLOY_USER'}).to be_nil
           expect(subject.find { |v| v[:key] == 'CI_DEPLOY_PASSWORD'}).to be_nil
         end
diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb
index b3ab63925dd6b33d3c8f34e2bc08b25df089b349..2cb581696a0102148168022eacd56be922985ec6 100644
--- a/spec/models/ci/runner_spec.rb
+++ b/spec/models/ci/runner_spec.rb
@@ -72,7 +72,7 @@ describe Ci::Runner do
         expect(instance_runner.errors.full_messages).to include('Runner cannot have projects assigned')
       end
 
-      it 'should fail to save a group assigned to a project runner even if the runner is already saved' do
+      it 'fails to save a group assigned to a project runner even if the runner is already saved' do
         group_runner
 
         expect { create(:group, runners: [project_runner]) }
diff --git a/spec/models/clusters/applications/cert_manager_spec.rb b/spec/models/clusters/applications/cert_manager_spec.rb
index af7eadfc74c935a4974cab776d6dbb5d70177971..5cd80edb3a134eb2108255dedae38c2b0bf4b3b7 100644
--- a/spec/models/clusters/applications/cert_manager_spec.rb
+++ b/spec/models/clusters/applications/cert_manager_spec.rb
@@ -36,7 +36,7 @@ describe Clusters::Applications::CertManager do
 
     it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::InstallCommand) }
 
-    it 'should be initialized with cert_manager arguments' do
+    it 'is initialized with cert_manager arguments' do
       expect(subject.name).to eq('certmanager')
       expect(subject.chart).to eq('stable/cert-manager')
       expect(subject.version).to eq('v0.5.2')
@@ -52,7 +52,7 @@ describe Clusters::Applications::CertManager do
         cert_manager.email = cert_email
       end
 
-      it 'should use his/her email to register issuer with certificate provider' do
+      it 'uses his/her email to register issuer with certificate provider' do
         expect(subject.files).to eq(cert_manager.files.merge(cluster_issuer_file))
       end
     end
@@ -68,7 +68,7 @@ describe Clusters::Applications::CertManager do
     context 'application failed to install previously' do
       let(:cert_manager) { create(:clusters_applications_cert_managers, :errored, version: '0.0.1') }
 
-      it 'should be initialized with the locked version' do
+      it 'is initialized with the locked version' do
         expect(subject.version).to eq('v0.5.2')
       end
     end
@@ -80,7 +80,7 @@ describe Clusters::Applications::CertManager do
 
     subject { application.files }
 
-    it 'should include cert_manager specific keys in the values.yaml file' do
+    it 'includes cert_manager specific keys in the values.yaml file' do
       expect(values).to include('ingressShim')
     end
   end
diff --git a/spec/models/clusters/applications/helm_spec.rb b/spec/models/clusters/applications/helm_spec.rb
index f97d126d918ff4122c48c1ad14ce156e146607f0..f177d493a2e8274d782f84f6f144fa9ba28320b8 100644
--- a/spec/models/clusters/applications/helm_spec.rb
+++ b/spec/models/clusters/applications/helm_spec.rb
@@ -36,11 +36,11 @@ describe Clusters::Applications::Helm do
 
     it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::InitCommand) }
 
-    it 'should be initialized with 1 arguments' do
+    it 'is initialized with 1 arguments' do
       expect(subject.name).to eq('helm')
     end
 
-    it 'should have cert files' do
+    it 'has cert files' do
       expect(subject.files[:'ca.pem']).to be_present
       expect(subject.files[:'ca.pem']).to eq(helm.ca_cert)
 
diff --git a/spec/models/clusters/applications/ingress_spec.rb b/spec/models/clusters/applications/ingress_spec.rb
index 09e60b9a206d04a4267ace827968a0d5d7260de0..113d29b5551c29ac10527eab90a6e8135f46d7a9 100644
--- a/spec/models/clusters/applications/ingress_spec.rb
+++ b/spec/models/clusters/applications/ingress_spec.rb
@@ -73,7 +73,7 @@ describe Clusters::Applications::Ingress do
 
     it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::InstallCommand) }
 
-    it 'should be initialized with ingress arguments' do
+    it 'is initialized with ingress arguments' do
       expect(subject.name).to eq('ingress')
       expect(subject.chart).to eq('stable/nginx-ingress')
       expect(subject.version).to eq('1.1.2')
@@ -92,7 +92,7 @@ describe Clusters::Applications::Ingress do
     context 'application failed to install previously' do
       let(:ingress) { create(:clusters_applications_ingress, :errored, version: 'nginx') }
 
-      it 'should be initialized with the locked version' do
+      it 'is initialized with the locked version' do
         expect(subject.version).to eq('1.1.2')
       end
     end
@@ -104,7 +104,7 @@ describe Clusters::Applications::Ingress do
 
     subject { application.files }
 
-    it 'should include ingress valid keys in values' do
+    it 'includes ingress valid keys in values' do
       expect(values).to include('image')
       expect(values).to include('repository')
       expect(values).to include('stats')
diff --git a/spec/models/clusters/applications/jupyter_spec.rb b/spec/models/clusters/applications/jupyter_spec.rb
index 5970a1959b501557bd18bec50528800ea5a0f43e..1a7363b64f96b56b06edcd0ee1bb614f97e65da0 100644
--- a/spec/models/clusters/applications/jupyter_spec.rb
+++ b/spec/models/clusters/applications/jupyter_spec.rb
@@ -45,7 +45,7 @@ describe Clusters::Applications::Jupyter do
 
     it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::InstallCommand) }
 
-    it 'should be initialized with 4 arguments' do
+    it 'is initialized with 4 arguments' do
       expect(subject.name).to eq('jupyter')
       expect(subject.chart).to eq('jupyter/jupyterhub')
       expect(subject.version).to eq('0.9-174bbd5')
@@ -65,7 +65,7 @@ describe Clusters::Applications::Jupyter do
     context 'application failed to install previously' do
       let(:jupyter) { create(:clusters_applications_jupyter, :errored, version: '0.0.1') }
 
-      it 'should be initialized with the locked version' do
+      it 'is initialized with the locked version' do
         expect(subject.version).to eq('0.9-174bbd5')
       end
     end
@@ -77,7 +77,7 @@ describe Clusters::Applications::Jupyter do
 
     subject { application.files }
 
-    it 'should include valid values' do
+    it 'includes valid values' do
       expect(values).to include('ingress')
       expect(values).to include('hub')
       expect(values).to include('rbac')
diff --git a/spec/models/clusters/applications/knative_spec.rb b/spec/models/clusters/applications/knative_spec.rb
index 25493689fbc5b050fa37015e022d82410acdee3b..5e68f2634dafcb9883097ebf339d1652cb1e9987 100644
--- a/spec/models/clusters/applications/knative_spec.rb
+++ b/spec/models/clusters/applications/knative_spec.rb
@@ -77,17 +77,17 @@ describe Clusters::Applications::Knative do
   end
 
   shared_examples 'a command' do
-    it 'should be an instance of Helm::InstallCommand' do
+    it 'is an instance of Helm::InstallCommand' do
       expect(subject).to be_an_instance_of(Gitlab::Kubernetes::Helm::InstallCommand)
     end
 
-    it 'should be initialized with knative arguments' do
+    it 'is initialized with knative arguments' do
       expect(subject.name).to eq('knative')
       expect(subject.chart).to eq('knative/knative')
       expect(subject.files).to eq(knative.files)
     end
 
-    it 'should not install metrics for prometheus' do
+    it 'does not install metrics for prometheus' do
       expect(subject.postinstall).to be_nil
     end
 
@@ -97,7 +97,7 @@ describe Clusters::Applications::Knative do
 
       subject { knative.install_command }
 
-      it 'should install metrics' do
+      it 'installs metrics' do
         expect(subject.postinstall).not_to be_nil
         expect(subject.postinstall.length).to be(1)
         expect(subject.postinstall[0]).to eql("kubectl apply -f #{Clusters::Applications::Knative::METRICS_CONFIG}")
@@ -108,7 +108,7 @@ describe Clusters::Applications::Knative do
   describe '#install_command' do
     subject { knative.install_command }
 
-    it 'should be initialized with latest version' do
+    it 'is initialized with latest version' do
       expect(subject.version).to eq('0.3.0')
     end
 
@@ -119,7 +119,7 @@ describe Clusters::Applications::Knative do
     let!(:current_installed_version) { knative.version = '0.1.0' }
     subject { knative.update_command }
 
-    it 'should be initialized with current version' do
+    it 'is initialized with current version' do
       expect(subject.version).to eq(current_installed_version)
     end
 
@@ -132,7 +132,7 @@ describe Clusters::Applications::Knative do
 
     subject { application.files }
 
-    it 'should include knative specific keys in the values.yaml file' do
+    it 'includes knative specific keys in the values.yaml file' do
       expect(values).to include('domain')
     end
   end
@@ -165,7 +165,7 @@ describe Clusters::Applications::Knative do
       synchronous_reactive_cache(knative)
     end
 
-    it 'should be able k8s core for pod details' do
+    it 'is able k8s core for pod details' do
       expect(knative.service_pod_details(namespace.namespace, cluster.cluster_project.project.name)).not_to be_nil
     end
   end
@@ -190,7 +190,7 @@ describe Clusters::Applications::Knative do
       stub_kubeclient_service_pods
     end
 
-    it 'should have an unintialized cache' do
+    it 'has an unintialized cache' do
       is_expected.to be_nil
     end
 
@@ -204,11 +204,11 @@ describe Clusters::Applications::Knative do
         synchronous_reactive_cache(knative)
       end
 
-      it 'should have cached services' do
+      it 'has cached services' do
         is_expected.not_to be_nil
       end
 
-      it 'should match our namespace' do
+      it 'matches our namespace' do
         expect(knative.services_for(ns: namespace)).not_to be_nil
       end
     end
diff --git a/spec/models/clusters/applications/prometheus_spec.rb b/spec/models/clusters/applications/prometheus_spec.rb
index 82a502addd4ed8be9ec4ce569cbee342b473e7cb..e8ba9737c23d3607bc09844e3b0e56a5678a13e7 100644
--- a/spec/models/clusters/applications/prometheus_spec.rb
+++ b/spec/models/clusters/applications/prometheus_spec.rb
@@ -94,7 +94,7 @@ describe Clusters::Applications::Prometheus do
 
     it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::InstallCommand) }
 
-    it 'should be initialized with 3 arguments' do
+    it 'is initialized with 3 arguments' do
       expect(subject.name).to eq('prometheus')
       expect(subject.chart).to eq('stable/prometheus')
       expect(subject.version).to eq('6.7.3')
@@ -113,12 +113,12 @@ describe Clusters::Applications::Prometheus do
     context 'application failed to install previously' do
       let(:prometheus) { create(:clusters_applications_prometheus, :errored, version: '2.0.0') }
 
-      it 'should be initialized with the locked version' do
+      it 'is initialized with the locked version' do
         expect(subject.version).to eq('6.7.3')
       end
     end
 
-    it 'should not install knative metrics' do
+    it 'does not install knative metrics' do
       expect(subject.postinstall).to be_nil
     end
 
@@ -128,7 +128,7 @@ describe Clusters::Applications::Prometheus do
 
       subject { prometheus.install_command }
 
-      it 'should install knative metrics' do
+      it 'installs knative metrics' do
         expect(subject.postinstall).to include("kubectl apply -f #{Clusters::Applications::Knative::METRICS_CONFIG}")
       end
     end
@@ -142,7 +142,7 @@ describe Clusters::Applications::Prometheus do
       expect(prometheus.upgrade_command(values)).to be_an_instance_of(::Gitlab::Kubernetes::Helm::InstallCommand)
     end
 
-    it 'should be initialized with 3 arguments' do
+    it 'is initialized with 3 arguments' do
       command = prometheus.upgrade_command(values)
 
       expect(command.name).to eq('prometheus')
@@ -180,7 +180,7 @@ describe Clusters::Applications::Prometheus do
 
     subject { application.files }
 
-    it 'should include prometheus valid values' do
+    it 'includes prometheus valid values' do
       expect(values).to include('alertmanager')
       expect(values).to include('kubeStateMetrics')
       expect(values).to include('nodeExporter')
@@ -204,7 +204,7 @@ describe Clusters::Applications::Prometheus do
       expect(subject[:'values.yaml']).to eq({ hello: :world })
     end
 
-    it 'should include cert files' do
+    it 'includes cert files' do
       expect(subject[:'ca.pem']).to be_present
       expect(subject[:'ca.pem']).to eq(application.cluster.application_helm.ca_cert)
 
@@ -220,7 +220,7 @@ describe Clusters::Applications::Prometheus do
         application.cluster.application_helm.ca_cert = nil
       end
 
-      it 'should not include cert files' do
+      it 'does not include cert files' do
         expect(subject[:'ca.pem']).not_to be_present
         expect(subject[:'cert.pem']).not_to be_present
         expect(subject[:'key.pem']).not_to be_present
diff --git a/spec/models/clusters/applications/runner_spec.rb b/spec/models/clusters/applications/runner_spec.rb
index 7e2f5835279b05e7723deb9f806365c633e9b901..399a13f82cb21e6f8ba2ab67fa5cccd522449795 100644
--- a/spec/models/clusters/applications/runner_spec.rb
+++ b/spec/models/clusters/applications/runner_spec.rb
@@ -21,7 +21,7 @@ describe Clusters::Applications::Runner do
 
     it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::InstallCommand) }
 
-    it 'should be initialized with 4 arguments' do
+    it 'is initialized with 4 arguments' do
       expect(subject.name).to eq('runner')
       expect(subject.chart).to eq('runner/gitlab-runner')
       expect(subject.version).to eq('0.3.0')
@@ -41,7 +41,7 @@ describe Clusters::Applications::Runner do
     context 'application failed to install previously' do
       let(:gitlab_runner) { create(:clusters_applications_runner, :errored, runner: ci_runner, version: '0.1.13') }
 
-      it 'should be initialized with the locked version' do
+      it 'is initialized with the locked version' do
         expect(subject.version).to eq('0.3.0')
       end
     end
@@ -53,7 +53,7 @@ describe Clusters::Applications::Runner do
 
     subject { application.files }
 
-    it 'should include runner valid values' do
+    it 'includes runner valid values' do
       expect(values).to include('concurrent')
       expect(values).to include('checkInterval')
       expect(values).to include('rbac')
@@ -131,7 +131,7 @@ describe Clusters::Applications::Runner do
         allow(application).to receive(:chart_values).and_return(stub_values)
       end
 
-      it 'should overwrite values.yaml' do
+      it 'overwrites values.yaml' do
         expect(values).to match(/privileged: '?#{application.privileged}/)
       end
     end
diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb
index fabd2806d9a14cf0c146b09a4a8f4471e7740046..894ef3fb9569b5d789d74ed3ee391d1d621193b1 100644
--- a/spec/models/clusters/cluster_spec.rb
+++ b/spec/models/clusters/cluster_spec.rb
@@ -269,7 +269,7 @@ describe Clusters::Cluster do
       context 'when cluster is not a valid hostname' do
         let(:cluster) { build(:cluster, domain: 'http://not.a.valid.hostname') }
 
-        it 'should add an error on domain' do
+        it 'adds an error on domain' do
           expect(subject).not_to be_valid
           expect(subject.errors[:domain].first).to eq('contains invalid characters (valid characters: [a-z0-9\\-])')
         end
@@ -599,7 +599,7 @@ describe Clusters::Cluster do
         stub_application_setting(auto_devops_domain: 'global_domain.com')
       end
 
-      it 'should include KUBE_INGRESS_BASE_DOMAIN' do
+      it 'includes KUBE_INGRESS_BASE_DOMAIN' do
         expect(subject.to_hash).to include(KUBE_INGRESS_BASE_DOMAIN: 'global_domain.com')
       end
     end
@@ -607,7 +607,7 @@ describe Clusters::Cluster do
     context 'with a cluster domain' do
       let(:cluster) { create(:cluster, :provided_by_gcp, domain: 'example.com') }
 
-      it 'should include KUBE_INGRESS_BASE_DOMAIN' do
+      it 'includes KUBE_INGRESS_BASE_DOMAIN' do
         expect(subject.to_hash).to include(KUBE_INGRESS_BASE_DOMAIN: 'example.com')
       end
     end
@@ -615,7 +615,7 @@ describe Clusters::Cluster do
     context 'with no domain' do
       let(:cluster) { create(:cluster, :provided_by_gcp, :project) }
 
-      it 'should return an empty array' do
+      it 'returns an empty array' do
         expect(subject.to_hash).to be_empty
       end
     end
diff --git a/spec/models/clusters/kubernetes_namespace_spec.rb b/spec/models/clusters/kubernetes_namespace_spec.rb
index 579f486f99f24730f16b28391255134e945a5fa2..b5cba80b80636a67cf0983177d9f852f2b2c3a8c 100644
--- a/spec/models/clusters/kubernetes_namespace_spec.rb
+++ b/spec/models/clusters/kubernetes_namespace_spec.rb
@@ -60,7 +60,7 @@ RSpec.describe Clusters::KubernetesNamespace, type: :model do
       context 'when platform has a namespace assigned' do
         let(:namespace) { 'platform-namespace' }
 
-        it 'should copy the namespace' do
+        it 'copies the namespace' do
           subject
 
           expect(kubernetes_namespace.namespace).to eq('platform-namespace')
@@ -72,7 +72,7 @@ RSpec.describe Clusters::KubernetesNamespace, type: :model do
         let(:namespace) { nil }
         let(:project_slug) { "#{project.path}-#{project.id}" }
 
-        it 'should fallback to project namespace' do
+        it 'fallbacks to project namespace' do
           subject
 
           expect(kubernetes_namespace.namespace).to eq(project_slug)
@@ -83,7 +83,7 @@ RSpec.describe Clusters::KubernetesNamespace, type: :model do
     describe '#service_account_name' do
       let(:service_account_name) { "#{kubernetes_namespace.namespace}-service-account" }
 
-      it 'should set a service account name based on namespace' do
+      it 'sets a service account name based on namespace' do
         subject
 
         expect(kubernetes_namespace.service_account_name).to eq(service_account_name)
diff --git a/spec/models/clusters/platforms/kubernetes_spec.rb b/spec/models/clusters/platforms/kubernetes_spec.rb
index 14bec17a2bd72f1f7df7ccdf24e1a6ada1450991..0281dd2c303e6278d96c9a639eebe068e7b5cfbe 100644
--- a/spec/models/clusters/platforms/kubernetes_spec.rb
+++ b/spec/models/clusters/platforms/kubernetes_spec.rb
@@ -447,7 +447,7 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching
     let(:platform) { cluster.platform }
 
     context 'when namespace is updated' do
-      it 'should call ConfigureWorker' do
+      it 'calls ConfigureWorker' do
         expect(ClusterConfigureWorker).to receive(:perform_async).with(cluster.id).once
 
         platform.namespace = 'new-namespace'
@@ -456,7 +456,7 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching
     end
 
     context 'when namespace is not updated' do
-      it 'should not call ConfigureWorker' do
+      it 'does not call ConfigureWorker' do
         expect(ClusterConfigureWorker).not_to receive(:perform_async)
 
         platform.username = "new-username"
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb
index 259ac6852a8f8681c783f2a75380fbce5c29b2bd..27ed298ae08baf3f6241624ea58ff78cf3656945 100644
--- a/spec/models/concerns/issuable_spec.rb
+++ b/spec/models/concerns/issuable_spec.rb
@@ -659,7 +659,7 @@ describe Issuable do
     end
 
     context 'adding time' do
-      it 'should update the total time spent' do
+      it 'updates the total time spent' do
         spend_time(1800)
 
         expect(issue.total_time_spent).to eq(1800)
@@ -679,7 +679,7 @@ describe Issuable do
         spend_time(1800)
       end
 
-      it 'should update the total time spent' do
+      it 'updates the total time spent' do
         spend_time(-900)
 
         expect(issue.total_time_spent).to eq(900)
diff --git a/spec/models/concerns/spammable_spec.rb b/spec/models/concerns/spammable_spec.rb
index 650d49e41a15f460356ea49aa7bda23eea75d1d4..673534752511095de02d1e81891d695cb439ecab 100644
--- a/spec/models/concerns/spammable_spec.rb
+++ b/spec/models/concerns/spammable_spec.rb
@@ -12,7 +12,7 @@ describe Spammable do
   end
 
   describe 'ClassMethods' do
-    it 'should return correct attr_spammable' do
+    it 'returns correct attr_spammable' do
       expect(issue.spammable_text).to eq("#{issue.title}\n#{issue.description}")
     end
   end
@@ -20,7 +20,7 @@ describe Spammable do
   describe 'InstanceMethods' do
     let(:issue) { build(:issue, spam: true) }
 
-    it 'should be invalid if spam' do
+    it 'is invalid if spam' do
       expect(issue.valid?).to be_falsey
     end
 
diff --git a/spec/models/deploy_token_spec.rb b/spec/models/deploy_token_spec.rb
index 05320703e256de51af47ef707f2cc766237c519d..2fe82eaa7782eaf7b5eb96dea1f366f44cf729a4 100644
--- a/spec/models/deploy_token_spec.rb
+++ b/spec/models/deploy_token_spec.rb
@@ -9,7 +9,7 @@ describe DeployToken do
   it { is_expected.to have_many(:projects).through(:project_deploy_tokens) }
 
   describe '#ensure_token' do
-    it 'should ensure a token' do
+    it 'ensures a token' do
       deploy_token.token = nil
       deploy_token.save
 
@@ -19,13 +19,13 @@ describe DeployToken do
 
   describe '#ensure_at_least_one_scope' do
     context 'with at least one scope' do
-      it 'should be valid' do
+      it 'is valid' do
         is_expected.to be_valid
       end
     end
 
     context 'with no scopes' do
-      it 'should be invalid' do
+      it 'is invalid' do
         deploy_token = build(:deploy_token, read_repository: false, read_registry: false)
 
         expect(deploy_token).not_to be_valid
@@ -36,13 +36,13 @@ describe DeployToken do
 
   describe '#scopes' do
     context 'with all the scopes' do
-      it 'should return scopes assigned to DeployToken' do
+      it 'returns scopes assigned to DeployToken' do
         expect(deploy_token.scopes).to eq([:read_repository, :read_registry])
       end
     end
 
     context 'with only one scope' do
-      it 'should return scopes assigned to DeployToken' do
+      it 'returns scopes assigned to DeployToken' do
         deploy_token = create(:deploy_token, read_registry: false)
         expect(deploy_token.scopes).to eq([:read_repository])
       end
@@ -50,7 +50,7 @@ describe DeployToken do
   end
 
   describe '#revoke!' do
-    it 'should update revoke attribute' do
+    it 'updates revoke attribute' do
       deploy_token.revoke!
       expect(deploy_token.revoked?).to be_truthy
     end
@@ -58,20 +58,20 @@ describe DeployToken do
 
   describe "#active?" do
     context "when it has been revoked" do
-      it 'should return false' do
+      it 'returns false' do
         deploy_token.revoke!
         expect(deploy_token.active?).to be_falsy
       end
     end
 
     context "when it hasn't been revoked and is not expired" do
-      it 'should return true' do
+      it 'returns true' do
         expect(deploy_token.active?).to be_truthy
       end
     end
 
     context "when it hasn't been revoked and is expired" do
-      it 'should return true' do
+      it 'returns true' do
         deploy_token.update_attribute(:expires_at, Date.today - 5.days)
         expect(deploy_token.active?).to be_falsy
       end
@@ -80,7 +80,7 @@ describe DeployToken do
     context "when it hasn't been revoked and has no expiry" do
       let(:deploy_token) { create(:deploy_token, expires_at: nil) }
 
-      it 'should return true' do
+      it 'returns true' do
         expect(deploy_token.active?).to be_truthy
       end
     end
@@ -126,7 +126,7 @@ describe DeployToken do
     context 'when using Forever.date' do
       let(:deploy_token) { create(:deploy_token, expires_at: nil) }
 
-      it 'should return nil' do
+      it 'returns nil' do
         expect(deploy_token.expires_at).to be_nil
       end
     end
@@ -135,7 +135,7 @@ describe DeployToken do
       let(:expires_at) { Date.today + 5.months }
       let(:deploy_token) { create(:deploy_token, expires_at: expires_at) }
 
-      it 'should return the personalized date' do
+      it 'returns the personalized date' do
         expect(deploy_token.expires_at).to eq(expires_at)
       end
     end
@@ -145,7 +145,7 @@ describe DeployToken do
     context 'when passing nil' do
       let(:deploy_token) { create(:deploy_token, expires_at: nil) }
 
-      it 'should assign Forever.date' do
+      it 'assigns Forever.date' do
         expect(deploy_token.read_attribute(:expires_at)).to eq(Forever.date)
       end
     end
@@ -154,7 +154,7 @@ describe DeployToken do
       let(:expires_at) { Date.today + 5.months }
       let(:deploy_token) { create(:deploy_token, expires_at: expires_at) }
 
-      it 'should respect the value' do
+      it 'respects the value' do
         expect(deploy_token.read_attribute(:expires_at)).to eq(expires_at)
       end
     end
@@ -166,14 +166,14 @@ describe DeployToken do
     subject { project.deploy_tokens.gitlab_deploy_token }
 
     context 'with a gitlab deploy token associated' do
-      it 'should return the gitlab deploy token' do
+      it 'returns the gitlab deploy token' do
         deploy_token = create(:deploy_token, :gitlab_deploy_token, projects: [project])
         is_expected.to eq(deploy_token)
       end
     end
 
     context 'with no gitlab deploy token associated' do
-      it 'should return nil' do
+      it 'returns nil' do
         is_expected.to be_nil
       end
     end
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index b2ffd5812ab1a4a76256352ff7e6dff012d9cc06..ad3e3061b9a8a8e324ddb4d16ed44a616f279d86 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -788,14 +788,14 @@ describe Group do
 
   describe '#has_parent?' do
     context 'when the group has a parent' do
-      it 'should be truthy' do
+      it 'is truthy' do
         group = create(:group, :nested)
         expect(group.has_parent?).to be_truthy
       end
     end
 
     context 'when the group has no parent' do
-      it 'should be falsy' do
+      it 'is falsy' do
         group = create(:group, parent: nil)
         expect(group.has_parent?).to be_falsy
       end
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index 62e7dd3231b4dbe4c3638bbd6fa3622948eb871f..387d1221c764592cc3e9eb02baa3d91284b0a9f0 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -740,14 +740,14 @@ describe Namespace do
 
   describe '#full_path_was' do
     context 'when the group has no parent' do
-      it 'should return the path was' do
+      it 'returns the path was' do
         group = create(:group, parent: nil)
         expect(group.full_path_was).to eq(group.path_was)
       end
     end
 
     context 'when a parent is assigned to a group with no previous parent' do
-      it 'should return the path was' do
+      it 'returns the path was' do
         group = create(:group, parent: nil)
 
         parent = create(:group)
@@ -758,7 +758,7 @@ describe Namespace do
     end
 
     context 'when a parent is removed from the group' do
-      it 'should return the parent full path' do
+      it 'returns the parent full path' do
         parent = create(:group)
         group = create(:group, parent: parent)
         group.parent = nil
@@ -768,7 +768,7 @@ describe Namespace do
     end
 
     context 'when changing parents' do
-      it 'should return the previous parent full path' do
+      it 'returns the previous parent full path' do
         parent = create(:group)
         group = create(:group, parent: parent)
         new_parent = create(:group)
diff --git a/spec/models/network/graph_spec.rb b/spec/models/network/graph_spec.rb
index d1a2bedf5420f3d3269d23dc643990ba6c1fd684..232172fde76153e182aecfaf5b26863762f30179 100644
--- a/spec/models/network/graph_spec.rb
+++ b/spec/models/network/graph_spec.rb
@@ -22,7 +22,7 @@ describe Network::Graph do
       expect(commits).to all( be_kind_of(Network::Commit) )
     end
 
-    it 'it the commits by commit date (descending)' do
+    it 'sorts commits by commit date (descending)' do
       # Remove duplicate timestamps because they make it harder to
       # assert that the commits are sorted as expected.
       commits = graph.commits.uniq(&:date)
diff --git a/spec/models/project_auto_devops_spec.rb b/spec/models/project_auto_devops_spec.rb
index 8ad28ce68cc3cfc14ffbced703f55d2cede05ba2..b81e5610e2ca4adb1ee1871f9a1e6d0d4989fa17 100644
--- a/spec/models/project_auto_devops_spec.rb
+++ b/spec/models/project_auto_devops_spec.rb
@@ -117,7 +117,7 @@ describe ProjectAutoDevops do
     context 'when the project is public' do
       let(:project) { create(:project, :repository, :public) }
 
-      it 'should not create a gitlab deploy token' do
+      it 'does not create a gitlab deploy token' do
         expect do
           auto_devops.save
         end.not_to change { DeployToken.count }
@@ -127,7 +127,7 @@ describe ProjectAutoDevops do
     context 'when the project is internal' do
       let(:project) { create(:project, :repository, :internal) }
 
-      it 'should create a gitlab deploy token' do
+      it 'creates a gitlab deploy token' do
         expect do
           auto_devops.save
         end.to change { DeployToken.count }.by(1)
@@ -137,7 +137,7 @@ describe ProjectAutoDevops do
     context 'when the project is private' do
       let(:project) { create(:project, :repository, :private) }
 
-      it 'should create a gitlab deploy token' do
+      it 'creates a gitlab deploy token' do
         expect do
           auto_devops.save
         end.to change { DeployToken.count }.by(1)
@@ -148,7 +148,7 @@ describe ProjectAutoDevops do
       let(:project) { create(:project, :repository, :internal) }
       let(:auto_devops) { build(:project_auto_devops, project: project) }
 
-      it 'should create a deploy token' do
+      it 'creates a deploy token' do
         expect do
           auto_devops.save
         end.to change { DeployToken.count }.by(1)
@@ -159,7 +159,7 @@ describe ProjectAutoDevops do
       let(:project) { create(:project, :repository, :internal) }
       let(:auto_devops) { build(:project_auto_devops, enabled: nil, project: project) }
 
-      it 'should create a deploy token' do
+      it 'creates a deploy token' do
         allow(Gitlab::CurrentSettings).to receive(:auto_devops_enabled?).and_return(true)
 
         expect do
@@ -172,7 +172,7 @@ describe ProjectAutoDevops do
       let(:project) { create(:project, :repository, :internal) }
       let(:auto_devops) { build(:project_auto_devops, :disabled, project: project) }
 
-      it 'should not create a deploy token' do
+      it 'does not create a deploy token' do
         expect do
           auto_devops.save
         end.not_to change { DeployToken.count }
@@ -184,7 +184,7 @@ describe ProjectAutoDevops do
       let!(:deploy_token) { create(:deploy_token, :gitlab_deploy_token, projects: [project]) }
       let(:auto_devops) { build(:project_auto_devops, project: project) }
 
-      it 'should not create a deploy token' do
+      it 'does not create a deploy token' do
         expect do
           auto_devops.save
         end.not_to change { DeployToken.count }
@@ -196,7 +196,7 @@ describe ProjectAutoDevops do
       let!(:deploy_token) { create(:deploy_token, :gitlab_deploy_token, :expired, projects: [project]) }
       let(:auto_devops) { build(:project_auto_devops, project: project) }
 
-      it 'should not create a deploy token' do
+      it 'does not create a deploy token' do
         expect do
           auto_devops.save
         end.not_to change { DeployToken.count }
diff --git a/spec/models/project_services/kubernetes_service_spec.rb b/spec/models/project_services/kubernetes_service_spec.rb
index 7bf093b71e75ada02bbb28ee277f4476bd85f095..3a381cb405d610d75b3f3d77df42136aa21c9f06 100644
--- a/spec/models/project_services/kubernetes_service_spec.rb
+++ b/spec/models/project_services/kubernetes_service_spec.rb
@@ -70,11 +70,11 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
         kubernetes_service.properties['namespace'] = "foo"
       end
 
-      it 'should not update attributes' do
+      it 'does not update attributes' do
         expect(kubernetes_service.save).to be_falsy
       end
 
-      it 'should include an error with a deprecation message' do
+      it 'includes an error with a deprecation message' do
         kubernetes_service.valid?
         expect(kubernetes_service.errors[:base].first).to match(/Kubernetes service integration has been deprecated/)
       end
@@ -83,7 +83,7 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
     context 'with a non-deprecated service' do
       let(:kubernetes_service) { create(:kubernetes_service) }
 
-      it 'should update attributes' do
+      it 'updates attributes' do
         kubernetes_service.properties['namespace'] = 'foo'
         expect(kubernetes_service.save).to be_truthy
       end
@@ -98,15 +98,15 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
         kubernetes_service.save
       end
 
-      it 'should deactive the service' do
+      it 'deactivates the service' do
         expect(kubernetes_service.active?).to be_falsy
       end
 
-      it 'should not include a deprecation message as error' do
+      it 'does not include a deprecation message as error' do
         expect(kubernetes_service.errors.messages.count).to eq(0)
       end
 
-      it 'should update attributes' do
+      it 'updates attributes' do
         expect(kubernetes_service.properties['namespace']).to eq("foo")
       end
     end
@@ -118,7 +118,7 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
         kubernetes_service.properties['namespace'] = 'foo'
       end
 
-      it 'should update attributes' do
+      it 'updates attributes' do
         expect(kubernetes_service.save).to be_truthy
         expect(kubernetes_service.properties['namespace']).to eq('foo')
       end
@@ -392,13 +392,13 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
     let(:kubernetes_service) { create(:kubernetes_service) }
 
     context 'with an active kubernetes service' do
-      it 'should return false' do
+      it 'returns false' do
         expect(kubernetes_service.deprecated?).to be_falsy
       end
     end
 
     context 'with a inactive kubernetes service' do
-      it 'should return true' do
+      it 'returns true' do
         kubernetes_service.update_attribute(:active, false)
         expect(kubernetes_service.deprecated?).to be_truthy
       end
@@ -408,18 +408,18 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
   describe "#deprecation_message" do
     let(:kubernetes_service) { create(:kubernetes_service) }
 
-    it 'should indicate the service is deprecated' do
+    it 'indicates the service is deprecated' do
       expect(kubernetes_service.deprecation_message).to match(/Kubernetes service integration has been deprecated/)
     end
 
     context 'if the services is active' do
-      it 'should return a message' do
+      it 'returns a message' do
         expect(kubernetes_service.deprecation_message).to match(/Your Kubernetes cluster information on this page is still editable/)
       end
     end
 
     context 'if the service is not active' do
-      it 'should return a message' do
+      it 'returns a message' do
         kubernetes_service.update_attribute(:active, false)
         expect(kubernetes_service.deprecation_message).to match(/Fields on this page are now uneditable/)
       end
diff --git a/spec/models/project_services/pivotaltracker_service_spec.rb b/spec/models/project_services/pivotaltracker_service_spec.rb
index de2c8790405b8d3411115b25a0d54c78cebe96c7..773b8b7890fae75e26cdd7cadb79300a9ec97e30 100644
--- a/spec/models/project_services/pivotaltracker_service_spec.rb
+++ b/spec/models/project_services/pivotaltracker_service_spec.rb
@@ -56,7 +56,7 @@ describe PivotaltrackerService do
       WebMock.stub_request(:post, url)
     end
 
-    it 'should post correct message' do
+    it 'posts correct message' do
       service.execute(push_data)
       expect(WebMock).to have_requested(:post, url).with(
         body: {
@@ -81,14 +81,14 @@ describe PivotaltrackerService do
         end
       end
 
-      it 'should post message if branch is in the list' do
+      it 'posts message if branch is in the list' do
         service.execute(push_data(branch: 'master'))
         service.execute(push_data(branch: 'v10'))
 
         expect(WebMock).to have_requested(:post, url).twice
       end
 
-      it 'should not post message if branch is not in the list' do
+      it 'does not post message if branch is not in the list' do
         service.execute(push_data(branch: 'mas'))
         service.execute(push_data(branch: 'v11'))
 
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 33e514cd7b9869b07a549473b5356c76c80279df..5eb31430ccd5f5b0c1f1852e626833b0f84ff226 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -415,7 +415,7 @@ describe Project do
         project.project_feature.update_attribute(:builds_access_level, ProjectFeature::DISABLED)
       end
 
-      it 'should return .external pipelines' do
+      it 'returns .external pipelines' do
         expect(project.all_pipelines).to all(have_attributes(source: 'external'))
         expect(project.all_pipelines.size).to eq(1)
       end
@@ -439,7 +439,7 @@ describe Project do
         project.project_feature.update_attribute(:builds_access_level, ProjectFeature::DISABLED)
       end
 
-      it 'should return .external pipelines' do
+      it 'returns .external pipelines' do
         expect(project.ci_pipelines).to all(have_attributes(source: 'external'))
         expect(project.ci_pipelines.size).to eq(1)
       end
@@ -1910,7 +1910,7 @@ describe Project do
                                        tags: %w[latest rc1])
         end
 
-        it 'should have image tags' do
+        it 'has image tags' do
           expect(project).to have_container_registry_tags
         end
       end
@@ -1921,7 +1921,7 @@ describe Project do
                                        tags: %w[latest rc1 pre1])
         end
 
-        it 'should have image tags' do
+        it 'has image tags' do
           expect(project).to have_container_registry_tags
         end
       end
@@ -1931,7 +1931,7 @@ describe Project do
           stub_container_registry_tags(repository: :any, tags: [])
         end
 
-        it 'should not have image tags' do
+        it 'does not have image tags' do
           expect(project).not_to have_container_registry_tags
         end
       end
@@ -1942,16 +1942,16 @@ describe Project do
         stub_container_registry_config(enabled: false)
       end
 
-      it 'should not have image tags' do
+      it 'does not have image tags' do
         expect(project).not_to have_container_registry_tags
       end
 
-      it 'should not check root repository tags' do
+      it 'does not check root repository tags' do
         expect(project).not_to receive(:full_path)
         expect(project).not_to have_container_registry_tags
       end
 
-      it 'should iterate through container repositories' do
+      it 'iterates through container repositories' do
         expect(project).to receive(:container_repositories)
         expect(project).not_to have_container_registry_tags
       end
@@ -2638,7 +2638,7 @@ describe Project do
         let!(:cluster) { kubernetes_namespace.cluster }
         let(:project) { kubernetes_namespace.project }
 
-        it 'should return token from kubernetes namespace' do
+        it 'returns token from kubernetes namespace' do
           expect(project.deployment_variables).to include(
             { key: 'KUBE_TOKEN', value: kubernetes_namespace.service_account_token, public: false, masked: true }
           )
diff --git a/spec/models/remote_mirror_spec.rb b/spec/models/remote_mirror_spec.rb
index 0478094034a29b1f9ecaa1aa69a1e167886ed3f8..f743dfed31f7952deddf2c597ff1f696577ba9e8 100644
--- a/spec/models/remote_mirror_spec.rb
+++ b/spec/models/remote_mirror_spec.rb
@@ -7,14 +7,14 @@ describe RemoteMirror, :mailer do
 
   describe 'URL validation' do
     context 'with a valid URL' do
-      it 'should be valid' do
+      it 'is valid' do
         remote_mirror = build(:remote_mirror)
         expect(remote_mirror).to be_valid
       end
     end
 
     context 'with an invalid URL' do
-      it 'should not be valid' do
+      it 'is not valid' do
         remote_mirror = build(:remote_mirror, url: 'ftp://invalid.invalid')
 
         expect(remote_mirror).not_to be_valid
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 2578208659ab7c0860a323fea3a848db85dcab51..3f5d285bc2c8488ff43a4169b59cdda8336c85cc 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -50,7 +50,7 @@ describe Repository do
     it { is_expected.not_to include('fix') }
 
     describe 'when storage is broken', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error do
           broken_repository.branch_names_contains(sample_commit.id)
         end
@@ -225,7 +225,7 @@ describe Repository do
     it { is_expected.to eq('c1acaa58bbcbc3eafe538cb8274ba387047b69f8') }
 
     describe 'when storage is broken', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error do
           broken_repository.last_commit_id_for_path(sample_commit.id, '.gitignore')
         end
@@ -249,7 +249,7 @@ describe Repository do
     end
 
     describe 'when storage is broken', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error do
           broken_repository.last_commit_for_path(sample_commit.id, '.gitignore').id
         end
@@ -390,7 +390,7 @@ describe Repository do
     end
 
     describe 'when storage is broken', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error { broken_repository.find_commits_by_message('s') }
       end
     end
@@ -726,7 +726,7 @@ describe Repository do
     end
 
     describe 'when storage is broken', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error do
           broken_repository.search_files_by_content('feature', 'master')
         end
@@ -775,7 +775,7 @@ describe Repository do
     end
 
     describe 'when storage is broken', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error { broken_repository.search_files_by_name('files', 'master') }
       end
     end
@@ -817,7 +817,7 @@ describe Repository do
     let(:broken_repository) { create(:project, :broken_storage).repository }
 
     describe 'when storage is broken', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error do
           broken_repository.fetch_ref(broken_repository, source_ref: '1', target_ref: '2')
         end
@@ -1018,7 +1018,7 @@ describe Repository do
         repository.add_branch(project.creator, ref, 'master')
       end
 
-      it 'should be true' do
+      it 'is true' do
         is_expected.to eq(true)
       end
     end
@@ -1028,7 +1028,7 @@ describe Repository do
         repository.add_tag(project.creator, ref, 'master')
       end
 
-      it 'should be false' do
+      it 'is false' do
         is_expected.to eq(false)
       end
     end
@@ -1152,7 +1152,7 @@ describe Repository do
     end
 
     context 'with broken storage', :broken_storage do
-      it 'should raise a storage error' do
+      it 'raises a storage error' do
         expect_to_raise_storage_error { broken_repository.exists? }
       end
     end
@@ -2249,11 +2249,11 @@ describe Repository do
     let(:commit) { repository.commit }
     let(:ancestor) { commit.parents.first }
 
-    it 'it is an ancestor' do
+    it 'is an ancestor' do
       expect(repository.ancestor?(ancestor.id, commit.id)).to eq(true)
     end
 
-    it 'it is not an ancestor' do
+    it 'is not an ancestor' do
       expect(repository.ancestor?(commit.id, ancestor.id)).to eq(false)
     end
 
diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb
index 2f025038babcabf11d8c698d67731b3606acc05c..64db32781fe7c86c9938e553ff7cf874b3980f1d 100644
--- a/spec/models/service_spec.rb
+++ b/spec/models/service_spec.rb
@@ -291,7 +291,7 @@ describe Service do
   describe "#deprecated?" do
     let(:project) { create(:project, :repository) }
 
-    it 'should return false by default' do
+    it 'returns false by default' do
       service = create(:service, project: project)
       expect(service.deprecated?).to be_falsy
     end
@@ -300,7 +300,7 @@ describe Service do
   describe "#deprecation_message" do
     let(:project) { create(:project, :repository) }
 
-    it 'should be empty by default' do
+    it 'is empty by default' do
       service = create(:service, project: project)
       expect(service.deprecation_message).to be_nil
     end
diff --git a/spec/presenters/ci/build_presenter_spec.rb b/spec/presenters/ci/build_presenter_spec.rb
index 676835b3880c3648938adbf2bebb3e5d50ec0816..e202f7a9b5f129c02e3dffe9303b1faa482f83c2 100644
--- a/spec/presenters/ci/build_presenter_spec.rb
+++ b/spec/presenters/ci/build_presenter_spec.rb
@@ -180,7 +180,7 @@ describe Ci::BuildPresenter do
     context 'When build has failed and retried' do
       let(:build) { create(:ci_build, :script_failure, :retried, pipeline: pipeline) }
 
-      it 'should include the reason of failure and the retried title' do
+      it 'includes the reason of failure and the retried title' do
         tooltip = subject.tooltip_message
 
         expect(tooltip).to eq("#{build.name} - failed - (script failure) (retried)")
@@ -190,7 +190,7 @@ describe Ci::BuildPresenter do
     context 'When build has failed and is allowed to' do
       let(:build) { create(:ci_build, :script_failure, :allowed_to_fail, pipeline: pipeline) }
 
-      it 'should include the reason of failure' do
+      it 'includes the reason of failure' do
         tooltip = subject.tooltip_message
 
         expect(tooltip).to eq("#{build.name} - failed - (script failure) (allowed to fail)")
@@ -200,7 +200,7 @@ describe Ci::BuildPresenter do
     context 'For any other build (no retried)' do
       let(:build) { create(:ci_build, :success, pipeline: pipeline) }
 
-      it 'should include build name and status' do
+      it 'includes build name and status' do
         tooltip = subject.tooltip_message
 
         expect(tooltip).to eq("#{build.name} - passed")
@@ -210,7 +210,7 @@ describe Ci::BuildPresenter do
     context 'For any other build (retried)' do
       let(:build) { create(:ci_build, :success, :retried, pipeline: pipeline) }
 
-      it 'should include build name and status' do
+      it 'includes build name and status' do
         tooltip = subject.tooltip_message
 
         expect(tooltip).to eq("#{build.name} - passed (retried)")
@@ -269,7 +269,7 @@ describe Ci::BuildPresenter do
     context 'when is a script or missing dependency failure' do
       let(:failure_reasons) { %w(script_failure missing_dependency_failure archived_failure) }
 
-      it 'should return false' do
+      it 'returns false' do
         failure_reasons.each do |failure_reason|
           build.update_attribute(:failure_reason, failure_reason)
           expect(presenter.recoverable?).to be_falsy
@@ -280,7 +280,7 @@ describe Ci::BuildPresenter do
     context 'when is any other failure type' do
       let(:failure_reasons) { %w(unknown_failure api_failure stuck_or_timeout_failure runner_system_failure) }
 
-      it 'should return true' do
+      it 'returns true' do
         failure_reasons.each do |failure_reason|
           build.update_attribute(:failure_reason, failure_reason)
           expect(presenter.recoverable?).to be_truthy
diff --git a/spec/requests/api/pipelines_spec.rb b/spec/requests/api/pipelines_spec.rb
index c26d31c5e0d38f8a57e77104b1f531e395bed3cd..9fed07cae828af1d73b1a2bcd82bd56007d25769 100644
--- a/spec/requests/api/pipelines_spec.rb
+++ b/spec/requests/api/pipelines_spec.rb
@@ -435,7 +435,7 @@ describe API::Pipelines do
     end
 
     context 'unauthorized user' do
-      it 'should not return a project pipeline' do
+      it 'does not return a project pipeline' do
         get api("/projects/#{project.id}/pipelines/#{pipeline.id}", non_member)
 
         expect(response).to have_gitlab_http_status(404)
@@ -481,7 +481,7 @@ describe API::Pipelines do
 
     context 'unauthorized user' do
       context 'when user is not member' do
-        it 'should return a 404' do
+        it 'returns a 404' do
           delete api("/projects/#{project.id}/pipelines/#{pipeline.id}", non_member)
 
           expect(response).to have_gitlab_http_status(404)
@@ -496,7 +496,7 @@ describe API::Pipelines do
           project.add_developer(developer)
         end
 
-        it 'should return a 403' do
+        it 'returns a 403' do
           delete api("/projects/#{project.id}/pipelines/#{pipeline.id}", developer)
 
           expect(response).to have_gitlab_http_status(403)
@@ -526,7 +526,7 @@ describe API::Pipelines do
     end
 
     context 'unauthorized user' do
-      it 'should not return a project pipeline' do
+      it 'does not return a project pipeline' do
         post api("/projects/#{project.id}/pipelines/#{pipeline.id}/retry", non_member)
 
         expect(response).to have_gitlab_http_status(404)
diff --git a/spec/requests/api/project_clusters_spec.rb b/spec/requests/api/project_clusters_spec.rb
index 81442125a1cfe64a52d2ae28966f649e7e94d738..94e6ca2c07c4397c7a752b7fd84b08ac92503383 100644
--- a/spec/requests/api/project_clusters_spec.rb
+++ b/spec/requests/api/project_clusters_spec.rb
@@ -22,7 +22,7 @@ describe API::ProjectClusters do
     end
 
     context 'non-authorized user' do
-      it 'should respond with 404' do
+      it 'responds with 404' do
         get api("/projects/#{project.id}/clusters", non_member)
 
         expect(response).to have_gitlab_http_status(404)
@@ -34,15 +34,15 @@ describe API::ProjectClusters do
         get api("/projects/#{project.id}/clusters", current_user)
       end
 
-      it 'should respond with 200' do
+      it 'responds with 200' do
         expect(response).to have_gitlab_http_status(200)
       end
 
-      it 'should include pagination headers' do
+      it 'includes pagination headers' do
         expect(response).to include_pagination_headers
       end
 
-      it 'should only include authorized clusters' do
+      it 'onlies include authorized clusters' do
         cluster_ids = json_response.map { |cluster| cluster['id'] }
 
         expect(cluster_ids).to match_array(clusters.pluck(:id))
@@ -67,7 +67,7 @@ describe API::ProjectClusters do
     end
 
     context 'non-authorized user' do
-      it 'should respond with 404' do
+      it 'responds with 404' do
         get api("/projects/#{project.id}/clusters/#{cluster_id}", non_member)
 
         expect(response).to have_gitlab_http_status(404)
@@ -132,7 +132,7 @@ describe API::ProjectClusters do
                  projects: [project])
         end
 
-        it 'should not include GCP provider info' do
+        it 'does not include GCP provider info' do
           expect(json_response['provider_gcp']).not_to be_present
         end
       end
@@ -194,7 +194,7 @@ describe API::ProjectClusters do
     end
 
     context 'non-authorized user' do
-      it 'should respond with 404' do
+      it 'responds with 404' do
         post api("/projects/#{project.id}/clusters/user", non_member), params: cluster_params
 
         expect(response).to have_gitlab_http_status(404)
@@ -207,11 +207,11 @@ describe API::ProjectClusters do
       end
 
       context 'with valid params' do
-        it 'should respond with 201' do
+        it 'responds with 201' do
           expect(response).to have_gitlab_http_status(201)
         end
 
-        it 'should create a new Cluster::Cluster' do
+        it 'creates a new Cluster::Cluster' do
           cluster_result = Clusters::Cluster.find(json_response["id"])
           platform_kubernetes = cluster_result.platform
 
@@ -246,7 +246,7 @@ describe API::ProjectClusters do
       context 'when user sets authorization type as ABAC' do
         let(:authorization_type) { 'abac' }
 
-        it 'should create an ABAC cluster' do
+        it 'creates an ABAC cluster' do
           cluster_result = Clusters::Cluster.find(json_response['id'])
 
           expect(cluster_result.platform.abac?).to be_truthy
@@ -256,15 +256,15 @@ describe API::ProjectClusters do
       context 'with invalid params' do
         let(:namespace) { 'invalid_namespace' }
 
-        it 'should respond with 400' do
+        it 'responds with 400' do
           expect(response).to have_gitlab_http_status(400)
         end
 
-        it 'should not create a new Clusters::Cluster' do
+        it 'does not create a new Clusters::Cluster' do
           expect(project.reload.clusters).to be_empty
         end
 
-        it 'should return validation errors' do
+        it 'returns validation errors' do
           expect(json_response['message']['platform_kubernetes.namespace'].first).to be_present
         end
       end
@@ -278,11 +278,11 @@ describe API::ProjectClusters do
         post api("/projects/#{project.id}/clusters/user", current_user), params: cluster_params
       end
 
-      it 'should respond with 403' do
+      it 'responds with 403' do
         expect(response).to have_gitlab_http_status(403)
       end
 
-      it 'should return an appropriate message' do
+      it 'returns an appropriate message' do
         expect(json_response['message']).to include('Instance does not support multiple Kubernetes clusters')
       end
     end
@@ -314,7 +314,7 @@ describe API::ProjectClusters do
     end
 
     context 'non-authorized user' do
-      it 'should respond with 404' do
+      it 'responds with 404' do
         put api("/projects/#{project.id}/clusters/#{cluster.id}", non_member), params: update_params
 
         expect(response).to have_gitlab_http_status(404)
@@ -329,11 +329,11 @@ describe API::ProjectClusters do
       end
 
       context 'with valid params' do
-        it 'should respond with 200' do
+        it 'responds with 200' do
           expect(response).to have_gitlab_http_status(200)
         end
 
-        it 'should update cluster attributes' do
+        it 'updates cluster attributes' do
           expect(cluster.domain).to eq('new-domain.com')
           expect(cluster.platform_kubernetes.namespace).to eq('new-namespace')
         end
@@ -342,17 +342,17 @@ describe API::ProjectClusters do
       context 'with invalid params' do
         let(:namespace) { 'invalid_namespace' }
 
-        it 'should respond with 400' do
+        it 'responds with 400' do
           expect(response).to have_gitlab_http_status(400)
         end
 
-        it 'should not update cluster attributes' do
+        it 'does not update cluster attributes' do
           expect(cluster.domain).not_to eq('new_domain.com')
           expect(cluster.platform_kubernetes.namespace).not_to eq('invalid_namespace')
           expect(cluster.kubernetes_namespace.namespace).not_to eq('invalid_namespace')
         end
 
-        it 'should return validation errors' do
+        it 'returns validation errors' do
           expect(json_response['message']['platform_kubernetes.namespace'].first).to match('can contain only lowercase letters')
         end
       end
@@ -366,11 +366,11 @@ describe API::ProjectClusters do
             }
           end
 
-          it 'should respond with 400' do
+          it 'responds with 400' do
             expect(response).to have_gitlab_http_status(400)
           end
 
-          it 'should return validation error' do
+          it 'returns validation error' do
             expect(json_response['message']['platform_kubernetes.base'].first).to eq('Cannot modify managed Kubernetes cluster')
           end
         end
@@ -378,7 +378,7 @@ describe API::ProjectClusters do
         context 'when user tries to change namespace' do
           let(:namespace) { 'new-namespace' }
 
-          it 'should respond with 200' do
+          it 'responds with 200' do
             expect(response).to have_gitlab_http_status(200)
           end
         end
@@ -407,11 +407,11 @@ describe API::ProjectClusters do
           }
         end
 
-        it 'should respond with 200' do
+        it 'responds with 200' do
           expect(response).to have_gitlab_http_status(200)
         end
 
-        it 'should update platform kubernetes attributes' do
+        it 'updates platform kubernetes attributes' do
           platform_kubernetes = cluster.platform_kubernetes
 
           expect(cluster.name).to eq('new-name')
@@ -424,7 +424,7 @@ describe API::ProjectClusters do
       context 'with a cluster that does not belong to user' do
         let(:cluster) { create(:cluster, :project, :provided_by_user) }
 
-        it 'should respond with 404' do
+        it 'responds with 404' do
           expect(response).to have_gitlab_http_status(404)
         end
       end
@@ -440,7 +440,7 @@ describe API::ProjectClusters do
     end
 
     context 'non-authorized user' do
-      it 'should respond with 404' do
+      it 'responds with 404' do
         delete api("/projects/#{project.id}/clusters/#{cluster.id}", non_member), params: cluster_params
 
         expect(response).to have_gitlab_http_status(404)
@@ -452,18 +452,18 @@ describe API::ProjectClusters do
         delete api("/projects/#{project.id}/clusters/#{cluster.id}", current_user), params: cluster_params
       end
 
-      it 'should respond with 204' do
+      it 'responds with 204' do
         expect(response).to have_gitlab_http_status(204)
       end
 
-      it 'should delete the cluster' do
+      it 'deletes the cluster' do
         expect(Clusters::Cluster.exists?(id: cluster.id)).to be_falsy
       end
 
       context 'with a cluster that does not belong to user' do
         let(:cluster) { create(:cluster, :project, :provided_by_user) }
 
-        it 'should respond with 404' do
+        it 'responds with 404' do
           expect(response).to have_gitlab_http_status(404)
         end
       end
diff --git a/spec/serializers/analytics_stage_serializer_spec.rb b/spec/serializers/analytics_stage_serializer_spec.rb
index be6aa7c65c3746434eea636d13bf29ca6dd2edcb..dbfb3eace837307c59bbe9051d9dc665b054dbf6 100644
--- a/spec/serializers/analytics_stage_serializer_spec.rb
+++ b/spec/serializers/analytics_stage_serializer_spec.rb
@@ -14,7 +14,7 @@ describe AnalyticsStageSerializer do
     allow_any_instance_of(Gitlab::CycleAnalytics::BaseEventFetcher).to receive(:event_result).and_return({})
   end
 
-  it 'it generates payload for single object' do
+  it 'generates payload for single object' do
     expect(subject).to be_kind_of Hash
   end
 
diff --git a/spec/serializers/analytics_summary_serializer_spec.rb b/spec/serializers/analytics_summary_serializer_spec.rb
index 236c244b402ff819e3948800ed124779f79b79b8..8fa0574bfd6b447d0faf6510f8b36ff67e0afdbb 100644
--- a/spec/serializers/analytics_summary_serializer_spec.rb
+++ b/spec/serializers/analytics_summary_serializer_spec.rb
@@ -18,7 +18,7 @@ describe AnalyticsSummarySerializer do
       .to receive(:value).and_return(1.12)
   end
 
-  it 'it generates payload for single object' do
+  it 'generates payload for single object' do
     expect(subject).to be_kind_of Hash
   end
 
diff --git a/spec/serializers/environment_entity_spec.rb b/spec/serializers/environment_entity_spec.rb
index 791b64dc356835bcf3d9bde685a86e3bc86785c7..c2312734042dce229857489bb5f549125d5df492 100644
--- a/spec/serializers/environment_entity_spec.rb
+++ b/spec/serializers/environment_entity_spec.rb
@@ -54,7 +54,7 @@ describe EnvironmentEntity do
                projects: [project])
       end
 
-      it 'should include cluster_type' do
+      it 'includes cluster_type' do
         expect(subject).to include(:cluster_type)
         expect(subject[:cluster_type]).to eq('project_type')
       end
@@ -65,7 +65,7 @@ describe EnvironmentEntity do
         create(:kubernetes_service, project: project)
       end
 
-      it 'should not include cluster_type' do
+      it 'does not include cluster_type' do
         expect(subject).not_to include(:cluster_type)
       end
     end
diff --git a/spec/serializers/job_entity_spec.rb b/spec/serializers/job_entity_spec.rb
index 851b41a7f7e4fea328891ce96a29c24d1526b38a..8de61d4d46654fbe33fd500aa7ba16dca78ac34f 100644
--- a/spec/serializers/job_entity_spec.rb
+++ b/spec/serializers/job_entity_spec.rb
@@ -154,15 +154,15 @@ describe JobEntity do
       expect(subject[:status][:label]).to eq('failed')
     end
 
-    it 'should indicate the failure reason on tooltip' do
+    it 'indicates the failure reason on tooltip' do
       expect(subject[:status][:tooltip]).to eq('failed - (API failure)')
     end
 
-    it 'should include a callout message with a verbose output' do
+    it 'includes a callout message with a verbose output' do
       expect(subject[:callout_message]).to eq('There has been an API failure, please try again')
     end
 
-    it 'should state that it is not recoverable' do
+    it 'states that it is not recoverable' do
       expect(subject[:recoverable]).to be_truthy
     end
   end
@@ -178,15 +178,15 @@ describe JobEntity do
       expect(subject[:status][:label]).to eq('failed (allowed to fail)')
     end
 
-    it 'should indicate the failure reason on tooltip' do
+    it 'indicates the failure reason on tooltip' do
       expect(subject[:status][:tooltip]).to eq('failed - (API failure) (allowed to fail)')
     end
 
-    it 'should include a callout message with a verbose output' do
+    it 'includes a callout message with a verbose output' do
       expect(subject[:callout_message]).to eq('There has been an API failure, please try again')
     end
 
-    it 'should state that it is not recoverable' do
+    it 'states that it is not recoverable' do
       expect(subject[:recoverable]).to be_truthy
     end
   end
@@ -194,7 +194,7 @@ describe JobEntity do
   context 'when the job failed with a script failure' do
     let(:job) { create(:ci_build, :failed, :script_failure) }
 
-    it 'should not include callout message or recoverable keys' do
+    it 'does not include callout message or recoverable keys' do
       expect(subject).not_to include('callout_message')
       expect(subject).not_to include('recoverable')
     end
@@ -203,7 +203,7 @@ describe JobEntity do
   context 'when job failed and is recoverable' do
     let(:job) { create(:ci_build, :api_failure) }
 
-    it 'should state it is recoverable' do
+    it 'states it is recoverable' do
       expect(subject[:recoverable]).to be_truthy
     end
   end
@@ -211,7 +211,7 @@ describe JobEntity do
   context 'when job passed' do
     let(:job) { create(:ci_build, :success) }
 
-    it 'should not include callout message or recoverable keys' do
+    it 'does not include callout message or recoverable keys' do
       expect(subject).not_to include('callout_message')
       expect(subject).not_to include('recoverable')
     end
diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb
index 0e99ef38d2f3411381f0eca054cf98a43a7e47f6..b89898f26f7a827261bf836d63294e006860a24e 100644
--- a/spec/serializers/merge_request_widget_entity_spec.rb
+++ b/spec/serializers/merge_request_widget_entity_spec.rb
@@ -287,7 +287,7 @@ describe MergeRequestWidgetEntity do
       resource.commits.find { |c| c.short_id == short_id }
     end
 
-    it 'should not include merge commits' do
+    it 'does not include merge commits' do
       commits_in_widget = subject[:commits_without_merge_commits]
 
       expect(commits_in_widget.length).to be < resource.commits.length
diff --git a/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb b/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb
index 11a65d0c300fd7f7d867e923004126a5a9bbefd2..382b904356678a59909fab614ccc831a8f7d818d 100644
--- a/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb
+++ b/spec/services/clusters/gcp/kubernetes/create_or_update_service_account_service_spec.rb
@@ -89,7 +89,7 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateServiceAccountService do
 
       it_behaves_like 'creates service account and token'
 
-      it 'should create a cluster role binding with cluster-admin access' do
+      it 'creates a cluster role binding with cluster-admin access' do
         subject
 
         expect(WebMock).to have_requested(:post, api_url + "/apis/rbac.authorization.k8s.io/v1/clusterrolebindings").with(
diff --git a/spec/services/deploy_tokens/create_service_spec.rb b/spec/services/deploy_tokens/create_service_spec.rb
index 3a2bbf1ecd19be81f1a487d708276da5b9dc9f3c..1bd0356a73b839ed616ec80d504becc708bfe574 100644
--- a/spec/services/deploy_tokens/create_service_spec.rb
+++ b/spec/services/deploy_tokens/create_service_spec.rb
@@ -9,11 +9,11 @@ describe DeployTokens::CreateService do
     subject { described_class.new(project, user, deploy_token_params).execute }
 
     context 'when the deploy token is valid' do
-      it 'should create a new DeployToken' do
+      it 'creates a new DeployToken' do
         expect { subject }.to change { DeployToken.count }.by(1)
       end
 
-      it 'should create a new ProjectDeployToken' do
+      it 'creates a new ProjectDeployToken' do
         expect { subject }.to change { ProjectDeployToken.count }.by(1)
       end
 
@@ -25,7 +25,7 @@ describe DeployTokens::CreateService do
     context 'when expires at date is not passed' do
       let(:deploy_token_params) { attributes_for(:deploy_token, expires_at: '') }
 
-      it 'should set Forever.date' do
+      it 'sets Forever.date' do
         expect(subject.read_attribute(:expires_at)).to eq(Forever.date)
       end
     end
@@ -33,11 +33,11 @@ describe DeployTokens::CreateService do
     context 'when the deploy token is invalid' do
       let(:deploy_token_params) { attributes_for(:deploy_token, read_repository: false, read_registry: false) }
 
-      it 'should not create a new DeployToken' do
+      it 'does not create a new DeployToken' do
         expect { subject }.not_to change { DeployToken.count }
       end
 
-      it 'should not create a new ProjectDeployToken' do
+      it 'does not create a new ProjectDeployToken' do
         expect { subject }.not_to change { ProjectDeployToken.count }
       end
     end
diff --git a/spec/services/groups/transfer_service_spec.rb b/spec/services/groups/transfer_service_spec.rb
index 79d504b9b4591261f71bda33cba33ccd0530d698..0bc67dbb4a1114025ea4cb762c0daf4d50be96e2 100644
--- a/spec/services/groups/transfer_service_spec.rb
+++ b/spec/services/groups/transfer_service_spec.rb
@@ -12,11 +12,11 @@ describe Groups::TransferService, :postgresql do
         allow(Group).to receive(:supports_nested_objects?).and_return(false)
       end
 
-      it 'should return false' do
+      it 'returns false' do
         expect(transfer_service.execute(new_parent_group)).to be_falsy
       end
 
-      it 'should add an error on group' do
+      it 'adds an error on group' do
         transfer_service.execute(new_parent_group)
         expect(transfer_service.error).to eq('Transfer failed: Database is not supported.')
       end
@@ -30,11 +30,11 @@ describe Groups::TransferService, :postgresql do
         create(:group_member, :owner, group: new_parent_group, user: user)
       end
 
-      it 'should return false' do
+      it 'returns false' do
         expect(transfer_service.execute(new_parent_group)).to be_falsy
       end
 
-      it 'should add an error on group' do
+      it 'adds an error on group' do
         transfer_service.execute(new_parent_group)
         expect(transfer_service.error).to eq('Transfer failed: namespace directory cannot be moved')
       end
@@ -50,7 +50,7 @@ describe Groups::TransferService, :postgresql do
       context 'when the group is already a root group' do
         let(:group) { create(:group, :public) }
 
-        it 'should add an error on group' do
+        it 'adds an error on group' do
           transfer_service.execute(nil)
           expect(transfer_service.error).to eq('Transfer failed: Group is already a root group.')
         end
@@ -59,11 +59,11 @@ describe Groups::TransferService, :postgresql do
       context 'when the user does not have the right policies' do
         let!(:group_member) { create(:group_member, :guest, group: group, user: user) }
 
-        it "should return false" do
+        it "returns false" do
           expect(transfer_service.execute(nil)).to be_falsy
         end
 
-        it "should add an error on group" do
+        it "adds an error on group" do
           transfer_service.execute(new_parent_group)
           expect(transfer_service.error).to eq("Transfer failed: You don't have enough permissions.")
         end
@@ -76,11 +76,11 @@ describe Groups::TransferService, :postgresql do
           create(:group, path: 'not-unique')
         end
 
-        it 'should return false' do
+        it 'returns false' do
           expect(transfer_service.execute(nil)).to be_falsy
         end
 
-        it 'should add an error on group' do
+        it 'adds an error on group' do
           transfer_service.execute(nil)
           expect(transfer_service.error).to eq('Transfer failed: The parent group already has a subgroup with the same path.')
         end
@@ -96,17 +96,17 @@ describe Groups::TransferService, :postgresql do
           group.reload
         end
 
-        it 'should update group attributes' do
+        it 'updates group attributes' do
           expect(group.parent).to be_nil
         end
 
-        it 'should update group children path' do
+        it 'updates group children path' do
           group.children.each do |subgroup|
             expect(subgroup.full_path).to eq("#{group.path}/#{subgroup.path}")
           end
         end
 
-        it 'should update group projects path' do
+        it 'updates group projects path' do
           group.projects.each do |project|
             expect(project.full_path).to eq("#{group.path}/#{project.path}")
           end
@@ -122,11 +122,11 @@ describe Groups::TransferService, :postgresql do
       context 'when the new parent group is the same as the previous parent group' do
         let(:group) { create(:group, :public, :nested, parent: new_parent_group) }
 
-        it 'should return false' do
+        it 'returns false' do
           expect(transfer_service.execute(new_parent_group)).to be_falsy
         end
 
-        it 'should add an error on group' do
+        it 'adds an error on group' do
           transfer_service.execute(new_parent_group)
           expect(transfer_service.error).to eq('Transfer failed: Group is already associated to the parent group.')
         end
@@ -135,11 +135,11 @@ describe Groups::TransferService, :postgresql do
       context 'when the user does not have the right policies' do
         let!(:group_member) { create(:group_member, :guest, group: group, user: user) }
 
-        it "should return false" do
+        it "returns false" do
           expect(transfer_service.execute(new_parent_group)).to be_falsy
         end
 
-        it "should add an error on group" do
+        it "adds an error on group" do
           transfer_service.execute(new_parent_group)
           expect(transfer_service.error).to eq("Transfer failed: You don't have enough permissions.")
         end
@@ -152,11 +152,11 @@ describe Groups::TransferService, :postgresql do
           create(:group, path: "not-unique", parent: new_parent_group)
         end
 
-        it 'should return false' do
+        it 'returns false' do
           expect(transfer_service.execute(new_parent_group)).to be_falsy
         end
 
-        it 'should add an error on group' do
+        it 'adds an error on group' do
           transfer_service.execute(new_parent_group)
           expect(transfer_service.error).to eq('Transfer failed: The parent group already has a subgroup with the same path.')
         end
@@ -171,11 +171,11 @@ describe Groups::TransferService, :postgresql do
           group.update_attribute(:path, 'foo')
         end
 
-        it 'should return false' do
+        it 'returns false' do
           expect(transfer_service.execute(new_parent_group)).to be_falsy
         end
 
-        it 'should add an error on group' do
+        it 'adds an error on group' do
           transfer_service.execute(new_parent_group)
           expect(transfer_service.error).to eq('Transfer failed: Validation failed: Group URL has already been taken')
         end
@@ -191,7 +191,7 @@ describe Groups::TransferService, :postgresql do
           let(:new_parent_group) { create(:group, :public) }
           let(:group) { create(:group, :private, :nested) }
 
-          it 'should not update the visibility for the group' do
+          it 'does not update the visibility for the group' do
             group.reload
             expect(group.private?).to be_truthy
             expect(group.visibility_level).not_to eq(new_parent_group.visibility_level)
@@ -202,27 +202,27 @@ describe Groups::TransferService, :postgresql do
           let(:new_parent_group) { create(:group, :private) }
           let(:group) { create(:group, :public, :nested) }
 
-          it 'should update visibility level based on the parent group' do
+          it 'updates visibility level based on the parent group' do
             group.reload
             expect(group.private?).to be_truthy
             expect(group.visibility_level).to eq(new_parent_group.visibility_level)
           end
         end
 
-        it 'should update visibility for the group based on the parent group' do
+        it 'updates visibility for the group based on the parent group' do
           expect(group.visibility_level).to eq(new_parent_group.visibility_level)
         end
 
-        it 'should update parent group to the new parent ' do
+        it 'updates parent group to the new parent' do
           expect(group.parent).to eq(new_parent_group)
         end
 
-        it 'should return the group as children of the new parent' do
+        it 'returns the group as children of the new parent' do
           expect(new_parent_group.children.count).to eq(1)
           expect(new_parent_group.children.first).to eq(group)
         end
 
-        it 'should create a redirect for the group' do
+        it 'creates a redirect for the group' do
           expect(group.redirect_routes.count).to eq(1)
         end
       end
@@ -236,21 +236,21 @@ describe Groups::TransferService, :postgresql do
           transfer_service.execute(new_parent_group)
         end
 
-        it 'should update subgroups path' do
+        it 'updates subgroups path' do
           new_parent_path = new_parent_group.path
           group.children.each do |subgroup|
             expect(subgroup.full_path).to eq("#{new_parent_path}/#{group.path}/#{subgroup.path}")
           end
         end
 
-        it 'should create redirects for the subgroups' do
+        it 'creates redirects for the subgroups' do
           expect(group.redirect_routes.count).to eq(1)
           expect(subgroup1.redirect_routes.count).to eq(1)
           expect(subgroup2.redirect_routes.count).to eq(1)
         end
 
         context 'when the new parent has a higher visibility than the children' do
-          it 'should not update the children visibility' do
+          it 'does not update the children visibility' do
             expect(subgroup1.private?).to be_truthy
             expect(subgroup2.internal?).to be_truthy
           end
@@ -261,7 +261,7 @@ describe Groups::TransferService, :postgresql do
           let!(:subgroup2) { create(:group, :public, parent: group) }
           let(:new_parent_group) { create(:group, :private) }
 
-          it 'should update children visibility to match the new parent' do
+          it 'updates children visibility to match the new parent' do
             group.children.each do |subgroup|
               expect(subgroup.private?).to be_truthy
             end
@@ -279,21 +279,21 @@ describe Groups::TransferService, :postgresql do
           transfer_service.execute(new_parent_group)
         end
 
-        it 'should update projects path' do
+        it 'updates projects path' do
           new_parent_path = new_parent_group.path
           group.projects.each do |project|
             expect(project.full_path).to eq("#{new_parent_path}/#{group.path}/#{project.name}")
           end
         end
 
-        it 'should create permanent redirects for the projects' do
+        it 'creates permanent redirects for the projects' do
           expect(group.redirect_routes.count).to eq(1)
           expect(project1.redirect_routes.count).to eq(1)
           expect(project2.redirect_routes.count).to eq(1)
         end
 
         context 'when the new parent has a higher visibility than the projects' do
-          it 'should not update projects visibility' do
+          it 'does not update projects visibility' do
             expect(project1.private?).to be_truthy
             expect(project2.internal?).to be_truthy
           end
@@ -304,7 +304,7 @@ describe Groups::TransferService, :postgresql do
           let!(:project2) { create(:project, :repository, :public, namespace: group) }
           let(:new_parent_group) { create(:group, :private) }
 
-          it 'should update projects visibility to match the new parent' do
+          it 'updates projects visibility to match the new parent' do
             group.projects.each do |project|
               expect(project.private?).to be_truthy
             end
@@ -324,21 +324,21 @@ describe Groups::TransferService, :postgresql do
           transfer_service.execute(new_parent_group)
         end
 
-        it 'should update subgroups path' do
+        it 'updates subgroups path' do
           new_parent_path = new_parent_group.path
           group.children.each do |subgroup|
             expect(subgroup.full_path).to eq("#{new_parent_path}/#{group.path}/#{subgroup.path}")
           end
         end
 
-        it 'should update projects path' do
+        it 'updates projects path' do
           new_parent_path = new_parent_group.path
           group.projects.each do |project|
             expect(project.full_path).to eq("#{new_parent_path}/#{group.path}/#{project.name}")
           end
         end
 
-        it 'should create redirect for the subgroups and projects' do
+        it 'creates redirect for the subgroups and projects' do
           expect(group.redirect_routes.count).to eq(1)
           expect(subgroup1.redirect_routes.count).to eq(1)
           expect(subgroup2.redirect_routes.count).to eq(1)
@@ -360,7 +360,7 @@ describe Groups::TransferService, :postgresql do
           transfer_service.execute(new_parent_group)
         end
 
-        it 'should update subgroups path' do
+        it 'updates subgroups path' do
           new_base_path = "#{new_parent_group.path}/#{group.path}"
           group.children.each do |children|
             expect(children.full_path).to eq("#{new_base_path}/#{children.path}")
@@ -372,7 +372,7 @@ describe Groups::TransferService, :postgresql do
           end
         end
 
-        it 'should update projects path' do
+        it 'updates projects path' do
           new_parent_path = "#{new_parent_group.path}/#{group.path}"
           subgroup1.projects.each do |project|
             project_full_path = "#{new_parent_path}/#{project.namespace.path}/#{project.name}"
@@ -380,7 +380,7 @@ describe Groups::TransferService, :postgresql do
           end
         end
 
-        it 'should create redirect for the subgroups and projects' do
+        it 'creates redirect for the subgroups and projects' do
           expect(group.redirect_routes.count).to eq(1)
           expect(project1.redirect_routes.count).to eq(1)
           expect(subgroup1.redirect_routes.count).to eq(1)
@@ -402,7 +402,7 @@ describe Groups::TransferService, :postgresql do
           transfer_service.execute(new_parent_group)
         end
 
-        it 'should restore group and projects visibility' do
+        it 'restores group and projects visibility' do
           subgroup1.reload
           project1.reload
           expect(subgroup1.public?).to be_truthy
diff --git a/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb b/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb
index 52bbd4e794d590d2d5ac02ebaa6b7dfe7abfad62..df29cec30eb0eef474adab3ce2b5ee1a63db6141 100644
--- a/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb
+++ b/spec/services/merge_requests/merge_when_pipeline_succeeds_service_spec.rb
@@ -95,7 +95,7 @@ describe MergeRequests::MergeWhenPipelineSucceedsService do
                              sha: '1234abcdef', status: 'success')
       end
 
-      it 'it does not merge request' do
+      it 'does not merge request' do
         expect(MergeWorker).not_to receive(:perform_async)
         service.trigger(old_pipeline)
       end
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 5cf3577f01f7e9fbf3fda7133e138a49ef57980e..bd10523bc94f854104eb431a156a9c75a6a4ba4a 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -454,35 +454,35 @@ describe MergeRequests::RefreshService do
       end
       let(:force_push_commit) { @project.commit('feature').id }
 
-      it 'should reload a new diff for a push to the forked project' do
+      it 'reloads a new diff for a push to the forked project' do
         expect do
           service.new(@fork_project, @user).execute(@oldrev, first_commit, 'refs/heads/master')
           reload_mrs
         end.to change { forked_master_mr.merge_request_diffs.count }.by(1)
       end
 
-      it 'should reload a new diff for a force push to the source branch' do
+      it 'reloads a new diff for a force push to the source branch' do
         expect do
           service.new(@fork_project, @user).execute(@oldrev, force_push_commit, 'refs/heads/master')
           reload_mrs
         end.to change { forked_master_mr.merge_request_diffs.count }.by(1)
       end
 
-      it 'should reload a new diff for a force push to the target branch' do
+      it 'reloads a new diff for a force push to the target branch' do
         expect do
           service.new(@project, @user).execute(@oldrev, force_push_commit, 'refs/heads/master')
           reload_mrs
         end.to change { forked_master_mr.merge_request_diffs.count }.by(1)
       end
 
-      it 'should reload a new diff for a push to the target project that contains a commit in the MR' do
+      it 'reloads a new diff for a push to the target project that contains a commit in the MR' do
         expect do
           service.new(@project, @user).execute(@oldrev, first_commit, 'refs/heads/master')
           reload_mrs
         end.to change { forked_master_mr.merge_request_diffs.count }.by(1)
       end
 
-      it 'should not increase the diff count for a new push to target branch' do
+      it 'does not increase the diff count for a new push to target branch' do
         new_commit = @project.repository.create_file(@user, 'new-file.txt', 'A new file',
                                                      message: 'This is a test',
                                                      branch_name: 'master')
diff --git a/spec/services/projects/auto_devops/disable_service_spec.rb b/spec/services/projects/auto_devops/disable_service_spec.rb
index 76977d7a1a76f17784532dbf33a6e3fe87076a27..fb1ab3f9949195c2b711acffdcf48db870c9fbee 100644
--- a/spec/services/projects/auto_devops/disable_service_spec.rb
+++ b/spec/services/projects/auto_devops/disable_service_spec.rb
@@ -46,7 +46,7 @@ describe Projects::AutoDevops::DisableService, '#execute' do
           create(:ci_pipeline, :failed, :auto_devops_source, project: project)
         end
 
-        it 'should disable Auto DevOps for project' do
+        it 'disables Auto DevOps for project' do
           subject
 
           expect(auto_devops.enabled).to eq(false)
@@ -58,7 +58,7 @@ describe Projects::AutoDevops::DisableService, '#execute' do
           create_list(:ci_pipeline, 2, :failed, :auto_devops_source, project: project)
         end
 
-        it 'should explicitly disable Auto DevOps for project' do
+        it 'explicitly disables Auto DevOps for project' do
           subject
 
           expect(auto_devops.reload.enabled).to eq(false)
@@ -70,7 +70,7 @@ describe Projects::AutoDevops::DisableService, '#execute' do
           create(:ci_pipeline, :success, :auto_devops_source, project: project)
         end
 
-        it 'should not disable Auto DevOps for project' do
+        it 'does not disable Auto DevOps for project' do
           subject
 
           expect(auto_devops.reload.enabled).to be_nil
@@ -85,14 +85,14 @@ describe Projects::AutoDevops::DisableService, '#execute' do
         create(:ci_pipeline, :failed, :auto_devops_source, project: project)
       end
 
-      it 'should disable Auto DevOps for project' do
+      it 'disables Auto DevOps for project' do
         subject
         auto_devops = project.reload.auto_devops
 
         expect(auto_devops.enabled).to eq(false)
       end
 
-      it 'should create a ProjectAutoDevops record' do
+      it 'creates a ProjectAutoDevops record' do
         expect { subject }.to change { ProjectAutoDevops.count }.from(0).to(1)
       end
     end
diff --git a/spec/services/projects/participants_service_spec.rb b/spec/services/projects/participants_service_spec.rb
index 4b6d0c5136305b87c9d50a1f1972bb4944c7b187..8455b9bc3cf26be64421aabfe8d6aa206bfa58f8 100644
--- a/spec/services/projects/participants_service_spec.rb
+++ b/spec/services/projects/participants_service_spec.rb
@@ -41,12 +41,12 @@ describe Projects::ParticipantsService do
         group.add_owner(user)
       end
 
-      it 'should return an url for the avatar' do
+      it 'returns an url for the avatar' do
         expect(service.groups.size).to eq 1
         expect(service.groups.first[:avatar_url]).to eq("/uploads/-/system/group/avatar/#{group.id}/dk.png")
       end
 
-      it 'should return an url for the avatar with relative url' do
+      it 'returns an url for the avatar with relative url' do
         stub_config_setting(relative_url_root: '/gitlab')
         stub_config_setting(url: Settings.send(:build_gitlab_url))
 
diff --git a/spec/support/features/discussion_comments_shared_example.rb b/spec/support/features/discussion_comments_shared_example.rb
index 42a086d58d2f639cfe57672639b69ace3b3d1c92..5b79c40f27b78b39830481aa808f5ea2605dc9bc 100644
--- a/spec/support/features/discussion_comments_shared_example.rb
+++ b/spec/support/features/discussion_comments_shared_example.rb
@@ -224,7 +224,7 @@ shared_examples 'discussion comments' do |resource_name|
           find(toggle_selector).click
         end
 
-        it 'should have "Start discussion" selected' do
+        it 'has "Start discussion" selected' do
           find("#{menu_selector} li", match: :first)
           items = all("#{menu_selector} li")
 
@@ -267,7 +267,7 @@ shared_examples 'discussion comments' do |resource_name|
             end
           end
 
-          it 'should have "Comment" selected when opening the menu' do
+          it 'has "Comment" selected when opening the menu' do
             find(toggle_selector).click
 
             find("#{menu_selector} li", match: :first)
diff --git a/spec/support/redis/redis_shared_examples.rb b/spec/support/redis/redis_shared_examples.rb
index a8b00004fe74dd5095b3fde872c013b835473b65..6aa5996009275e7eb2c0cf62ff0ad60a9b053744 100644
--- a/spec/support/redis/redis_shared_examples.rb
+++ b/spec/support/redis/redis_shared_examples.rb
@@ -90,7 +90,7 @@ RSpec.shared_examples "redis_shared_examples" do
     subject { described_class._raw_config }
     let(:config_file_name) { '/var/empty/doesnotexist' }
 
-    it 'should be frozen' do
+    it 'is frozen' do
       expect(subject).to be_frozen
     end
 
diff --git a/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb b/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb
index 98ab04c56367a61580f2ab3927c0335f8d029a55..eb051166a69d496f3eae97fbf6bc1438cefff91e 100644
--- a/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb
+++ b/spec/support/shared_examples/controllers/set_sort_order_from_user_preference_shared_examples.rb
@@ -4,7 +4,7 @@ shared_examples 'set sort order from user preference' do
     # however any other field present in user_preferences table can be used for testing.
 
     context 'when database is in read-only mode' do
-      it 'it does not update user preference' do
+      it 'does not update user preference' do
         allow(Gitlab::Database).to receive(:read_only?).and_return(true)
 
         expect_any_instance_of(UserPreference).not_to receive(:update).with({ controller.send(:issuable_sorting_field) => sorting_param })
diff --git a/spec/support/shared_examples/helm_generated_script.rb b/spec/support/shared_examples/helm_generated_script.rb
index ba9b7d3bdcf7493e4f26332682a2006808dfe209..01bee6032747e7e87aa9d093d44461a4ab4f7f54 100644
--- a/spec/support/shared_examples/helm_generated_script.rb
+++ b/spec/support/shared_examples/helm_generated_script.rb
@@ -6,7 +6,7 @@ shared_examples 'helm commands' do
       EOS
     end
 
-    it 'should return appropriate command' do
+    it 'returns appropriate command' do
       expect(subject.generate_script.strip).to eq((helm_setup + commands).strip)
     end
   end
diff --git a/spec/support/shared_examples/models/cluster_application_helm_cert_examples.rb b/spec/support/shared_examples/models/cluster_application_helm_cert_examples.rb
index d87b3181e80bfaa4ec2d0ea612b7bde1a5b79e76..033b65bdc8498ebaab8ce3913aaf7529aa97461c 100644
--- a/spec/support/shared_examples/models/cluster_application_helm_cert_examples.rb
+++ b/spec/support/shared_examples/models/cluster_application_helm_cert_examples.rb
@@ -9,12 +9,12 @@ shared_examples 'cluster application helm specs' do |application_name|
         application.cluster.application_helm.ca_cert = nil
       end
 
-      it 'should not include cert files when there is no ca_cert entry' do
+      it 'does not include cert files when there is no ca_cert entry' do
         expect(subject).not_to include(:'ca.pem', :'cert.pem', :'key.pem')
       end
     end
 
-    it 'should include cert files when there is a ca_cert entry' do
+    it 'includes cert files when there is a ca_cert entry' do
       expect(subject).to include(:'ca.pem', :'cert.pem', :'key.pem')
       expect(subject[:'ca.pem']).to eq(application.cluster.application_helm.ca_cert)
 
diff --git a/spec/support/shared_examples/snippet_visibility_shared_examples.rb b/spec/support/shared_examples/snippet_visibility_shared_examples.rb
index 4f662db21208660dc289c7732761bf14d72da09a..833c31a57cbe68279fbf6452757cd012d2bf3258 100644
--- a/spec/support/shared_examples/snippet_visibility_shared_examples.rb
+++ b/spec/support/shared_examples/snippet_visibility_shared_examples.rb
@@ -220,11 +220,11 @@ RSpec.shared_examples 'snippet visibility' do
       end
 
       context "For #{params[:project_type]} project and #{params[:user_type]} users" do
-        it 'should agree with the read_project_snippet policy' do
+        it 'agrees with the read_project_snippet policy' do
           expect(can?(user, :read_project_snippet, snippet)).to eq(outcome)
         end
 
-        it 'should return proper outcome' do
+        it 'returns proper outcome' do
           results = described_class.new(user, project: project).execute
 
           expect(results.include?(snippet)).to eq(outcome)
@@ -232,7 +232,7 @@ RSpec.shared_examples 'snippet visibility' do
       end
 
       context "Without a given project and #{params[:user_type]} users" do
-        it 'should return proper outcome' do
+        it 'returns proper outcome' do
           results = described_class.new(user).execute
           expect(results.include?(snippet)).to eq(outcome)
         end
@@ -283,16 +283,16 @@ RSpec.shared_examples 'snippet visibility' do
       let!(:snippet) { create(:personal_snippet, visibility_level: snippet_visibility, author: author) }
 
       context "For personal and #{params[:snippet_visibility]} snippets with #{params[:user_type]} user" do
-        it 'should agree with read_personal_snippet policy' do
+        it 'agrees with read_personal_snippet policy' do
           expect(can?(user, :read_personal_snippet, snippet)).to eq(outcome)
         end
 
-        it 'should return proper outcome' do
+        it 'returns proper outcome' do
           results = described_class.new(user).execute
           expect(results.include?(snippet)).to eq(outcome)
         end
 
-        it 'should return personal snippets when the user cannot read cross project' do
+        it 'returns personal snippets when the user cannot read cross project' do
           allow(Ability).to receive(:allowed?).and_call_original
           allow(Ability).to receive(:allowed?).with(user, :read_cross_project) { false }
 
diff --git a/spec/uploaders/records_uploads_spec.rb b/spec/uploaders/records_uploads_spec.rb
index ab98976ec273315984fadfcf42c5de6828015fc6..42352f9b9f864060af6300f3f94260cf0e484c38 100644
--- a/spec/uploaders/records_uploads_spec.rb
+++ b/spec/uploaders/records_uploads_spec.rb
@@ -71,7 +71,7 @@ describe RecordsUploads do
       expect { uploader.store!(upload_fixture('rails_sample.jpg')) }.not_to change { Upload.count }
     end
 
-    it 'it destroys Upload records at the same path before recording' do
+    it 'destroys Upload records at the same path before recording' do
       existing = Upload.create!(
         path: File.join('uploads', 'rails_sample.jpg'),
         size: 512.kilobytes,
@@ -88,7 +88,7 @@ describe RecordsUploads do
   end
 
   describe '#destroy_upload callback' do
-    it 'it destroys Upload records at the same path after removal' do
+    it 'destroys Upload records at the same path after removal' do
       uploader.store!(upload_fixture('rails_sample.jpg'))
 
       expect { uploader.remove! }.to change { Upload.count }.from(1).to(0)
diff --git a/spec/views/groups/edit.html.haml_spec.rb b/spec/views/groups/edit.html.haml_spec.rb
index 38cfb84f0d5c5ed6aeb65826f109606f4a9dd1ca..29e15960fb806104771d89044f92dfc35c3463dd 100644
--- a/spec/views/groups/edit.html.haml_spec.rb
+++ b/spec/views/groups/edit.html.haml_spec.rb
@@ -12,7 +12,7 @@ describe 'groups/edit.html.haml' do
     end
 
     shared_examples_for '"Share with group lock" setting' do |checkbox_options|
-      it 'should have the correct label, help text, and checkbox options' do
+      it 'has the correct label, help text, and checkbox options' do
         assign(:group, test_group)
         allow(view).to receive(:can?).with(test_user, :admin_group, test_group).and_return(true)
         allow(view).to receive(:can_change_group_visibility_level?).and_return(false)
diff --git a/spec/views/projects/_home_panel.html.haml_spec.rb b/spec/views/projects/_home_panel.html.haml_spec.rb
index 908ecb898e4a38e26f6af44000b0d8a5cda4ffbe..12925a5ab07e0387d455fd5ebb5d4487861b3eab 100644
--- a/spec/views/projects/_home_panel.html.haml_spec.rb
+++ b/spec/views/projects/_home_panel.html.haml_spec.rb
@@ -45,7 +45,7 @@ describe 'projects/_home_panel' do
 
   context 'badges' do
     shared_examples 'show badges' do
-      it 'should render the all badges' do
+      it 'renders the all badges' do
         render
 
         expect(rendered).to have_selector('.project-badges a')
@@ -70,7 +70,7 @@ describe 'projects/_home_panel' do
     context 'has no badges' do
       let(:project) { create(:project) }
 
-      it 'should not render any badge' do
+      it 'does not render any badge' do
         render
 
         expect(rendered).not_to have_selector('.project-badges')
diff --git a/spec/views/shared/milestones/_issuables.html.haml.rb b/spec/views/shared/milestones/_issuables.html.haml.rb
index 4769d569548840cd2e55fcf9e3b52ff26632bdff..cbbb984935f84c8d74813d5c631bb96e2cff37c6 100644
--- a/spec/views/shared/milestones/_issuables.html.haml.rb
+++ b/spec/views/shared/milestones/_issuables.html.haml.rb
@@ -11,12 +11,12 @@ describe 'shared/milestones/_issuables.html.haml' do
     stub_template 'shared/milestones/_issuable.html.haml' => ''
   end
 
-  it 'should show the issuables count if show_counter is true' do
+  it 'shows the issuables count if show_counter is true' do
     render 'shared/milestones/issuables', show_counter: true
     expect(rendered).to have_content('100')
   end
 
-  it 'should not show the issuables count if show_counter is false' do
+  it 'does not show the issuables count if show_counter is false' do
     render 'shared/milestones/issuables', show_counter: false
     expect(rendered).not_to have_content('100')
   end
@@ -24,7 +24,7 @@ describe 'shared/milestones/_issuables.html.haml' do
   describe 'a high issuables count' do
     let(:issuables_size) { 1000 }
 
-    it 'should show a delimited number if show_counter is true' do
+    it 'shows a delimited number if show_counter is true' do
       render 'shared/milestones/issuables', show_counter: true
       expect(rendered).to have_content('1,000')
     end
diff --git a/spec/views/shared/projects/_project.html.haml_spec.rb b/spec/views/shared/projects/_project.html.haml_spec.rb
index 3b14045e61f6b5b5496562d8ca10306e8a1fd4d1..dc223861037a710c9863c30d8f061e7e1b97572d 100644
--- a/spec/views/shared/projects/_project.html.haml_spec.rb
+++ b/spec/views/shared/projects/_project.html.haml_spec.rb
@@ -8,13 +8,13 @@ describe 'shared/projects/_project.html.haml' do
     allow(view).to receive(:can?) { true }
   end
 
-  it 'should render creator avatar if project has a creator' do
+  it 'renders creator avatar if project has a creator' do
     render 'shared/projects/project', use_creator_avatar: true, project: project
 
     expect(rendered).to have_selector('img.avatar')
   end
 
-  it 'should render a generic avatar if project does not have a creator' do
+  it 'renders a generic avatar if project does not have a creator' do
     project.creator = nil
 
     render 'shared/projects/project', use_creator_avatar: true, project: project