Commit 0ce67858 authored by Jacopo's avatar Jacopo
Browse files

Replaces `tag: true` into `:tag` in the specs

Replaces all the explicit include metadata syntax in the specs (tag:
true) into the implicit one (:tag).
Added a cop to prevent future errors and handle autocorrection.
parent 032563e54877
---
title: 'Replace `tag: true` into `:tag` in the specs'
merge_request: 14653
author: Jacopo Beschi @jacopo-beschi
type: added
# frozen_string_literal: true
require 'rubocop-rspec'
module RuboCop
module Cop
module RSpec
# Checks for verbose include metadata used in the specs.
#
# @example
# # bad
# describe MyClass, js: true do
# end
#
# # good
# describe MyClass, :js do
# end
class VerboseIncludeMetadata < Cop
MSG = 'Use `%s` instead of `%s`.'
SELECTORS = %i[describe context feature example_group it specify example scenario its].freeze
def_node_matcher :include_metadata, <<-PATTERN
(send {(const nil :RSpec) nil} {#{SELECTORS.map(&:inspect).join(' ')}}
!const
...
(hash $...))
PATTERN
def_node_matcher :invalid_metadata?, <<-PATTERN
(pair
(sym $...)
(true))
PATTERN
def on_send(node)
invalid_metadata_matches(node) do |match|
add_offense(node, :expression, format(MSG, good(match), bad(match)))
end
end
def autocorrect(node)
lambda do |corrector|
invalid_metadata_matches(node) do |match|
corrector.replace(match.loc.expression, good(match))
end
end
end
private
def invalid_metadata_matches(node)
include_metadata(node) do |matches|
matches.select(&method(:invalid_metadata?)).each do |match|
yield match
end
end
end
def bad(match)
"#{metadata_key(match)}: true"
end
def good(match)
":#{metadata_key(match)}"
end
def metadata_key(match)
match.children[0].source
end
end
end
end
end
......@@ -21,3 +21,4 @@
require_relative 'cop/migration/timestamps'
require_relative 'cop/migration/update_column_in_batches'
require_relative 'cop/rspec/single_line_hook'
require_relative 'cop/rspec/verbose_include_metadata'
......@@ -141,7 +141,7 @@
end
end
context 'when the storage is not available', broken_storage: true do
context 'when the storage is not available', :broken_storage do
set(:project) { create(:project, :broken_storage) }
before do
......
require 'spec_helper'
describe "Admin::AbuseReports", js: true do
describe "Admin::AbuseReports", :js do
let(:user) { create(:user) }
context 'as an admin' do
......
......@@ -40,7 +40,7 @@
expect(page).not_to have_content 'Migration to new server'
end
scenario 'Live preview a customized broadcast message', js: true do
scenario 'Live preview a customized broadcast message', :js do
fill_in 'broadcast_message_message', with: "Live **Markdown** previews. :tada:"
page.within('.broadcast-message-preview') do
......
require 'rails_helper'
feature 'Admin disables 2FA for a user' do
scenario 'successfully', js: true do
scenario 'successfully', :js do
sign_in(create(:admin))
user = create(:user, :two_factor)
......
......@@ -52,7 +52,7 @@
expect_selected_visibility(internal)
end
scenario 'when entered in group path, it auto filled the group name', js: true do
scenario 'when entered in group path, it auto filled the group name', :js do
visit admin_groups_path
click_link "New group"
group_path = 'gitlab'
......@@ -81,7 +81,7 @@
expect_selected_visibility(group.visibility_level)
end
scenario 'edit group path does not change group name', js: true do
scenario 'edit group path does not change group name', :js do
group = create(:group, :private)
visit admin_group_edit_path(group)
......@@ -93,7 +93,7 @@
end
end
describe 'add user into a group', js: true do
describe 'add user into a group', :js do
shared_context 'adds user into a group' do
it do
visit admin_group_path(group)
......@@ -124,7 +124,7 @@
group.add_user(:user, Gitlab::Access::OWNER)
end
it 'adds admin a to a group as developer', js: true do
it 'adds admin a to a group as developer', :js do
visit group_group_members_path(group)
page.within '.users-group-form' do
......@@ -141,7 +141,7 @@
end
end
describe 'admin remove himself from a group', js: true do
describe 'admin remove himself from a group', :js do
it 'removes admin from the group' do
group.add_user(current_user, Gitlab::Access::DEVELOPER)
......
require 'spec_helper'
feature "Admin Health Check", feature: true, broken_storage: true do
feature "Admin Health Check", :feature, :broken_storage do
include StubENV
before do
......
......@@ -74,7 +74,7 @@
end
end
describe 'Test', js: true do
describe 'Test', :js do
before do
WebMock.stub_request(:post, @system_hook.url)
visit admin_hooks_path
......
......@@ -30,7 +30,7 @@
end
end
it 'deletes all labels', js: true do
it 'deletes all labels', :js do
page.within '.labels' do
page.all('.btn-remove').each do |remove|
remove.click
......
......@@ -28,7 +28,7 @@
expect(page).not_to have_content(archived_project.name)
end
it 'renders all projects', js: true do
it 'renders all projects', :js do
find(:css, '#sort-projects-dropdown').click
click_link 'Show archived projects'
......@@ -37,7 +37,7 @@
expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived')
end
it 'renders only archived projects', js: true do
it 'renders only archived projects', :js do
find(:css, '#sort-projects-dropdown').click
click_link 'Show archived projects only'
......@@ -74,7 +74,7 @@
.to receive(:move_uploads_to_new_namespace).and_return(true)
end
it 'transfers project to group web', js: true do
it 'transfers project to group web', :js do
visit admin_project_path(project)
click_button 'Search for Namespace'
......@@ -91,7 +91,7 @@
project.team << [user, :master]
end
it 'adds admin a to a project as developer', js: true do
it 'adds admin a to a project as developer', :js do
visit project_project_members_path(project)
page.within '.users-project-form' do
......
require 'spec_helper'
describe 'Admin > Users > Impersonation Tokens', js: true do
describe 'Admin > Users > Impersonation Tokens', :js do
let(:admin) { create(:admin) }
let!(:user) { create(:user) }
......
......@@ -288,7 +288,7 @@ def expect_two_factor_status(status)
end
end
it 'allows group membership to be revoked', js: true do
it 'allows group membership to be revoked', :js do
page.within(first('.group_member')) do
find('.btn-remove').click
end
......@@ -309,7 +309,7 @@ def expect_two_factor_status(status)
end
end
describe 'remove users secondary email', js: true do
describe 'remove users secondary email', :js do
let!(:secondary_email) do
create :email, email: 'secondary@example.com', user: user
end
......
......@@ -32,7 +32,7 @@
end
end
scenario 'to clear all repository checks', js: true do
scenario 'to clear all repository checks', :js do
visit admin_application_settings_path
expect(RepositoryCheck::ClearWorker).to receive(:perform_async)
......
......@@ -31,7 +31,7 @@
expect(page).to have_link('Set up auto deploy')
end
it 'includes OpenShift as an available template', js: true do
it 'includes OpenShift as an available template', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
......@@ -40,7 +40,7 @@
end
end
it 'creates a merge request using "auto-deploy" branch', js: true do
it 'creates a merge request using "auto-deploy" branch', :js do
click_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do
......
require 'rails_helper'
describe 'Issue Boards', js: true do
describe 'Issue Boards', :js do
include DragTo
let(:group) { create(:group, :nested) }
......
require 'rails_helper'
describe 'Issue Boards shortcut', js: true do
describe 'Issue Boards shortcut', :js do
let(:project) { create(:project) }
before do
......
require 'rails_helper'
describe 'Issue Boards new issue', js: true do
describe 'Issue Boards new issue', :js do
let(:project) { create(:project, :public) }
let(:board) { create(:board, project: project) }
let!(:list) { create(:list, board: board, position: 0) }
......
require 'rails_helper'
describe 'Issue Boards', js: true do
describe 'Issue Boards', :js do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:project) { create(:project, :public) }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment