Commit 0ce67858 authored by Jacopo's avatar Jacopo

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 2ef28db9
---
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/reversible_add_column_with_default' ...@@ -21,3 +21,4 @@ require_relative 'cop/migration/reversible_add_column_with_default'
require_relative 'cop/migration/timestamps' require_relative 'cop/migration/timestamps'
require_relative 'cop/migration/update_column_in_batches' require_relative 'cop/migration/update_column_in_batches'
require_relative 'cop/rspec/single_line_hook' require_relative 'cop/rspec/single_line_hook'
require_relative 'cop/rspec/verbose_include_metadata'
...@@ -141,7 +141,7 @@ describe ProjectsController do ...@@ -141,7 +141,7 @@ describe ProjectsController do
end end
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) } set(:project) { create(:project, :broken_storage) }
before do before do
......
require 'spec_helper' require 'spec_helper'
describe "Admin::AbuseReports", js: true do describe "Admin::AbuseReports", :js do
let(:user) { create(:user) } let(:user) { create(:user) }
context 'as an admin' do context 'as an admin' do
......
...@@ -40,7 +40,7 @@ feature 'Admin Broadcast Messages' do ...@@ -40,7 +40,7 @@ feature 'Admin Broadcast Messages' do
expect(page).not_to have_content 'Migration to new server' expect(page).not_to have_content 'Migration to new server'
end 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:" fill_in 'broadcast_message_message', with: "Live **Markdown** previews. :tada:"
page.within('.broadcast-message-preview') do page.within('.broadcast-message-preview') do
......
require 'rails_helper' require 'rails_helper'
feature 'Admin disables 2FA for a user' do feature 'Admin disables 2FA for a user' do
scenario 'successfully', js: true do scenario 'successfully', :js do
sign_in(create(:admin)) sign_in(create(:admin))
user = create(:user, :two_factor) user = create(:user, :two_factor)
......
...@@ -52,7 +52,7 @@ feature 'Admin Groups' do ...@@ -52,7 +52,7 @@ feature 'Admin Groups' do
expect_selected_visibility(internal) expect_selected_visibility(internal)
end 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 visit admin_groups_path
click_link "New group" click_link "New group"
group_path = 'gitlab' group_path = 'gitlab'
...@@ -81,7 +81,7 @@ feature 'Admin Groups' do ...@@ -81,7 +81,7 @@ feature 'Admin Groups' do
expect_selected_visibility(group.visibility_level) expect_selected_visibility(group.visibility_level)
end 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) group = create(:group, :private)
visit admin_group_edit_path(group) visit admin_group_edit_path(group)
...@@ -93,7 +93,7 @@ feature 'Admin Groups' do ...@@ -93,7 +93,7 @@ feature 'Admin Groups' do
end end
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 shared_context 'adds user into a group' do
it do it do
visit admin_group_path(group) visit admin_group_path(group)
...@@ -124,7 +124,7 @@ feature 'Admin Groups' do ...@@ -124,7 +124,7 @@ feature 'Admin Groups' do
group.add_user(:user, Gitlab::Access::OWNER) group.add_user(:user, Gitlab::Access::OWNER)
end 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) visit group_group_members_path(group)
page.within '.users-group-form' do page.within '.users-group-form' do
...@@ -141,7 +141,7 @@ feature 'Admin Groups' do ...@@ -141,7 +141,7 @@ feature 'Admin Groups' do
end end
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 it 'removes admin from the group' do
group.add_user(current_user, Gitlab::Access::DEVELOPER) group.add_user(current_user, Gitlab::Access::DEVELOPER)
......
require 'spec_helper' require 'spec_helper'
feature "Admin Health Check", feature: true, broken_storage: true do feature "Admin Health Check", :feature, :broken_storage do
include StubENV include StubENV
before do before do
......
...@@ -74,7 +74,7 @@ describe 'Admin::Hooks', :js do ...@@ -74,7 +74,7 @@ describe 'Admin::Hooks', :js do
end end
end end
describe 'Test', js: true do describe 'Test', :js do
before do before do
WebMock.stub_request(:post, @system_hook.url) WebMock.stub_request(:post, @system_hook.url)
visit admin_hooks_path visit admin_hooks_path
......
...@@ -30,7 +30,7 @@ RSpec.describe 'admin issues labels' do ...@@ -30,7 +30,7 @@ RSpec.describe 'admin issues labels' do
end end
end end
it 'deletes all labels', js: true do it 'deletes all labels', :js do
page.within '.labels' do page.within '.labels' do
page.all('.btn-remove').each do |remove| page.all('.btn-remove').each do |remove|
remove.click remove.click
......
...@@ -28,7 +28,7 @@ describe "Admin::Projects" do ...@@ -28,7 +28,7 @@ describe "Admin::Projects" do
expect(page).not_to have_content(archived_project.name) expect(page).not_to have_content(archived_project.name)
end end
it 'renders all projects', js: true do it 'renders all projects', :js do
find(:css, '#sort-projects-dropdown').click find(:css, '#sort-projects-dropdown').click
click_link 'Show archived projects' click_link 'Show archived projects'
...@@ -37,7 +37,7 @@ describe "Admin::Projects" do ...@@ -37,7 +37,7 @@ describe "Admin::Projects" do
expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived') expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived')
end end
it 'renders only archived projects', js: true do it 'renders only archived projects', :js do
find(:css, '#sort-projects-dropdown').click find(:css, '#sort-projects-dropdown').click
click_link 'Show archived projects only' click_link 'Show archived projects only'
...@@ -74,7 +74,7 @@ describe "Admin::Projects" do ...@@ -74,7 +74,7 @@ describe "Admin::Projects" do
.to receive(:move_uploads_to_new_namespace).and_return(true) .to receive(:move_uploads_to_new_namespace).and_return(true)
end end
it 'transfers project to group web', js: true do it 'transfers project to group web', :js do
visit admin_project_path(project) visit admin_project_path(project)
click_button 'Search for Namespace' click_button 'Search for Namespace'
...@@ -91,7 +91,7 @@ describe "Admin::Projects" do ...@@ -91,7 +91,7 @@ describe "Admin::Projects" do
project.team << [user, :master] project.team << [user, :master]
end 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) visit project_project_members_path(project)
page.within '.users-project-form' do page.within '.users-project-form' do
......
require 'spec_helper' require 'spec_helper'
describe 'Admin > Users > Impersonation Tokens', js: true do describe 'Admin > Users > Impersonation Tokens', :js do
let(:admin) { create(:admin) } let(:admin) { create(:admin) }
let!(:user) { create(:user) } let!(:user) { create(:user) }
......
...@@ -288,7 +288,7 @@ describe "Admin::Users" do ...@@ -288,7 +288,7 @@ describe "Admin::Users" do
end end
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 page.within(first('.group_member')) do
find('.btn-remove').click find('.btn-remove').click
end end
...@@ -309,7 +309,7 @@ describe "Admin::Users" do ...@@ -309,7 +309,7 @@ describe "Admin::Users" do
end end
end end
describe 'remove users secondary email', js: true do describe 'remove users secondary email', :js do
let!(:secondary_email) do let!(:secondary_email) do
create :email, email: 'secondary@example.com', user: user create :email, email: 'secondary@example.com', user: user
end end
......
...@@ -32,7 +32,7 @@ feature 'Admin uses repository checks' do ...@@ -32,7 +32,7 @@ feature 'Admin uses repository checks' do
end end
end end
scenario 'to clear all repository checks', js: true do scenario 'to clear all repository checks', :js do
visit admin_application_settings_path visit admin_application_settings_path
expect(RepositoryCheck::ClearWorker).to receive(:perform_async) expect(RepositoryCheck::ClearWorker).to receive(:perform_async)
......
...@@ -31,7 +31,7 @@ describe 'Auto deploy' do ...@@ -31,7 +31,7 @@ describe 'Auto deploy' do
expect(page).to have_link('Set up auto deploy') expect(page).to have_link('Set up auto deploy')
end 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_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template' click_button 'Apply a GitLab CI Yaml template'
...@@ -40,7 +40,7 @@ describe 'Auto deploy' do ...@@ -40,7 +40,7 @@ describe 'Auto deploy' do
end end
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_link 'Set up auto deploy'
click_button 'Apply a GitLab CI Yaml template' click_button 'Apply a GitLab CI Yaml template'
within '.gitlab-ci-yml-selector' do within '.gitlab-ci-yml-selector' do
......
require 'rails_helper' require 'rails_helper'
describe 'Issue Boards', js: true do describe 'Issue Boards', :js do
include DragTo include DragTo
let(:group) { create(:group, :nested) } let(:group) { create(:group, :nested) }
......
require 'rails_helper' require 'rails_helper'
describe 'Issue Boards shortcut', js: true do describe 'Issue Boards shortcut', :js do
let(:project) { create(:project) } let(:project) { create(:project) }
before do before do
......
require 'rails_helper' require 'rails_helper'
describe 'Issue Boards new issue', js: true do describe 'Issue Boards new issue', :js do
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
let(:board) { create(:board, project: project) } let(:board) { create(:board, project: project) }
let!(:list) { create(:list, board: board, position: 0) } let!(:list) { create(:list, board: board, position: 0) }
......
require 'rails_helper' require 'rails_helper'
describe 'Issue Boards', js: true do describe 'Issue Boards', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:user2) { create(:user) } let(:user2) { create(:user) }
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
......
require 'spec_helper' require 'spec_helper'
describe 'CI Lint', js: true do describe 'CI Lint', :js do
before do before do
sign_in(create(:user)) sign_in(create(:user))
end end
......
require 'spec_helper' require 'spec_helper'
describe "Container Registry", js: true do describe "Container Registry", :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project) } let(:project) { create(:project) }
......
require 'spec_helper' require 'spec_helper'
describe 'Copy as GFM', js: true do describe 'Copy as GFM', :js do
include MarkupHelper include MarkupHelper
include RepoHelpers include RepoHelpers
include ActionView::Helpers::JavaScriptHelper include ActionView::Helpers::JavaScriptHelper
......
require 'spec_helper' require 'spec_helper'
feature 'Cycle Analytics', js: true do feature 'Cycle Analytics', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:guest) { create(:user) } let(:guest) { create(:user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
......
require 'spec_helper' require 'spec_helper'
RSpec.describe 'Dashboard Active Tab', js: true do RSpec.describe 'Dashboard Active Tab', :js do
before do before do
sign_in(create(:user)) sign_in(create(:user))
end end
......
require 'spec_helper' require 'spec_helper'
feature 'Tooltips on .timeago dates', js: true do feature 'Tooltips on .timeago dates', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, name: 'test', namespace: user.namespace) } let(:project) { create(:project, name: 'test', namespace: user.namespace) }
let(:created_date) { Date.yesterday.to_time } let(:created_date) { Date.yesterday.to_time }
......
...@@ -5,7 +5,7 @@ RSpec.describe 'Dashboard Group' do ...@@ -5,7 +5,7 @@ RSpec.describe 'Dashboard Group' do
sign_in(create(:user)) sign_in(create(:user))
end end
it 'creates new group', js: true do it 'creates new group', :js do
visit dashboard_groups_path visit dashboard_groups_path
find('.btn-new').trigger('click') find('.btn-new').trigger('click')
new_path = 'Samurai' new_path = 'Samurai'
......
...@@ -24,7 +24,7 @@ RSpec.describe 'Dashboard Issues' do ...@@ -24,7 +24,7 @@ RSpec.describe 'Dashboard Issues' do
expect(page).not_to have_content(other_issue.title) expect(page).not_to have_content(other_issue.title)
end end
it 'shows checkmark when unassigned is selected for assignee', js: true do it 'shows checkmark when unassigned is selected for assignee', :js do
find('.js-assignee-search').click find('.js-assignee-search').click
find('li', text: 'Unassigned').click find('li', text: 'Unassigned').click
find('.js-assignee-search').click find('.js-assignee-search').click
...@@ -32,7 +32,7 @@ RSpec.describe 'Dashboard Issues' do ...@@ -32,7 +32,7 @@ RSpec.describe 'Dashboard Issues' do
expect(find('li[data-user-id="0"] a.is-active')).to be_visible expect(find('li[data-user-id="0"] a.is-active')).to be_visible
end end
it 'shows issues when current user is author', js: true do it 'shows issues when current user is author', :js do
find('#assignee_id', visible: false).set('') find('#assignee_id', visible: false).set('')
find('.js-author-search', match: :first).click find('.js-author-search', match: :first).click
...@@ -70,7 +70,7 @@ RSpec.describe 'Dashboard Issues' do ...@@ -70,7 +70,7 @@ RSpec.describe 'Dashboard Issues' do
end end
describe 'new issue dropdown' do describe 'new issue dropdown' do
it 'shows projects only with issues feature enabled', js: true do it 'shows projects only with issues feature enabled', :js do
find('.new-project-item-select-button').trigger('click') find('.new-project-item-select-button').trigger('click')
page.within('.select2-results') do page.within('.select2-results') do
...@@ -79,7 +79,7 @@ RSpec.describe 'Dashboard Issues' do ...@@ -79,7 +79,7 @@ RSpec.describe 'Dashboard Issues' do
end end
end end
it 'shows the new issue page', js: true do it 'shows the new issue page', :js do
find('.new-project-item-select-button').trigger('click') find('.new-project-item-select-button').trigger('click')
wait_for_requests wait_for_requests
......
require 'spec_helper' require 'spec_helper'
describe 'Dashboard > label filter', js: true do describe 'Dashboard > label filter', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, name: 'test', namespace: user.namespace) } let(:project) { create(:project, name: 'test', namespace: user.namespace) }
let(:project2) { create(:project, name: 'test2', path: 'test2', namespace: user.namespace) } let(:project2) { create(:project, name: 'test2', path: 'test2', namespace: user.namespace) }
......
...@@ -24,7 +24,7 @@ feature 'Dashboard Merge Requests' do ...@@ -24,7 +24,7 @@ feature 'Dashboard Merge Requests' do
visit merge_requests_dashboard_path visit merge_requests_dashboard_path
end end
it 'shows projects only with merge requests feature enabled', js: true do it 'shows projects only with merge requests feature enabled', :js do
find('.new-project-item-select-button').trigger('click') find('.new-project-item-select-button').trigger('click')
page.within('.select2-results') do page.within('.select2-results') do
...@@ -89,7 +89,7 @@ feature 'Dashboard Merge Requests' do ...@@ -89,7 +89,7 @@ feature 'Dashboard Merge Requests' do
expect(page).not_to have_content(other_merge_request.title) expect(page).not_to have_content(other_merge_request.title)
end end
it 'shows authored merge requests', js: true do it 'shows authored merge requests', :js do
filter_item_select('Any Assignee', '.js-assignee-search') filter_item_select('Any Assignee', '.js-assignee-search')
filter_item_select(current_user.to_reference, '.js-author-search') filter_item_select(current_user.to_reference, '.js-author-search')
...@@ -101,7 +101,7 @@ feature 'Dashboard Merge Requests' do ...@@ -101,7 +101,7 @@ feature 'Dashboard Merge Requests' do
expect(page).not_to have_content(other_merge_request.title) expect(page).not_to have_content(other_merge_request.title)
end end
it 'shows all merge requests', js: true do it 'shows all merge requests', :js do
filter_item_select('Any Assignee', '.js-assignee-search') filter_item_select('Any Assignee', '.js-assignee-search')
filter_item_select('Any Author', '.js-author-search') filter_item_select('Any Author', '.js-author-search')
......
require 'spec_helper' require 'spec_helper'
feature 'Project member activity', js: true do feature 'Project member activity', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public, name: 'x', namespace: user.namespace) } let(:project) { create(:project, :public, name: 'x', namespace: user.namespace) }
......
...@@ -80,7 +80,7 @@ feature 'Dashboard Projects' do ...@@ -80,7 +80,7 @@ feature 'Dashboard Projects' do
end end
end end
describe 'with a pipeline', clean_gitlab_redis_shared_state: true do describe 'with a pipeline', :clean_gitlab_redis_shared_state do
let(:pipeline) { create(:ci_pipeline, project: project, sha: project.commit.sha) } let(:pipeline) { create(:ci_pipeline, project: project, sha: project.commit.sha) }
before do before do
......
require 'spec_helper' require 'spec_helper'
feature 'Dashboard > User filters todos', js: true do feature 'Dashboard > User filters todos', :js do
let(:user_1) { create(:user, username: 'user_1', name: 'user_1') } let(:user_1) { create(:user, username: 'user_1', name: 'user_1') }
let(:user_2) { create(:user, username: 'user_2', name: 'user_2') } let(:user_2) { create(:user, username: 'user_2', name: 'user_2') }
......
...@@ -17,7 +17,7 @@ feature 'Dashboard Todos' do ...@@ -17,7 +17,7 @@ feature 'Dashboard Todos' do
end end
end end
context 'User has a todo', js: true do context 'User has a todo', :js do
before do before do
create(:todo, :mentioned, user: user, project: project, target: issue, author: author) create(:todo, :mentioned, user: user, project: project, target: issue, author: author)
sign_in(user) sign_in(user)
...@@ -177,7 +177,7 @@ feature 'Dashboard Todos' do ...@@ -177,7 +177,7 @@ feature 'Dashboard Todos' do
end end
end end
context 'User has done todos', js: true do context 'User has done todos', :js do
before do before do
create(:todo, :mentioned, :done, user: user, project: project, target: issue, author: author) create(:todo, :mentioned, :done, user: user, project: project, target: issue, author: author)
sign_in(user) sign_in(user)
...@@ -249,7 +249,7 @@ feature 'Dashboard Todos' do ...@@ -249,7 +249,7 @@ feature 'Dashboard Todos' do
expect(page).to have_selector('.gl-pagination .page', count: 2) expect(page).to have_selector('.gl-pagination .page', count: 2)
end end
describe 'mark all as done', js: true do describe 'mark all as done', :js do
before do before do
visit dashboard_todos_path visit dashboard_todos_path
find('.js-todos-mark-all').trigger('click') find('.js-todos-mark-all').trigger('click')
...@@ -267,7 +267,7 @@ feature 'Dashboard Todos' do ...@@ -267,7 +267,7 @@ feature 'Dashboard Todos' do
end end
end end
describe 'undo mark all as done', js: true do describe 'undo mark all as done', :js do
before do before do
visit dashboard_todos_path visit dashboard_todos_path
end end
......
require 'spec_helper' require 'spec_helper'
feature 'Expand and collapse diffs', js: true do feature 'Expand and collapse diffs', :js do
let(:branch) { 'expand-collapse-diffs' } let(:branch) { 'expand-collapse-diffs' }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
......
...@@ -49,7 +49,7 @@ describe "GitLab Flavored Markdown" do ...@@ -49,7 +49,7 @@ describe "GitLab Flavored Markdown" do
end end
end end
describe "for issues", js: true do describe "for issues", :js do
before do before do
@other_issue = create(:issue, @other_issue = create(:issue,
author: user, author: user,
......
require 'spec_helper' require 'spec_helper'
feature 'Group variables', js: true do feature 'Group variables', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:group) { create(:group) } let(:group) { create(:group) }
......
...@@ -11,7 +11,7 @@ feature 'Labels subscription' do ...@@ -11,7 +11,7 @@ feature 'Labels subscription' do
gitlab_sign_in user gitlab_sign_in user
end end
scenario 'users can subscribe/unsubscribe to group labels', js: true do scenario 'users can subscribe/unsubscribe to group labels', :js do
visit group_labels_path(group) visit group_labels_path(group)
expect(page).to have_content('feature') expect(page).to have_content('feature')
......
...@@ -85,7 +85,7 @@ feature 'Group' do ...@@ -85,7 +85,7 @@ feature 'Group' do
end end
end end
describe 'create a nested group', :nested_groups, js: true do describe 'create a nested group', :nested_groups, :js do
let(:group) { create(:group, path: 'foo') } let(:group) { create(:group, path: 'foo') }
context 'as admin' do context 'as admin' do
...@@ -142,7 +142,7 @@ feature 'Group' do ...@@ -142,7 +142,7 @@ feature 'Group' do
expect(page).not_to have_content('secret-group') expect(page).not_to have_content('secret-group')
end end
describe 'group edit', js: true do describe 'group edit', :js do
let(:group) { create(:group) } let(:group) { create(:group) }
let(:path) { edit_group_path(group) } let(:path) { edit_group_path(group) }
let(:new_name) { 'new-name' } let(:new_name) { 'new-name' }
...@@ -207,7 +207,7 @@ feature 'Group' do ...@@ -207,7 +207,7 @@ feature 'Group' do
end end
end end
describe 'group page with nested groups', :nested_groups, js: true do describe 'group page with nested groups', :nested_groups, :js do
let!(:group) { create(:group) } let!(:group) { create(:group) }
let!(:nested_group) { create(:group, parent: group) } let!(:nested_group) { create(:group, parent: group) }
let!(:path) { group_path(group) } let!(:path) { group_path(group) }
......
...@@ -26,7 +26,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -26,7 +26,7 @@ describe 'Projects > Issuables > Default sort order' do
MergeRequest.all MergeRequest.all
end end
context 'in the "merge requests" tab', js: true do context 'in the "merge requests" tab', :js do
let(:issuable_type) { :merge_request } let(:issuable_type) { :merge_request }
it 'is "last created"' do it 'is "last created"' do
...@@ -37,7 +37,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -37,7 +37,7 @@ describe 'Projects > Issuables > Default sort order' do
end end
end end
context 'in the "merge requests / open" tab', js: true do context 'in the "merge requests / open" tab', :js do
let(:issuable_type) { :merge_request } let(:issuable_type) { :merge_request }
it 'is "created date"' do it 'is "created date"' do
...@@ -49,7 +49,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -49,7 +49,7 @@ describe 'Projects > Issuables > Default sort order' do
end end
end end
context 'in the "merge requests / merged" tab', js: true do context 'in the "merge requests / merged" tab', :js do
let(:issuable_type) { :merged_merge_request } let(:issuable_type) { :merged_merge_request }
it 'is "last updated"' do it 'is "last updated"' do
...@@ -61,7 +61,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -61,7 +61,7 @@ describe 'Projects > Issuables > Default sort order' do
end end
end end
context 'in the "merge requests / closed" tab', js: true do context 'in the "merge requests / closed" tab', :js do
let(:issuable_type) { :closed_merge_request } let(:issuable_type) { :closed_merge_request }
it 'is "last updated"' do it 'is "last updated"' do
...@@ -73,7 +73,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -73,7 +73,7 @@ describe 'Projects > Issuables > Default sort order' do
end end
end end
context 'in the "merge requests / all" tab', js: true do context 'in the "merge requests / all" tab', :js do
let(:issuable_type) { :merge_request } let(:issuable_type) { :merge_request }
it 'is "created date"' do it 'is "created date"' do
...@@ -102,7 +102,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -102,7 +102,7 @@ describe 'Projects > Issuables > Default sort order' do
Issue.all Issue.all
end end
context 'in the "issues" tab', js: true do context 'in the "issues" tab', :js do
let(:issuable_type) { :issue } let(:issuable_type) { :issue }
it 'is "created date"' do it 'is "created date"' do
...@@ -114,7 +114,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -114,7 +114,7 @@ describe 'Projects > Issuables > Default sort order' do
end end
end end
context 'in the "issues / open" tab', js: true do context 'in the "issues / open" tab', :js do
let(:issuable_type) { :issue } let(:issuable_type) { :issue }
it 'is "created date"' do it 'is "created date"' do
...@@ -126,7 +126,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -126,7 +126,7 @@ describe 'Projects > Issuables > Default sort order' do
end end
end end
context 'in the "issues / closed" tab', js: true do context 'in the "issues / closed" tab', :js do
let(:issuable_type) { :closed_issue } let(:issuable_type) { :closed_issue }
it 'is "last updated"' do it 'is "last updated"' do
...@@ -138,7 +138,7 @@ describe 'Projects > Issuables > Default sort order' do ...@@ -138,7 +138,7 @@ describe 'Projects > Issuables > Default sort order' do
end end
end end
context 'in the "issues / all" tab', js: true do context 'in the "issues / all" tab', :js do
let(:issuable_type) { :issue } let(:issuable_type) { :issue }
it 'is "created date"' do it 'is "created date"' do
......
...@@ -12,7 +12,7 @@ describe 'Issue Sidebar on Mobile' do ...@@ -12,7 +12,7 @@ describe 'Issue Sidebar on Mobile' do
sign_in(user) sign_in(user)
end end
context 'mobile sidebar on merge requests', js: true do context 'mobile sidebar on merge requests', :js do
before do before do
visit project_merge_request_path(merge_request.project, merge_request) visit project_merge_request_path(merge_request.project, merge_request)
end end
...@@ -20,7 +20,7 @@ describe 'Issue Sidebar on Mobile' do ...@@ -20,7 +20,7 @@ describe 'Issue Sidebar on Mobile' do
it_behaves_like "issue sidebar stays collapsed on mobile" it_behaves_like "issue sidebar stays collapsed on mobile"
end end
context 'mobile sidebar on issues', js: true do context 'mobile sidebar on issues', :js do
before do before do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
end end
......
...@@ -24,7 +24,7 @@ describe 'Awards Emoji' do ...@@ -24,7 +24,7 @@ describe 'Awards Emoji' do
end end
# Regression test: https://gitlab.com/gitlab-org/gitlab-ce/issues/29529 # Regression test: https://gitlab.com/gitlab-org/gitlab-ce/issues/29529
it 'does not shows a 500 page', js: true do it 'does not shows a 500 page', :js do
expect(page).to have_text(issue.title) expect(page).to have_text(issue.title)
end end
end end
...@@ -37,37 +37,37 @@ describe 'Awards Emoji' do ...@@ -37,37 +37,37 @@ describe 'Awards Emoji' do
wait_for_requests wait_for_requests
end end
it 'increments the thumbsdown emoji', js: true do it 'increments the thumbsdown emoji', :js do
find('[data-name="thumbsdown"]').click find('[data-name="thumbsdown"]').click
wait_for_requests wait_for_requests
expect(thumbsdown_emoji).to have_text("1") expect(thumbsdown_emoji).to have_text("1")
end end
context 'click the thumbsup emoji' do context 'click the thumbsup emoji' do
it 'increments the thumbsup emoji', js: true do it 'increments the thumbsup emoji', :js do
find('[data-name="thumbsup"]').click find('[data-name="thumbsup"]').click
wait_for_requests wait_for_requests
expect(thumbsup_emoji).to have_text("1") expect(thumbsup_emoji).to have_text("1")
end end
it 'decrements the thumbsdown emoji', js: true do it 'decrements the thumbsdown emoji', :js do
expect(thumbsdown_emoji).to have_text("0") expect(thumbsdown_emoji).to have_text("0")
end end
end end
context 'click the thumbsdown emoji' do context 'click the thumbsdown emoji' do
it 'increments the thumbsdown emoji', js: true do it 'increments the thumbsdown emoji', :js do
find('[data-name="thumbsdown"]').click find('[data-name="thumbsdown"]').click
wait_for_requests wait_for_requests
expect(thumbsdown_emoji).to have_text("1") expect(thumbsdown_emoji).to have_text("1")
end end
it 'decrements the thumbsup emoji', js: true do it 'decrements the thumbsup emoji', :js do
expect(thumbsup_emoji).to have_text("0") expect(thumbsup_emoji).to have_text("0")
end end
end end
it 'toggles the smiley emoji on a note', js: true do it 'toggles the smiley emoji on a note', :js do
toggle_smiley_emoji(true) toggle_smiley_emoji(true)
within('.note-body') do within('.note-body') do
...@@ -82,7 +82,7 @@ describe 'Awards Emoji' do ...@@ -82,7 +82,7 @@ describe 'Awards Emoji' do
end end
context 'execute /award quick action' do context 'execute /award quick action' do
it 'toggles the emoji award on noteable', js: true do it 'toggles the emoji award on noteable', :js do
execute_quick_action('/award :100:') execute_quick_action('/award :100:')
expect(find(noteable_award_counter)).to have_text("1") expect(find(noteable_award_counter)).to have_text("1")
...@@ -95,7 +95,7 @@ describe 'Awards Emoji' do ...@@ -95,7 +95,7 @@ describe 'Awards Emoji' do
end end
end end
context 'unauthorized user', js: true do context 'unauthorized user', :js do
before do before do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
end end
......
require 'rails_helper' require 'rails_helper'
feature 'Issue awards', js: true do feature 'Issue awards', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project) } let(:issue) { create(:issue, project: project) }
......
...@@ -9,7 +9,7 @@ feature 'Issues > Labels bulk assignment' do ...@@ -9,7 +9,7 @@ feature 'Issues > Labels bulk assignment' do
let!(:feature) { create(:label, project: project, title: 'feature') } let!(:feature) { create(:label, project: project, title: 'feature') }
let!(:wontfix) { create(:label, project: project, title: 'wontfix') } let!(:wontfix) { create(:label, project: project, title: 'wontfix') }
context 'as an allowed user', js: true do context 'as an allowed user', :js do
before do before do
project.team << [user, :master] project.team << [user, :master]
......
require 'rails_helper' require 'rails_helper'
feature 'Resolving all open discussions in a merge request from an issue', js: true do feature 'Resolving all open discussions in a merge request from an issue', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let(:merge_request) { create(:merge_request, source_project: project) } let(:merge_request) { create(:merge_request, source_project: project) }
......
...@@ -24,7 +24,7 @@ feature 'Resolve an open discussion in a merge request by creating an issue' do ...@@ -24,7 +24,7 @@ feature 'Resolve an open discussion in a merge request by creating an issue' do
end end
end end
context 'resolving the discussion', js: true do context 'resolving the discussion', :js do
before do before do
click_button 'Resolve discussion' click_button 'Resolve discussion'
end end
......
require 'rails_helper' require 'rails_helper'
describe 'Dropdown author', js: true do describe 'Dropdown author', :js do
include FilteredSearchHelpers include FilteredSearchHelpers
let!(:project) { create(:project) } let!(:project) { create(:project) }
......
require 'rails_helper' require 'rails_helper'
describe 'Dropdown emoji', js: true do describe 'Dropdown emoji', :js do
include FilteredSearchHelpers include FilteredSearchHelpers
let!(:project) { create(:project, :public) } let!(:project) { create(:project, :public) }
......
require 'spec_helper' require 'spec_helper'
describe 'Dropdown label', js: true do describe 'Dropdown label', :js do
include FilteredSearchHelpers include FilteredSearchHelpers
let(:project) { create(:project) } let(:project) { create(:project) }
......
require 'spec_helper' require 'spec_helper'
describe 'Filter issues', js: true do describe 'Filter issues', :js do
include FilteredSearchHelpers include FilteredSearchHelpers
let(:project) { create(:project) } let(:project) { create(:project) }
......
require 'spec_helper' require 'spec_helper'
describe 'Recent searches', js: true do describe 'Recent searches', :js do
include FilteredSearchHelpers include FilteredSearchHelpers
let(:project_1) { create(:project, :public) } let(:project_1) { create(:project, :public) }
......
require 'rails_helper' require 'rails_helper'
describe 'Search bar', js: true do describe 'Search bar', :js do
include FilteredSearchHelpers include FilteredSearchHelpers
let!(:project) { create(:project) } let!(:project) { create(:project) }
......
require 'rails_helper' require 'rails_helper'
describe 'Visual tokens', js: true do describe 'Visual tokens', :js do
include FilteredSearchHelpers include FilteredSearchHelpers
include WaitForRequests include WaitForRequests
......
require 'rails_helper' require 'rails_helper'
feature 'GFM autocomplete', js: true do feature 'GFM autocomplete', :js do
let(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') } let(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') }
let(:project) { create(:project) } let(:project) { create(:project) }
let(:label) { create(:label, project: project, title: 'special+') } let(:label) { create(:label, project: project, title: 'special+') }
......
...@@ -13,7 +13,7 @@ feature 'Issue Sidebar' do ...@@ -13,7 +13,7 @@ feature 'Issue Sidebar' do
sign_in(user) sign_in(user)
end end
context 'assignee', js: true do context 'assignee', :js do
let(:user2) { create(:user) } let(:user2) { create(:user) }
let(:issue2) { create(:issue, project: project, author: user2) } let(:issue2) { create(:issue, project: project, author: user2) }
...@@ -82,7 +82,7 @@ feature 'Issue Sidebar' do ...@@ -82,7 +82,7 @@ feature 'Issue Sidebar' do
visit_issue(project, issue) visit_issue(project, issue)
end end
context 'sidebar', js: true do context 'sidebar', :js do
it 'changes size when the screen size is smaller' do it 'changes size when the screen size is smaller' do
sidebar_selector = 'aside.right-sidebar.right-sidebar-collapsed' sidebar_selector = 'aside.right-sidebar.right-sidebar-collapsed'
# Resize the window # Resize the window
...@@ -101,7 +101,7 @@ feature 'Issue Sidebar' do ...@@ -101,7 +101,7 @@ feature 'Issue Sidebar' do
end end
end end
context 'editing issue labels', js: true do context 'editing issue labels', :js do
before do before do
page.within('.block.labels') do page.within('.block.labels') do
find('.edit-link').click find('.edit-link').click
...@@ -114,7 +114,7 @@ feature 'Issue Sidebar' do ...@@ -114,7 +114,7 @@ feature 'Issue Sidebar' do
end end
end end
context 'creating a new label', js: true do context 'creating a new label', :js do
before do before do
page.within('.block.labels') do page.within('.block.labels') do
click_link 'Create new' click_link 'Create new'
......
require 'rails_helper' require 'rails_helper'
feature 'Issue markdown toolbar', js: true do feature 'Issue markdown toolbar', :js do
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project) } let(:issue) { create(:issue, project: project) }
let(:user) { create(:user) } let(:user) { create(:user) }
......
...@@ -37,7 +37,7 @@ feature 'issue move to another project' do ...@@ -37,7 +37,7 @@ feature 'issue move to another project' do
visit issue_path(issue) visit issue_path(issue)
end end
scenario 'moving issue to another project', js: true do scenario 'moving issue to another project', :js do
find('.js-move-issue').trigger('click') find('.js-move-issue').trigger('click')
wait_for_requests wait_for_requests
all('.js-move-issue-dropdown-item')[0].click all('.js-move-issue-dropdown-item')[0].click
...@@ -49,7 +49,7 @@ feature 'issue move to another project' do ...@@ -49,7 +49,7 @@ feature 'issue move to another project' do
expect(page.current_path).to include project_path(new_project) expect(page.current_path).to include project_path(new_project)
end end
scenario 'searching project dropdown', js: true do scenario 'searching project dropdown', :js do
new_project_search.team << [user, :reporter] new_project_search.team << [user, :reporter]
find('.js-move-issue').trigger('click') find('.js-move-issue').trigger('click')
...@@ -63,7 +63,7 @@ feature 'issue move to another project' do ...@@ -63,7 +63,7 @@ feature 'issue move to another project' do
end end
end end
context 'user does not have permission to move the issue to a project', js: true do context 'user does not have permission to move the issue to a project', :js do
let!(:private_project) { create(:project, :private) } let!(:private_project) { create(:project, :private) }
let(:another_project) { create(:project) } let(:another_project) { create(:project) }
background { another_project.team << [user, :guest] } background { another_project.team << [user, :guest] }
......
require 'rails_helper' require 'rails_helper'
describe 'New issue', js: true do describe 'New issue', :js do
include StubENV include StubENV
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
......
require 'rails_helper' require 'rails_helper'
feature 'Manually create a todo item from issue', js: true do feature 'Manually create a todo item from issue', :js do
let!(:project) { create(:project) } let!(:project) { create(:project) }
let!(:issue) { create(:issue, project: project) } let!(:issue) { create(:issue, project: project) }
let!(:user) { create(:user)} let!(:user) { create(:user)}
......
require 'rails_helper' require 'rails_helper'
feature 'Issues > User uses quick actions', js: true do feature 'Issues > User uses quick actions', :js do
include QuickActionsHelpers include QuickActionsHelpers
it_behaves_like 'issuable record that supports quick actions in its description and notes', :issue do it_behaves_like 'issuable record that supports quick actions in its description and notes', :issue do
......
...@@ -270,7 +270,7 @@ describe 'Issues', :js do ...@@ -270,7 +270,7 @@ describe 'Issues', :js do
visit namespace_project_issues_path(user.namespace, project1) visit namespace_project_issues_path(user.namespace, project1)
end end
it 'changes incoming email address token', js: true do it 'changes incoming email address token', :js do
find('.issue-email-modal-btn').click find('.issue-email-modal-btn').click
previous_token = find('input#issue_email').value previous_token = find('input#issue_email').value
find('.incoming-email-token-reset').trigger('click') find('.incoming-email-token-reset').trigger('click')
...@@ -286,7 +286,7 @@ describe 'Issues', :js do ...@@ -286,7 +286,7 @@ describe 'Issues', :js do
end end
end end
describe 'update labels from issue#show', js: true do describe 'update labels from issue#show', :js do
let(:issue) { create(:issue, project: project, author: user, assignees: [user]) } let(:issue) { create(:issue, project: project, author: user, assignees: [user]) }
let!(:label) { create(:label, project: project) } let!(:label) { create(:label, project: project) }
...@@ -309,7 +309,7 @@ describe 'Issues', :js do ...@@ -309,7 +309,7 @@ describe 'Issues', :js do
let(:issue) { create(:issue, project: project, author: user, assignees: [user]) } let(:issue) { create(:issue, project: project, author: user, assignees: [user]) }
context 'by authorized user' do context 'by authorized user' do
it 'allows user to select unassigned', js: true do it 'allows user to select unassigned', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
page.within('.assignee') do page.within('.assignee') do
...@@ -327,7 +327,7 @@ describe 'Issues', :js do ...@@ -327,7 +327,7 @@ describe 'Issues', :js do
expect(issue.reload.assignees).to be_empty expect(issue.reload.assignees).to be_empty
end end
it 'allows user to select an assignee', js: true do it 'allows user to select an assignee', :js do
issue2 = create(:issue, project: project, author: user) issue2 = create(:issue, project: project, author: user)
visit project_issue_path(project, issue2) visit project_issue_path(project, issue2)
...@@ -348,7 +348,7 @@ describe 'Issues', :js do ...@@ -348,7 +348,7 @@ describe 'Issues', :js do
end end
end end
it 'allows user to unselect themselves', js: true do it 'allows user to unselect themselves', :js do
issue2 = create(:issue, project: project, author: user) issue2 = create(:issue, project: project, author: user)
visit project_issue_path(project, issue2) visit project_issue_path(project, issue2)
...@@ -377,7 +377,7 @@ describe 'Issues', :js do ...@@ -377,7 +377,7 @@ describe 'Issues', :js do
project.team << [[guest], :guest] project.team << [[guest], :guest]
end end
it 'shows assignee text', js: true do it 'shows assignee text', :js do
sign_out(:user) sign_out(:user)
sign_in(guest) sign_in(guest)
...@@ -392,7 +392,7 @@ describe 'Issues', :js do ...@@ -392,7 +392,7 @@ describe 'Issues', :js do
let!(:milestone) { create(:milestone, project: project) } let!(:milestone) { create(:milestone, project: project) }
context 'by authorized user' do context 'by authorized user' do
it 'allows user to select unassigned', js: true do it 'allows user to select unassigned', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
page.within('.milestone') do page.within('.milestone') do
...@@ -410,7 +410,7 @@ describe 'Issues', :js do ...@@ -410,7 +410,7 @@ describe 'Issues', :js do
expect(issue.reload.milestone).to be_nil expect(issue.reload.milestone).to be_nil
end end
it 'allows user to de-select milestone', js: true do it 'allows user to de-select milestone', :js do
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
page.within('.milestone') do page.within('.milestone') do
...@@ -440,7 +440,7 @@ describe 'Issues', :js do ...@@ -440,7 +440,7 @@ describe 'Issues', :js do
issue.save issue.save
end end
it 'shows milestone text', js: true do it 'shows milestone text', :js do
sign_out(:user) sign_out(:user)
sign_in(guest) sign_in(guest)
...@@ -473,7 +473,7 @@ describe 'Issues', :js do ...@@ -473,7 +473,7 @@ describe 'Issues', :js do
end end
end end
context 'dropzone upload file', js: true do context 'dropzone upload file', :js do
before do before do
visit new_project_issue_path(project) visit new_project_issue_path(project)
end end
...@@ -544,7 +544,7 @@ describe 'Issues', :js do ...@@ -544,7 +544,7 @@ describe 'Issues', :js do
end end
describe 'due date' do describe 'due date' do
context 'update due on issue#show', js: true do context 'update due on issue#show', :js do
let(:issue) { create(:issue, project: project, author: user, assignees: [user]) } let(:issue) { create(:issue, project: project, author: user, assignees: [user]) }
before do before do
...@@ -588,8 +588,8 @@ describe 'Issues', :js do ...@@ -588,8 +588,8 @@ describe 'Issues', :js do
end end
end end
describe 'title issue#show', js: true do describe 'title issue#show', :js do
it 'updates the title', js: true do it 'updates the title', :js do
issue = create(:issue, author: user, assignees: [user], project: project, title: 'new title') issue = create(:issue, author: user, assignees: [user], project: project, title: 'new title')
visit project_issue_path(project, issue) visit project_issue_path(project, issue)
...@@ -603,7 +603,7 @@ describe 'Issues', :js do ...@@ -603,7 +603,7 @@ describe 'Issues', :js do
end end
end end
describe 'confidential issue#show', js: true do describe 'confidential issue#show', :js do
it 'shows confidential sibebar information as confidential and can be turned off' do it 'shows confidential sibebar information as confidential and can be turned off' do
issue = create(:issue, :confidential, project: project) issue = create(:issue, :confidential, project: project)
......
...@@ -197,7 +197,7 @@ feature 'Login' do ...@@ -197,7 +197,7 @@ feature 'Login' do
expect(page).to have_content('The global settings require you to enable Two-Factor Authentication for your account. You need to do this before ') expect(page).to have_content('The global settings require you to enable Two-Factor Authentication for your account. You need to do this before ')
end end
it 'allows skipping two-factor configuration', js: true do it 'allows skipping two-factor configuration', :js do
expect(current_path).to eq profile_two_factor_auth_path expect(current_path).to eq profile_two_factor_auth_path
click_link 'Configure it later' click_link 'Configure it later'
...@@ -215,7 +215,7 @@ feature 'Login' do ...@@ -215,7 +215,7 @@ feature 'Login' do
) )
end end
it 'disallows skipping two-factor configuration', js: true do it 'disallows skipping two-factor configuration', :js do
expect(current_path).to eq profile_two_factor_auth_path expect(current_path).to eq profile_two_factor_auth_path
expect(page).not_to have_link('Configure it later') expect(page).not_to have_link('Configure it later')
end end
...@@ -260,7 +260,7 @@ feature 'Login' do ...@@ -260,7 +260,7 @@ feature 'Login' do
'before ') 'before ')
end end
it 'allows skipping two-factor configuration', js: true do it 'allows skipping two-factor configuration', :js do
expect(current_path).to eq profile_two_factor_auth_path expect(current_path).to eq profile_two_factor_auth_path
click_link 'Configure it later' click_link 'Configure it later'
...@@ -279,7 +279,7 @@ feature 'Login' do ...@@ -279,7 +279,7 @@ feature 'Login' do
) )
end end
it 'disallows skipping two-factor configuration', js: true do it 'disallows skipping two-factor configuration', :js do
expect(current_path).to eq profile_two_factor_auth_path expect(current_path).to eq profile_two_factor_auth_path
expect(page).not_to have_link('Configure it later') expect(page).not_to have_link('Configure it later')
end end
......
require 'rails_helper' require 'rails_helper'
feature 'Merge request issue assignment', js: true do feature 'Merge request issue assignment', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
let(:issue1) { create(:issue, project: project) } let(:issue1) { create(:issue, project: project) }
......
require 'rails_helper' require 'rails_helper'
feature 'Merge request awards', js: true do feature 'Merge request awards', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
let(:merge_request) { create(:merge_request, source_project: project) } let(:merge_request) { create(:merge_request, source_project: project) }
......
require 'spec_helper' require 'spec_helper'
feature 'Check if mergeable with unresolved discussions', js: true do feature 'Check if mergeable with unresolved discussions', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let!(:merge_request) { create(:merge_request_with_diff_notes, source_project: project, author: user) } let!(:merge_request) { create(:merge_request_with_diff_notes, source_project: project, author: user) }
......
require 'spec_helper' require 'spec_helper'
describe 'Cherry-pick Merge Requests', js: true do describe 'Cherry-pick Merge Requests', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:group) { create(:group) } let(:group) { create(:group) }
let(:project) { create(:project, :repository, namespace: group) } let(:project) { create(:project, :repository, namespace: group) }
......
require 'spec_helper' require 'spec_helper'
feature 'Merge Request closing issues message', js: true do feature 'Merge Request closing issues message', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
let(:issue_1) { create(:issue, project: project)} let(:issue_1) { create(:issue, project: project)}
......
require 'spec_helper' require 'spec_helper'
feature 'Merge request conflict resolution', js: true do feature 'Merge request conflict resolution', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
......
require 'spec_helper' require 'spec_helper'
feature 'Create New Merge Request', js: true do feature 'Create New Merge Request', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
......
...@@ -34,7 +34,7 @@ feature 'Merge request created from fork' do ...@@ -34,7 +34,7 @@ feature 'Merge request created from fork' do
commit_id: merge_request.commit_shas.first) commit_id: merge_request.commit_shas.first)
end end
scenario 'user can reply to the comment', js: true do scenario 'user can reply to the comment', :js do
visit_merge_request(merge_request) visit_merge_request(merge_request)
expect(page).to have_content(comment) expect(page).to have_content(comment)
...@@ -57,7 +57,7 @@ feature 'Merge request created from fork' do ...@@ -57,7 +57,7 @@ feature 'Merge request created from fork' do
forked_project.destroy! forked_project.destroy!
end end
scenario 'user can access merge request', js: true do scenario 'user can access merge request', :js do
visit_merge_request(merge_request) visit_merge_request(merge_request)
expect(page).to have_content 'Test merge request' expect(page).to have_content 'Test merge request'
...@@ -78,7 +78,7 @@ feature 'Merge request created from fork' do ...@@ -78,7 +78,7 @@ feature 'Merge request created from fork' do
create(:ci_build, pipeline: pipeline, name: 'spinach') create(:ci_build, pipeline: pipeline, name: 'spinach')
end end
scenario 'user visits a pipelines page', js: true do scenario 'user visits a pipelines page', :js do
visit_merge_request(merge_request) visit_merge_request(merge_request)
page.within('.merge-request-tabs') { click_link 'Pipelines' } page.within('.merge-request-tabs') { click_link 'Pipelines' }
......
...@@ -3,7 +3,7 @@ require 'spec_helper' ...@@ -3,7 +3,7 @@ require 'spec_helper'
# This test serves as a regression test for a bug that caused an error # This test serves as a regression test for a bug that caused an error
# message to be shown by JavaScript when the source branch was deleted. # message to be shown by JavaScript when the source branch was deleted.
# Please do not remove "js: true". # Please do not remove "js: true".
describe 'Deleted source branch', js: true do describe 'Deleted source branch', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:merge_request) { create(:merge_request) } let(:merge_request) { create(:merge_request) }
......
require 'spec_helper' require 'spec_helper'
feature 'Diff note avatars', js: true do feature 'Diff note avatars', :js do
include NoteInteractionHelpers include NoteInteractionHelpers
let(:user) { create(:user) } let(:user) { create(:user) }
......
require 'spec_helper' require 'spec_helper'
feature 'Diff notes resolve', js: true do feature 'Diff notes resolve', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
let(:merge_request) { create(:merge_request_with_diffs, source_project: project, author: user, title: "Bug NS-04") } let(:merge_request) { create(:merge_request_with_diffs, source_project: project, author: user, title: "Bug NS-04") }
......
require 'spec_helper' require 'spec_helper'
feature 'Diffs URL', js: true do feature 'Diffs URL', :js do
include ProjectForksHelper include ProjectForksHelper
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
......
...@@ -29,7 +29,7 @@ feature 'Edit Merge Request' do ...@@ -29,7 +29,7 @@ feature 'Edit Merge Request' do
expect(page).to have_content 'Someone edited the merge request the same time you did' expect(page).to have_content 'Someone edited the merge request the same time you did'
end end
it 'allows to unselect "Remove source branch"', js: true do it 'allows to unselect "Remove source branch"', :js do
merge_request.update(merge_params: { 'force_remove_source_branch' => '1' }) merge_request.update(merge_params: { 'force_remove_source_branch' => '1' })
expect(merge_request.merge_params['force_remove_source_branch']).to be_truthy expect(merge_request.merge_params['force_remove_source_branch']).to be_truthy
...@@ -42,7 +42,7 @@ feature 'Edit Merge Request' do ...@@ -42,7 +42,7 @@ feature 'Edit Merge Request' do
expect(page).to have_content 'Remove source branch' expect(page).to have_content 'Remove source branch'
end end
it 'should preserve description textarea height', js: true do it 'should preserve description textarea height', :js do
long_description = %q( long_description = %q(
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ac ornare ligula, ut tempus arcu. Etiam ultricies accumsan dolor vitae faucibus. Donec at elit lacus. Mauris orci ante, aliquam quis lorem eget, convallis faucibus arcu. Aenean at pulvinar lacus. Ut viverra quam massa, molestie ornare tortor dignissim a. Suspendisse tristique pellentesque tellus, id lacinia metus elementum id. Nam tristique, arcu rhoncus faucibus viverra, lacus ipsum sagittis ligula, vitae convallis odio lacus a nibh. Ut tincidunt est purus, ac vestibulum augue maximus in. Suspendisse vel erat et mi ultricies semper. Pellentesque volutpat pellentesque consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ac ornare ligula, ut tempus arcu. Etiam ultricies accumsan dolor vitae faucibus. Donec at elit lacus. Mauris orci ante, aliquam quis lorem eget, convallis faucibus arcu. Aenean at pulvinar lacus. Ut viverra quam massa, molestie ornare tortor dignissim a. Suspendisse tristique pellentesque tellus, id lacinia metus elementum id. Nam tristique, arcu rhoncus faucibus viverra, lacus ipsum sagittis ligula, vitae convallis odio lacus a nibh. Ut tincidunt est purus, ac vestibulum augue maximus in. Suspendisse vel erat et mi ultricies semper. Pellentesque volutpat pellentesque consequat.
......
...@@ -18,7 +18,7 @@ feature 'Merge Request filtering by Milestone' do ...@@ -18,7 +18,7 @@ feature 'Merge Request filtering by Milestone' do
sign_in(user) sign_in(user)
end end
scenario 'filters by no Milestone', js: true do scenario 'filters by no Milestone', :js do
create(:merge_request, :with_diffs, source_project: project) create(:merge_request, :with_diffs, source_project: project)
create(:merge_request, :simple, source_project: project, milestone: milestone) create(:merge_request, :simple, source_project: project, milestone: milestone)
...@@ -32,7 +32,7 @@ feature 'Merge Request filtering by Milestone' do ...@@ -32,7 +32,7 @@ feature 'Merge Request filtering by Milestone' do
expect(page).to have_css('.merge-request', count: 1) expect(page).to have_css('.merge-request', count: 1)
end end
context 'filters by upcoming milestone', js: true do context 'filters by upcoming milestone', :js do
it 'does not show merge requests with no expiry' do it 'does not show merge requests with no expiry' do
create(:merge_request, :with_diffs, source_project: project) create(:merge_request, :with_diffs, source_project: project)
create(:merge_request, :simple, source_project: project, milestone: milestone) create(:merge_request, :simple, source_project: project, milestone: milestone)
...@@ -67,7 +67,7 @@ feature 'Merge Request filtering by Milestone' do ...@@ -67,7 +67,7 @@ feature 'Merge Request filtering by Milestone' do
end end
end end
scenario 'filters by a specific Milestone', js: true do scenario 'filters by a specific Milestone', :js do
create(:merge_request, :with_diffs, source_project: project, milestone: milestone) create(:merge_request, :with_diffs, source_project: project, milestone: milestone)
create(:merge_request, :simple, source_project: project) create(:merge_request, :simple, source_project: project)
...@@ -83,7 +83,7 @@ feature 'Merge Request filtering by Milestone' do ...@@ -83,7 +83,7 @@ feature 'Merge Request filtering by Milestone' do
milestone.update(name: "rock 'n' roll") milestone.update(name: "rock 'n' roll")
end end
scenario 'filters by a specific Milestone', js: true do scenario 'filters by a specific Milestone', :js do
create(:merge_request, :with_diffs, source_project: project, milestone: milestone) create(:merge_request, :with_diffs, source_project: project, milestone: milestone)
create(:merge_request, :simple, source_project: project) create(:merge_request, :simple, source_project: project)
......
...@@ -36,7 +36,7 @@ describe 'Filter merge requests' do ...@@ -36,7 +36,7 @@ describe 'Filter merge requests' do
expect_mr_list_count(0) expect_mr_list_count(0)
end end
context 'assignee', js: true do context 'assignee', :js do
it 'updates to current user' do it 'updates to current user' do
expect_assignee_visual_tokens() expect_assignee_visual_tokens()
end end
...@@ -69,7 +69,7 @@ describe 'Filter merge requests' do ...@@ -69,7 +69,7 @@ describe 'Filter merge requests' do
expect_mr_list_count(0) expect_mr_list_count(0)
end end
context 'milestone', js: true do context 'milestone', :js do
it 'updates to current milestone' do it 'updates to current milestone' do
expect_milestone_visual_tokens() expect_milestone_visual_tokens()
end end
...@@ -88,7 +88,7 @@ describe 'Filter merge requests' do ...@@ -88,7 +88,7 @@ describe 'Filter merge requests' do
end end
end end
describe 'for label from mr#index', js: true do describe 'for label from mr#index', :js do
it 'filters by no label' do it 'filters by no label' do
input_filtered_search('label:none') input_filtered_search('label:none')
...@@ -137,7 +137,7 @@ describe 'Filter merge requests' do ...@@ -137,7 +137,7 @@ describe 'Filter merge requests' do
expect_mr_list_count(0) expect_mr_list_count(0)
end end
context 'assignee and label', js: true do context 'assignee and label', :js do
def expect_assignee_label_visual_tokens def expect_assignee_label_visual_tokens
wait_for_requests wait_for_requests
...@@ -183,7 +183,7 @@ describe 'Filter merge requests' do ...@@ -183,7 +183,7 @@ describe 'Filter merge requests' do
visit project_merge_requests_path(project) visit project_merge_requests_path(project)
end end
context 'only text', js: true do context 'only text', :js do
it 'filters merge requests by searched text' do it 'filters merge requests by searched text' do
input_filtered_search('bug') input_filtered_search('bug')
...@@ -199,7 +199,7 @@ describe 'Filter merge requests' do ...@@ -199,7 +199,7 @@ describe 'Filter merge requests' do
end end
end end
context 'filters and searches', js: true do context 'filters and searches', :js do
it 'filters by text and label' do it 'filters by text and label' do
input_filtered_search('Bug') input_filtered_search('Bug')
...@@ -289,7 +289,7 @@ describe 'Filter merge requests' do ...@@ -289,7 +289,7 @@ describe 'Filter merge requests' do
end end
end end
describe 'filter by assignee id', js: true do describe 'filter by assignee id', :js do
it 'filter by current user' do it 'filter by current user' do
visit project_merge_requests_path(project, assignee_id: user.id) visit project_merge_requests_path(project, assignee_id: user.id)
...@@ -312,7 +312,7 @@ describe 'Filter merge requests' do ...@@ -312,7 +312,7 @@ describe 'Filter merge requests' do
end end
end end
describe 'filter by author id', js: true do describe 'filter by author id', :js do
it 'filter by current user' do it 'filter by current user' do
visit project_merge_requests_path(project, author_id: user.id) visit project_merge_requests_path(project, author_id: user.id)
......
require 'spec_helper' require 'spec_helper'
feature 'image diff notes', js: true do feature 'image diff notes', :js do
include NoteInteractionHelpers include NoteInteractionHelpers
let(:user) { create(:user) } let(:user) { create(:user) }
......
require 'spec_helper' require 'spec_helper'
feature 'Clicking toggle commit message link', js: true do feature 'Clicking toggle commit message link', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
let(:issue_1) { create(:issue, project: project)} let(:issue_1) { create(:issue, project: project)}
......
require 'spec_helper' require 'spec_helper'
feature 'Only allow merge requests to be merged if the pipeline succeeds', js: true do feature 'Only allow merge requests to be merged if the pipeline succeeds', :js do
let(:merge_request) { create(:merge_request_with_diffs) } let(:merge_request) { create(:merge_request_with_diffs) }
let(:project) { merge_request.target_project } let(:project) { merge_request.target_project }
...@@ -10,7 +10,7 @@ feature 'Only allow merge requests to be merged if the pipeline succeeds', js: t ...@@ -10,7 +10,7 @@ feature 'Only allow merge requests to be merged if the pipeline succeeds', js: t
project.team << [merge_request.author, :master] project.team << [merge_request.author, :master]
end end
context 'project does not have CI enabled', js: true do context 'project does not have CI enabled', :js do
it 'allows MR to be merged' do it 'allows MR to be merged' do
visit_merge_request(merge_request) visit_merge_request(merge_request)
...@@ -20,7 +20,7 @@ feature 'Only allow merge requests to be merged if the pipeline succeeds', js: t ...@@ -20,7 +20,7 @@ feature 'Only allow merge requests to be merged if the pipeline succeeds', js: t
end end
end end
context 'when project has CI enabled', js: true do context 'when project has CI enabled', :js do
given!(:pipeline) do given!(:pipeline) do
create(:ci_empty_pipeline, create(:ci_empty_pipeline,
project: project, project: project,
......
require 'spec_helper' require 'spec_helper'
feature 'Pipelines for Merge Requests', js: true do feature 'Pipelines for Merge Requests', :js do
describe 'pipeline tab' do describe 'pipeline tab' do
given(:user) { create(:user) } given(:user) { create(:user) }
given(:merge_request) { create(:merge_request) } given(:merge_request) { create(:merge_request) }
......
require 'spec_helper' require 'spec_helper'
feature 'Resolve outdated diff discussions', js: true do feature 'Resolve outdated diff discussions', :js do
let(:project) { create(:project, :repository, :public) } let(:project) { create(:project, :repository, :public) }
let(:merge_request) do let(:merge_request) do
......
require 'spec_helper' require 'spec_helper'
describe 'Target branch', js: true do describe 'Target branch', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:merge_request) { create(:merge_request) } let(:merge_request) { create(:merge_request) }
let(:project) { merge_request.project } let(:project) { merge_request.project }
......
require 'spec_helper' require 'spec_helper'
feature 'Toggle Whitespace Changes', js: true do feature 'Toggle Whitespace Changes', :js do
before do before do
sign_in(create(:admin)) sign_in(create(:admin))
merge_request = create(:merge_request) merge_request = create(:merge_request)
......
require 'spec_helper' require 'spec_helper'
feature 'toggler_behavior', js: true do feature 'toggler_behavior', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let(:merge_request) { create(:merge_request, source_project: project, author: user) } let(:merge_request) { create(:merge_request, source_project: project, author: user) }
......
...@@ -10,7 +10,7 @@ feature 'Multiple merge requests updating from merge_requests#index' do ...@@ -10,7 +10,7 @@ feature 'Multiple merge requests updating from merge_requests#index' do
sign_in(user) sign_in(user)
end end
context 'status', js: true do context 'status', :js do
describe 'close merge request' do describe 'close merge request' do
before do before do
visit project_merge_requests_path(project) visit project_merge_requests_path(project)
...@@ -37,7 +37,7 @@ feature 'Multiple merge requests updating from merge_requests#index' do ...@@ -37,7 +37,7 @@ feature 'Multiple merge requests updating from merge_requests#index' do
end end
end end
context 'assignee', js: true do context 'assignee', :js do
describe 'set assignee' do describe 'set assignee' do
before do before do
visit project_merge_requests_path(project) visit project_merge_requests_path(project)
...@@ -67,7 +67,7 @@ feature 'Multiple merge requests updating from merge_requests#index' do ...@@ -67,7 +67,7 @@ feature 'Multiple merge requests updating from merge_requests#index' do
end end
end end
context 'milestone', js: true do context 'milestone', :js do
let(:milestone) { create(:milestone, project: project) } let(:milestone) { create(:milestone, project: project) }
describe 'set milestone' do describe 'set milestone' do
......
require 'rails_helper' require 'rails_helper'
feature 'Merge Requests > User uses quick actions', js: true do feature 'Merge Requests > User uses quick actions', :js do
include QuickActionsHelpers include QuickActionsHelpers
it_behaves_like 'issuable record that supports quick actions in its description and notes', :merge_request do it_behaves_like 'issuable record that supports quick actions in its description and notes', :merge_request do
......
require 'spec_helper' require 'spec_helper'
feature 'Merge Request versions', js: true do feature 'Merge Request versions', :js do
let(:merge_request) { create(:merge_request, importing: true) } let(:merge_request) { create(:merge_request, importing: true) }
let(:project) { merge_request.source_project } let(:project) { merge_request.source_project }
let!(:merge_request_diff1) { merge_request.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') } let!(:merge_request_diff1) { merge_request.merge_request_diffs.create(head_commit_sha: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') }
......
require 'spec_helper' require 'spec_helper'
feature 'Widget Deployments Header', js: true do feature 'Widget Deployments Header', :js do
describe 'when deployed to an environment' do describe 'when deployed to an environment' do
given(:user) { create(:user) } given(:user) { create(:user) }
given(:project) { merge_request.target_project } given(:project) { merge_request.target_project }
......
...@@ -256,7 +256,7 @@ describe 'Merge request', :js do ...@@ -256,7 +256,7 @@ describe 'Merge request', :js do
end end
end end
context 'user can merge into source project but cannot push to fork', js: true do context 'user can merge into source project but cannot push to fork', :js do
let(:fork_project) { create(:project, :public, :repository) } let(:fork_project) { create(:project, :public, :repository) }
let(:user2) { create(:user) } let(:user2) { create(:user) }
......
...@@ -12,7 +12,7 @@ feature 'Profile > SSH Keys' do ...@@ -12,7 +12,7 @@ feature 'Profile > SSH Keys' do
visit profile_keys_path visit profile_keys_path
end end
scenario 'auto-populates the title', js: true do scenario 'auto-populates the title', :js do
fill_in('Key', with: attributes_for(:key).fetch(:key)) fill_in('Key', with: attributes_for(:key).fetch(:key))
expect(page).to have_field("Title", with: "dummy@gitlab.com") expect(page).to have_field("Title", with: "dummy@gitlab.com")
......
...@@ -7,7 +7,7 @@ describe 'Profile > Applications' do ...@@ -7,7 +7,7 @@ describe 'Profile > Applications' do
sign_in(user) sign_in(user)
end end
describe 'User manages applications', js: true do describe 'User manages applications', :js do
it 'deletes an application' do it 'deletes an application' do
create(:oauth_application, owner: user) create(:oauth_application, owner: user)
visit oauth_applications_path visit oauth_applications_path
......
require 'spec_helper' require 'spec_helper'
describe 'Profile > Personal Access Tokens', js: true do describe 'Profile > Personal Access Tokens', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
def active_personal_access_tokens def active_personal_access_tokens
......
require 'spec_helper' require 'spec_helper'
feature 'Profile > Notifications > User changes notified_of_own_activity setting', js: true do feature 'Profile > Notifications > User changes notified_of_own_activity setting', :js do
let(:user) { create(:user) } let(:user) { create(:user) }
before do before do
......
require 'spec_helper' require 'spec_helper'
feature 'User visits the notifications tab', js: true do feature 'User visits the notifications tab', :js do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:user) { create(:user) } let(:user) { create(:user) }
......
...@@ -39,7 +39,7 @@ feature 'list of badges' do ...@@ -39,7 +39,7 @@ feature 'list of badges' do
end end
end end
scenario 'user changes current ref of build status badge', js: true do scenario 'user changes current ref of build status badge', :js do
page.within('.pipeline-status') do page.within('.pipeline-status') do
first('.js-project-refs-dropdown').click first('.js-project-refs-dropdown').click
......
require 'spec_helper' require 'spec_helper'
feature 'Blob button line permalinks (BlobLinePermalinkUpdater)', js: true do feature 'Blob button line permalinks (BlobLinePermalinkUpdater)', :js do
include TreeHelper include TreeHelper
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
......
require 'spec_helper' require 'spec_helper'
feature 'Editing file blob', js: true do feature 'Editing file blob', :js do
include TreeHelper include TreeHelper
let(:project) { create(:project, :public, :repository) } let(:project) { create(:project, :public, :repository) }
......
...@@ -6,7 +6,7 @@ feature 'Blob shortcuts' do ...@@ -6,7 +6,7 @@ feature 'Blob shortcuts' do
let(:path) { project.repository.ls_files(project.repository.root_ref)[0] } let(:path) { project.repository.ls_files(project.repository.root_ref)[0] }
let(:sha) { project.repository.commit.sha } let(:sha) { project.repository.commit.sha }
describe 'On a file(blob)', js: true do describe 'On a file(blob)', :js do
def get_absolute_url(path = "") def get_absolute_url(path = "")
"http://#{page.server.host}:#{page.server.port}#{path}" "http://#{page.server.host}:#{page.server.port}#{path}"
end end
......
...@@ -46,7 +46,7 @@ describe 'Branches' do ...@@ -46,7 +46,7 @@ describe 'Branches' do
end end
describe 'Find branches' do describe 'Find branches' do
it 'shows filtered branches', js: true do it 'shows filtered branches', :js do
visit project_branches_path(project) visit project_branches_path(project)
fill_in 'branch-search', with: 'fix' fill_in 'branch-search', with: 'fix'
...@@ -58,7 +58,7 @@ describe 'Branches' do ...@@ -58,7 +58,7 @@ describe 'Branches' do
end end
describe 'Delete unprotected branch' do describe 'Delete unprotected branch' do
it 'removes branch after confirmation', js: true do it 'removes branch after confirmation', :js do
visit project_branches_path(project) visit project_branches_path(project)
fill_in 'branch-search', with: 'fix' fill_in 'branch-search', with: 'fix'
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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