Commit 5c2348e4 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'winh-rubocop-capybara-featuremethods' into 'master'

Enable Capybara/FeatureMethods cop

See merge request gitlab-org/gitlab-ce!20383
parents baab4cdd 3db2f327
......@@ -10,10 +10,6 @@
Capybara/CurrentPathExpectation:
Enabled: false
# Offense count: 956
Capybara/FeatureMethods:
Enabled: false
# Offense count: 23
FactoryBot/DynamicAttributeDefinedStatically:
Exclude:
......
require 'securerandom'
module QA
feature 'API basics', :core do
describe 'API basics', :core do
before(:context) do
@api_client = Runtime::API::Client.new(:gitlab)
end
......@@ -9,7 +9,7 @@ module QA
let(:project_name) { "api-basics-#{SecureRandom.hex(8)}" }
let(:sanitized_project_path) { CGI.escape("#{Runtime::User.name}/#{project_name}") }
scenario 'user creates a project with a file and deletes them afterwards' do
it 'user creates a project with a file and deletes them afterwards' do
create_project_request = Runtime::API::Request.new(@api_client, '/projects')
post create_project_request.url, path: project_name, name: project_name
......
module QA
feature 'API users', :core do
describe 'API users', :core do
before(:context) do
@api_client = Runtime::API::Client.new(:gitlab)
end
......@@ -7,13 +7,13 @@ module QA
context 'when authenticated' do
let(:request) { Runtime::API::Request.new(@api_client, '/users') }
scenario 'get list of users' do
it 'get list of users' do
get request.url
expect_status(200)
end
scenario 'submit request with a valid user name' do
it 'submit request with a valid user name' do
get request.url, { params: { username: Runtime::User.name } }
expect_status(200)
......@@ -22,7 +22,7 @@ module QA
)
end
scenario 'submit request with an invalid user name' do
it 'submit request with an invalid user name' do
get request.url, { params: { username: SecureRandom.hex(10) } }
expect_status(200)
......@@ -30,7 +30,7 @@ module QA
end
end
scenario 'submit request with an invalid token' do
it 'submit request with an invalid token' do
request = Runtime::API::Request.new(@api_client, '/users', private_token: 'invalid')
get request.url
......
module QA
feature 'LDAP user login', :ldap do
describe 'LDAP user login', :ldap do
before do
Runtime::Env.user_type = 'ldap'
end
scenario 'user logs in using LDAP credentials' do
it 'user logs in using LDAP credentials' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'standard user login', :core do
scenario 'user logs in using credentials' do
describe 'standard user login', :core do
it 'user logs in using credentials' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'create a new group', :mattermost do
scenario 'creating a group with a mattermost team' do
describe 'create a new group', :mattermost do
it 'creating a group with a mattermost team' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
Page::Menu::Main.act { go_to_groups }
......
module QA
feature 'logging in to Mattermost', :mattermost do
scenario 'can use gitlab oauth' do
describe 'logging in to Mattermost', :mattermost do
it 'can use gitlab oauth' do
Runtime::Browser.visit(:gitlab, Page::Main::Login) do
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'creates a merge request', :core do
scenario 'user creates a new merge request' do
describe 'creates a merge request', :core do
it 'user creates a new merge request' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'merge request rebase', :core do
scenario 'rebases source branch of merge request' do
describe 'merge request rebase', :core do
it 'rebases source branch of merge request' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'merge request squash commits', :core do
scenario 'when squash commits is marked before merge' do
describe 'merge request squash commits', :core do
it 'when squash commits is marked before merge' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'activity page', :core do
scenario 'push creates an event in the activity page' do
describe 'activity page', :core do
it 'push creates an event in the activity page' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'deploy keys support', :core do
scenario 'user adds a deploy key' do
describe 'deploy keys support', :core do
it 'user adds a deploy key' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'secret variables support', :core do
scenario 'user adds a secret variable' do
describe 'secret variables support', :core do
it 'user adds a secret variable' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
require 'pathname'
module QA
feature 'Auto Devops', :kubernetes do
describe 'Auto Devops', :kubernetes do
after do
@cluster&.remove!
end
scenario 'user creates a new project and runs auto devops' do
it 'user creates a new project and runs auto devops' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'creates issue', :core do
describe 'creates issue', :core do
let(:issue_title) { 'issue title' }
scenario 'user creates issue' do
it 'user creates issue' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'create a new project', :core do
scenario 'user creates a new project' do
describe 'create a new project', :core do
it 'user creates a new project' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
require 'digest/sha1'
module QA
feature 'cloning code using a deploy key', :core, :docker do
describe 'cloning code using a deploy key', :core, :docker do
def login
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......@@ -39,7 +39,7 @@ module QA
]
keys.each do |(key_class, bits)|
scenario "user sets up a deploy key with #{key_class}(#{bits}) to clone code using pipelines" do
it "user sets up a deploy key with #{key_class}(#{bits}) to clone code using pipelines" do
key = key_class.new(*bits)
login
......
module QA
feature 'CI/CD Pipelines', :core, :docker do
describe 'CI/CD Pipelines', :core, :docker do
let(:executor) { "qa-runner-#{Time.now.to_i}" }
after do
Service::Runner.new(executor).remove!
end
scenario 'user registers a new specific runner' do
it 'user registers a new specific runner' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......@@ -25,7 +25,7 @@ module QA
end
end
scenario 'users creates a new pipeline' do
it 'users creates a new pipeline' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
module QA
feature 'Wiki Functionality', :core do
describe 'Wiki Functionality', :core do
def login
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......@@ -14,7 +14,7 @@ module QA
login
end
scenario 'User creates, edits, clones, and pushes to the wiki' do
it 'User creates, edits, clones, and pushes to the wiki' do
wiki = Factory::Resource::Wiki.fabricate! do |resource|
resource.title = 'Home'
resource.content = '# My First Wiki Content'
......
module QA
feature 'clone code from the repository', :core do
describe 'clone code from the repository', :core do
context 'with regular account over http' do
given(:location) do
let(:location) do
Page::Project::Show.act do
choose_repository_clone_http
repository_location
......@@ -31,7 +31,7 @@ module QA
end
end
scenario 'user performs a deep clone' do
it 'user performs a deep clone' do
Git::Repository.perform do |repository|
repository.uri = location.uri
repository.use_default_credentials
......@@ -42,7 +42,7 @@ module QA
end
end
scenario 'user performs a shallow clone' do
it 'user performs a shallow clone' do
Git::Repository.perform do |repository|
repository.uri = location.uri
repository.use_default_credentials
......
module QA
feature 'branch protection support', :core do
given(:branch_name) { 'protected-branch' }
given(:commit_message) { 'Protected push commit message' }
given(:project) do
describe 'branch protection support', :core do
let(:branch_name) { 'protected-branch' }
let(:commit_message) { 'Protected push commit message' }
let(:project) do
Factory::Resource::Project.fabricate! do |resource|
resource.name = 'protected-branch-project'
end
......@@ -27,7 +27,7 @@ module QA
context 'when developers and maintainers are allowed to push to a protected branch' do
let!(:protected_branch) { create_protected_branch(allow_to_push: true) }
scenario 'user with push rights successfully pushes to the protected branch' do
it 'user with push rights successfully pushes to the protected branch' do
expect(protected_branch.name).to have_content(branch_name)
expect(protected_branch.push_allowance).to have_content('Developers + Maintainers')
......@@ -38,7 +38,7 @@ module QA
end
context 'when developers and maintainers are not allowed to push to a protected branch' do
scenario 'user without push rights fails to push to the protected branch' do
it 'user without push rights fails to push to the protected branch' do
create_protected_branch(allow_to_push: false)
@push = push_new_file(branch_name)
......
module QA
feature 'push code to repository', :core do
describe 'push code to repository', :core do
context 'with regular account over http' do
scenario 'user pushes code to the repository' do
it 'user pushes code to the repository' do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.act { sign_in_using_credentials }
......
require 'spec_helper'
feature 'Abuse reports' do
describe 'Abuse reports' do
let(:another_user) { create(:user) }
before do
sign_in(create(:user))
end
scenario 'Report abuse' do
it 'Report abuse' do
visit user_path(another_user)
click_link 'Report abuse'
......
require 'spec_helper'
feature 'Admin Appearance' do
describe 'Admin Appearance' do
let!(:appearance) { create(:appearance) }
scenario 'Create new appearance' do
it 'Create new appearance' do
sign_in(create(:admin))
visit admin_appearances_path
......@@ -21,7 +21,7 @@ feature 'Admin Appearance' do
expect(page).to have_content 'Last edit'
end
scenario 'Preview sign-in page appearance' do
it 'Preview sign-in page appearance' do
sign_in(create(:admin))
visit admin_appearances_path
......@@ -30,7 +30,7 @@ feature 'Admin Appearance' do
expect_custom_sign_in_appearance(appearance)
end
scenario 'Preview new project page appearance' do
it 'Preview new project page appearance' do
sign_in(create(:admin))
visit admin_appearances_path
......@@ -39,20 +39,20 @@ feature 'Admin Appearance' do
expect_custom_new_project_appearance(appearance)
end
scenario 'Custom sign-in page' do
it 'Custom sign-in page' do
visit new_user_session_path
expect_custom_sign_in_appearance(appearance)
end
scenario 'Custom new project page' do
it 'Custom new project page' do
sign_in create(:user)
visit new_project_path
expect_custom_new_project_appearance(appearance)
end
scenario 'Appearance logo' do
it 'Appearance logo' do
sign_in(create(:admin))
visit admin_appearances_path
......@@ -64,7 +64,7 @@ feature 'Admin Appearance' do
expect(page).not_to have_css(logo_selector)
end
scenario 'Header logos' do
it 'Header logos' do
sign_in(create(:admin))
visit admin_appearances_path
......@@ -76,7 +76,7 @@ feature 'Admin Appearance' do
expect(page).not_to have_css(header_logo_selector)
end
scenario 'Favicon' do
it 'Favicon' do
sign_in(create(:admin))
visit admin_appearances_path
......
require 'spec_helper'
feature 'Admin Broadcast Messages' do
describe 'Admin Broadcast Messages' do
before do
sign_in(create(:admin))
create(:broadcast_message, :expired, message: 'Migration to new server')
visit admin_broadcast_messages_path
end
scenario 'See broadcast messages list' do
it 'See broadcast messages list' do
expect(page).to have_content 'Migration to new server'
end
scenario 'Create a customized broadcast message' do
it 'Create a customized broadcast message' do
fill_in 'broadcast_message_message', with: 'Application update from **4:00 CST to 5:00 CST**'
fill_in 'broadcast_message_color', with: '#f2dede'
fill_in 'broadcast_message_font', with: '#b94a48'
......@@ -24,7 +24,7 @@ feature 'Admin Broadcast Messages' do
expect(page).to have_selector %(div[style="background-color: #f2dede; color: #b94a48"])
end
scenario 'Edit an existing broadcast message' do
it 'Edit an existing broadcast message' do
click_link 'Edit'
fill_in 'broadcast_message_message', with: 'Application update RIGHT NOW'
click_button 'Update broadcast message'
......@@ -33,14 +33,14 @@ feature 'Admin Broadcast Messages' do
expect(page).to have_content 'Application update RIGHT NOW'
end
scenario 'Remove an existing broadcast message' do
it 'Remove an existing broadcast message' do
click_link 'Remove'
expect(current_path).to eq admin_broadcast_messages_path
expect(page).not_to have_content 'Migration to new server'
end
scenario 'Live preview a customized broadcast message', :js do
it 'Live preview a customized broadcast message', :js do
fill_in 'broadcast_message_message', with: "Live **Markdown** previews. :tada:"
page.within('.broadcast-message-preview') do
......
......@@ -7,7 +7,7 @@ describe 'Admin browse spam logs' do
sign_in(create(:admin))
end
scenario 'Browse spam logs' do
it 'Browse spam logs' do
visit admin_spam_logs_path
expect(page).to have_content('Spam Logs')
......
require 'rails_helper'
feature 'Admin cohorts page' do
describe 'Admin cohorts page' do
before do
sign_in(create(:admin))
end
scenario 'See users count per month' do
it 'See users count per month' do
2.times { create(:user) }
visit admin_cohorts_path
......
require 'rails_helper'
feature 'Admin disables Git access protocol' do
describe 'Admin disables Git access protocol' do
include StubENV
let(:project) { create(:project, :empty_repo) }
let(:admin) { create(:admin) }
background do
before do
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
sign_in(admin)
end
context 'with HTTP disabled' do
background do
before do
disable_http_protocol
end
scenario 'shows only SSH url' do
it 'shows only SSH url' do
visit_project
expect(page).to have_content("git clone #{project.ssh_url_to_repo}")
......@@ -25,11 +25,11 @@ feature 'Admin disables Git access protocol' do
end
context 'with SSH disabled' do
background do
before do
disable_ssh_protocol
end
scenario 'shows only HTTP url' do
it 'shows only HTTP url' do
visit_project
expect(page).to have_content("git clone #{project.http_url_to_repo}")
......@@ -38,11 +38,11 @@ feature 'Admin disables Git access protocol' do
end
context 'with nothing disabled' do
background do
before do
create(:personal_key, user: admin)
end
scenario 'shows default SSH url and protocol selection dropdown' do
it 'shows default SSH url and protocol selection dropdown' do
visit_project
expect(page).to have_content("git clone #{project.ssh_url_to_repo}")
......
require 'rails_helper'
feature 'Admin disables 2FA for a user' do
scenario 'successfully', :js do
describe 'Admin disables 2FA for a user' do
it 'successfully', :js do
sign_in(create(:admin))
user = create(:user, :two_factor)
......@@ -16,7 +16,7 @@ feature 'Admin disables 2FA for a user' do
end
end
scenario 'for a user without 2FA enabled' do
it 'for a user without 2FA enabled' do
sign_in(create(:admin))
user = create(:user)
......
require 'spec_helper'
feature 'Admin Groups' do
describe 'Admin Groups' do
include Select2Helper
let(:internal) { Gitlab::VisibilityLevel::INTERNAL }
......@@ -47,13 +47,13 @@ feature 'Admin Groups' do
expect(li_texts).to match group_description
end
scenario 'shows the visibility level radio populated with the default value' do
it 'shows the visibility level radio populated with the default value' do
visit new_admin_group_path
expect_selected_visibility(internal)
end
scenario 'when entered in group path, it auto filled the group name', :js do
it 'when entered in group path, it auto filled the group name', :js do
visit admin_groups_path
click_link "New group"
group_path = 'gitlab'
......@@ -64,7 +64,7 @@ feature 'Admin Groups' do
end
describe 'show a group' do
scenario 'shows the group' do
it 'shows the group' do
group = create(:group, :private)
visit admin_group_path(group)
......@@ -74,7 +74,7 @@ feature 'Admin Groups' do
end
describe 'group edit' do
scenario 'shows the visibility level radio populated with the group visibility_level value' do
it 'shows the visibility level radio populated with the group visibility_level value' do
group = create(:group, :private)
visit admin_group_edit_path(group)
......@@ -82,7 +82,7 @@ feature 'Admin Groups' do
expect_selected_visibility(group.visibility_level)
end
scenario 'edit group path does not change group name', :js do
it 'edit group path does not change group name', :js do
group = create(:group, :private)
visit admin_group_edit_path(group)
......
require 'spec_helper'
feature "Admin Health Check", :feature do
describe "Admin Health Check", :feature do
include StubENV
before do
......
require 'spec_helper'
feature 'Admin::HookLogs' do
describe 'Admin::HookLogs' do
let(:project) { create(:project) }
let(:system_hook) { create(:system_hook) }
let(:hook_log) { create(:web_hook_log, web_hook: system_hook, internal_error_message: 'some error') }
......@@ -9,7 +9,7 @@ feature 'Admin::HookLogs' do
sign_in(create(:admin))
end
scenario 'show list of hook logs' do
it 'show list of hook logs' do
hook_log
visit edit_admin_hook_path(system_hook)
......@@ -17,7 +17,7 @@ feature 'Admin::HookLogs' do
expect(page).to have_content(hook_log.url)
end
scenario 'show hook log details' do
it 'show hook log details' do
hook_log
visit edit_admin_hook_path(system_hook)
click_link 'View details'
......@@ -27,7 +27,7 @@ feature 'Admin::HookLogs' do
expect(page).to have_content('Resend Request')
end
scenario 'retry hook log' do
it 'retry hook log' do
WebMock.stub_request(:post, system_hook.url)
hook_log
......
require 'spec_helper'
feature 'Admin updates settings' do
describe 'Admin updates settings' do
include StubENV
include TermsHelper
......@@ -12,7 +12,7 @@ feature 'Admin updates settings' do
visit admin_application_settings_path
end
scenario 'Change visibility settings' do
it 'Change visibility settings' do
page.within('.as-visibility-access') do
choose "application_setting_default_project_visibility_20"
click_button 'Save changes'
......@@ -21,7 +21,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Uncheck all restricted visibility levels' do
it 'Uncheck all restricted visibility levels' do
page.within('.as-visibility-access') do
find('#application_setting_visibility_level_0').set(false)
find('#application_setting_visibility_level_10').set(false)
......@@ -35,7 +35,7 @@ feature 'Admin updates settings' do
expect(find('#application_setting_visibility_level_20')).not_to be_checked
end
scenario 'Modify import sources' do
it 'Modify import sources' do
expect(Gitlab::CurrentSettings.import_sources).not_to be_empty
page.within('.as-visibility-access') do
......@@ -58,7 +58,7 @@ feature 'Admin updates settings' do
expect(Gitlab::CurrentSettings.import_sources).to eq(['git'])
end
scenario 'Change Visibility and Access Controls' do
it 'Change Visibility and Access Controls' do
page.within('.as-visibility-access') do
uncheck 'Project export enabled'
click_button 'Save changes'
......@@ -68,7 +68,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change Account and Limit Settings' do
it 'Change Account and Limit Settings' do
page.within('.as-account-limit') do
uncheck 'Gravatar enabled'
click_button 'Save changes'
......@@ -78,7 +78,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change Sign-in restrictions' do
it 'Change Sign-in restrictions' do
page.within('.as-signin') do
fill_in 'Home page URL', with: 'https://about.gitlab.com/'
click_button 'Save changes'
......@@ -88,7 +88,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Terms of Service' do
it 'Terms of Service' do
# Already have the admin accept terms, so they don't need to accept in this spec.
_existing_terms = create(:term)
accept_terms(admin)
......@@ -104,7 +104,7 @@ feature 'Admin updates settings' do
expect(page).to have_content 'Application settings saved successfully'
end
scenario 'Modify oauth providers' do
it 'Modify oauth providers' do
expect(Gitlab::CurrentSettings.disabled_oauth_sign_in_sources).to be_empty
page.within('.as-signin') do
......@@ -124,7 +124,7 @@ feature 'Admin updates settings' do
expect(Gitlab::CurrentSettings.disabled_oauth_sign_in_sources).not_to include('google_oauth2')
end
scenario 'Oauth providers do not raise validation errors when saving unrelated changes' do
it 'Oauth providers do not raise validation errors when saving unrelated changes' do
expect(Gitlab::CurrentSettings.disabled_oauth_sign_in_sources).to be_empty
page.within('.as-signin') do
......@@ -147,7 +147,7 @@ feature 'Admin updates settings' do
expect(Gitlab::CurrentSettings.disabled_oauth_sign_in_sources).to include('google_oauth2')
end
scenario 'Change Help page' do
it 'Change Help page' do
page.within('.as-help-page') do
fill_in 'Help page text', with: 'Example text'
check 'Hide marketing-related entries from help'
......@@ -161,7 +161,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change Pages settings' do
it 'Change Pages settings' do
page.within('.as-pages') do
fill_in 'Maximum size of pages (MB)', with: 15
check 'Require users to prove ownership of custom domains'
......@@ -173,7 +173,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change CI/CD settings' do
it 'Change CI/CD settings' do
page.within('.as-ci-cd') do
check 'Enabled Auto DevOps for projects by default'
fill_in 'Auto devops domain', with: 'domain.com'
......@@ -185,7 +185,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change Influx settings' do
it 'Change Influx settings' do
page.within('.as-influx') do
check 'Enable InfluxDB Metrics'
click_button 'Save changes'
......@@ -195,7 +195,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change Prometheus settings' do
it 'Change Prometheus settings' do
page.within('.as-prometheus') do
check 'Enable Prometheus Metrics'
click_button 'Save changes'
......@@ -205,7 +205,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change Performance bar settings' do
it 'Change Performance bar settings' do
group = create(:group)
page.within('.as-performance-bar') do
......@@ -228,7 +228,7 @@ feature 'Admin updates settings' do
expect(find_field('Allowed group').value).to be_nil
end
scenario 'Change Background jobs settings' do
it 'Change Background jobs settings' do
page.within('.as-background') do
fill_in 'Throttling Factor', with: 1
click_button 'Save changes'
......@@ -238,7 +238,7 @@ feature 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
end
scenario 'Change Spam settings' do
it 'Change Spam settings' do
page.within('.as-spam') do
check 'Enable reCAPTCHA'
fill_in 'reCAPTCHA Site Key', with: 'key'
......@@ -252,7 +252,7 @@ feature 'Admin updates settings' do
expect(Gitlab::CurrentSettings.unique_ips_limit_per_user).to eq(15)
end
scenario 'Configure web terminal' do
it 'Configure web terminal' do
page.within('.as-terminal') do
fill_in 'Max session time', with: 15
click_button 'Save changes'
......@@ -262,7 +262,7 @@ feature 'Admin updates settings' do
expect(Gitlab::CurrentSettings.terminal_max_session_time).to eq(15)
end
scenario 'Enable outbound requests' do
it 'Enable outbound requests' do
page.within('.as-outbound') do
check 'Allow requests to the local network from hooks and services'
click_button 'Save changes'
......@@ -272,7 +272,7 @@ feature 'Admin updates settings' do
expect(Gitlab::CurrentSettings.allow_local_requests_from_hooks_and_services).to be true
end
scenario 'Change Slack Notifications Service template settings' do
it 'Change Slack Notifications Service template settings' do
first(:link, 'Service Templates').click
click_link 'Slack notifications'
fill_in 'Webhook', with: 'http://localhost'
......@@ -296,7 +296,7 @@ feature 'Admin updates settings' do
expect(find('#service_push_channel').value).to eq '#test_channel'
end
scenario 'Change Keys settings' do
it 'Change Keys settings' do
page.within('.as-visibility-access') do
select 'Are forbidden', from: 'RSA SSH keys'
select 'Are allowed', from: 'DSA SSH keys'
......
require 'rails_helper'
feature 'Admin uses repository checks' do
describe 'Admin uses repository checks' do
include StubENV
before do
......@@ -8,7 +8,7 @@ feature 'Admin uses repository checks' do
sign_in(create(:admin))
end
scenario 'to trigger a single check' do
it 'to trigger a single check' do
project = create(:project)
visit_admin_project_page(project)
......@@ -19,7 +19,7 @@ feature 'Admin uses repository checks' do
expect(page).to have_content('Repository check was triggered')
end
scenario 'to see a single failed repository check', :js do
it 'to see a single failed repository check', :js do
project = create(:project)
project.update_columns(
last_repository_check_failed: true,
......@@ -32,7 +32,7 @@ feature 'Admin uses repository checks' do
end
end
scenario 'to clear all repository checks', :js do
it 'to clear all repository checks', :js do
visit admin_application_settings_path
expect(RepositoryCheck::ClearWorker).to receive(:perform_async)
......
require 'spec_helper'
feature 'Contributions Calendar', :js do
describe 'Contributions Calendar', :js do
let(:user) { create(:user) }
let(:contributed_project) { create(:project, :public, :repository) }
let(:issue_note) { create(:note, project: contributed_project) }
......
......@@ -16,7 +16,7 @@ describe "Container Registry", :js do
end
context 'when there are no image repositories' do
scenario 'user visits container registry main page' do
it 'user visits container registry main page' do
visit_container_registry
expect(page).to have_content 'No container images'
......@@ -29,13 +29,13 @@ describe "Container Registry", :js do
project.container_repositories << container_repository
end
scenario 'user wants to see multi-level container repository' do
it 'user wants to see multi-level container repository' do
visit_container_registry
expect(page).to have_content('my/image')
end
scenario 'user removes entire container repository' do
it 'user removes entire container repository' do
visit_container_registry
expect_any_instance_of(ContainerRepository)
......@@ -44,7 +44,7 @@ describe "Container Registry", :js do
click_on(class: 'js-remove-repo')
end
scenario 'user removes a specific tag from container repository' do
it 'user removes a specific tag from container repository' do
visit_container_registry
find('.js-toggle-repo').click
......
require 'spec_helper'
feature 'Cycle Analytics', :js do
describe 'Cycle Analytics', :js do
let(:user) { create(:user) }
let(:guest) { create(:user) }
let(:project) { create(:project, :repository) }
......
require 'spec_helper'
feature 'Dashboard > Activity' do
describe 'Dashboard > Activity' do
let(:user) { create(:user) }
before do
......@@ -66,7 +66,7 @@ feature 'Dashboard > Activity' do
wait_for_requests
end
scenario 'user should see all events' do
it 'user should see all events' do
within '.content_list' do
expect(page).to have_content('pushed new branch')
expect(page).to have_content('joined')
......@@ -77,7 +77,7 @@ feature 'Dashboard > Activity' do
end
end
scenario 'user should see only pushed events' do
it 'user should see only pushed events' do
click_link('Push events')
wait_for_requests
......@@ -90,7 +90,7 @@ feature 'Dashboard > Activity' do
end
end
scenario 'user should see only merged events' do
it 'user should see only merged events' do
click_link('Merge events')
wait_for_requests
......@@ -103,7 +103,7 @@ feature 'Dashboard > Activity' do
end
end
scenario 'user should see only issues events' do
it 'user should see only issues events' do
click_link('Issue events')
wait_for_requests
......@@ -117,7 +117,7 @@ feature 'Dashboard > Activity' do
end
end
scenario 'user should see only comments events' do
it 'user should see only comments events' do
click_link('Comments')
wait_for_requests
......@@ -130,7 +130,7 @@ feature 'Dashboard > Activity' do
end
end
scenario 'user should see only joined events' do
it 'user should see only joined events' do
click_link('Team')
wait_for_requests
......@@ -143,7 +143,7 @@ feature 'Dashboard > Activity' do
end
end
scenario 'user see selected event after page reloading' do
it 'user see selected event after page reloading' do
click_link('Push events')
wait_for_requests
visit activity_dashboard_path
......
require 'spec_helper'
feature 'Tooltips on .timeago dates', :js do
describe 'Tooltips on .timeago dates', :js do
let(:user) { create(:user) }
let(:project) { create(:project, name: 'test', namespace: user.namespace) }
let(:created_date) { Date.yesterday.to_time }
......
require 'spec_helper'
feature 'Dashboard Groups page', :js do
describe 'Dashboard Groups page', :js do
let(:user) { create :user }
let(:group) { create(:group) }
let(:nested_group) { create(:group, :nested) }
......
require 'spec_helper'
feature 'Dashboard Issues filtering', :js do
describe 'Dashboard Issues filtering', :js do
include Spec::Support::Helpers::Features::SortingHelpers
let(:user) { create(:user) }
......
require 'spec_helper'
feature 'Dashboard Merge Requests' do
describe 'Dashboard Merge Requests' do
include Spec::Support::Helpers::Features::SortingHelpers
include FilterItemSelectHelper
include ProjectForksHelper
......
require 'spec_helper'
feature 'Dashboard > milestone filter', :js do
describe 'Dashboard > milestone filter', :js do
include FilterItemSelectHelper
let(:user) { create(:user) }
......
require 'spec_helper'
feature 'Dashboard > Milestones' do
describe 'Dashboard > Milestones' do
describe 'as anonymous user' do
before do
visit dashboard_milestones_path
......
require 'spec_helper'
feature 'Project member activity', :js do
describe 'Project member activity', :js do
let(:user) { create(:user) }
let(:project) { create(:project, :public, name: 'x', namespace: user.namespace) }
......
require 'spec_helper'
feature 'Dashboard Projects' do
describe 'Dashboard Projects' do
let(:user) { create(:user) }
let(:project) { create(:project, :repository, name: 'awesome stuff') }
let(:project2) { create(:project, :public, name: 'Community project') }
......@@ -121,7 +121,7 @@ feature 'Dashboard Projects' do
visit dashboard_projects_path
end
scenario 'shows "Create merge request" button' do
it 'shows "Create merge request" button' do
expect(page).to have_content 'You pushed to feature'
within('#content-body') do
......
require 'spec_helper'
feature 'Dashboard shortcuts', :js do
describe 'Dashboard shortcuts', :js do
context 'logged in' do
before do
sign_in(create(:user))
visit root_dashboard_path
end
scenario 'Navigate to tabs' do
it 'Navigate to tabs' do
find('body').send_keys([:shift, 'I'])
check_page_title('Issues')
......@@ -31,7 +31,7 @@ feature 'Dashboard shortcuts', :js do
visit explore_root_path
end
scenario 'Navigate to tabs' do
it 'Navigate to tabs' do
find('body').send_keys([:shift, 'G'])
find('.nothing-here-block')
......
require 'rails_helper'
feature 'Dashboard > Todo target states' do
describe 'Dashboard > Todo target states' do
let(:user) { create(:user) }
let(:author) { create(:user) }
let(:project) { create(:project, :public) }
......@@ -9,7 +9,7 @@ feature 'Dashboard > Todo target states' do
sign_in(user)
end
scenario 'on a closed issue todo has closed label' do
it 'on a closed issue todo has closed label' do
issue_closed = create(:issue, state: 'closed')
create_todo issue_closed
visit dashboard_todos_path
......@@ -19,7 +19,7 @@ feature 'Dashboard > Todo target states' do
end
end
scenario 'on an open issue todo does not have an open label' do
it 'on an open issue todo does not have an open label' do
issue_open = create(:issue)
create_todo issue_open
visit dashboard_todos_path
......@@ -29,7 +29,7 @@ feature 'Dashboard > Todo target states' do
end
end
scenario 'on a merged merge request todo has merged label' do
it 'on a merged merge request todo has merged label' do
mr_merged = create(:merge_request, :simple, :merged, author: user)
create_todo mr_merged
visit dashboard_todos_path
......@@ -39,7 +39,7 @@ feature 'Dashboard > Todo target states' do
end
end
scenario 'on a closed merge request todo has closed label' do
it 'on a closed merge request todo has closed label' do
mr_closed = create(:merge_request, :simple, :closed, author: user)
create_todo mr_closed
visit dashboard_todos_path
......@@ -49,7 +49,7 @@ feature 'Dashboard > Todo target states' do
end
end
scenario 'on an open merge request todo does not have an open label' do
it 'on an open merge request todo does not have an open label' do
mr_open = create(:merge_request, :simple, author: user)
create_todo mr_open
visit dashboard_todos_path
......
require 'spec_helper'
feature 'Dashboard > User filters todos', :js do
describe 'Dashboard > User filters todos', :js do
let(:user_1) { create(:user, username: 'user_1', name: 'user_1') }
let(:user_2) { create(:user, username: 'user_2', name: 'user_2') }
......
require 'spec_helper'
feature 'Dashboard > User sorts todos' do
describe 'Dashboard > User sorts todos' do
let(:user) { create(:user) }
let(:project) { create(:project) }
......
require 'spec_helper'
feature 'Dashboard Todos' do
describe 'Dashboard Todos' do
let(:user) { create(:user) }
let(:author) { create(:user) }
let(:project) { create(:project, :public) }
......
require 'spec_helper'
feature 'Expand and collapse diffs', :js do
describe 'Expand and collapse diffs', :js do
let(:branch) { 'expand-collapse-diffs' }
let(:project) { create(:project, :repository) }
......
require 'spec_helper'
feature 'Top Plus Menu', :js do
describe 'Top Plus Menu', :js do
let(:user) { create(:user) }
let(:group) { create(:group) }
let(:project) { create(:project, :repository, creator: user, namespace: user.namespace) }
......@@ -15,7 +15,7 @@ feature 'Top Plus Menu', :js do
sign_in(user)
end
scenario 'click on New project shows new project page' do
it 'click on New project shows new project page' do
visit root_dashboard_path
click_topmenuitem("New project")
......@@ -24,7 +24,7 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Project name')
end
scenario 'click on New group shows new group page' do
it 'click on New group shows new group page' do
visit root_dashboard_path
click_topmenuitem("New group")
......@@ -33,7 +33,7 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Group name')
end
scenario 'click on New snippet shows new snippet page' do
it 'click on New snippet shows new snippet page' do
visit root_dashboard_path
click_topmenuitem("New snippet")
......@@ -42,7 +42,7 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Title')
end
scenario 'click on New issue shows new issue page' do
it 'click on New issue shows new issue page' do
visit project_path(project)
click_topmenuitem("New issue")
......@@ -51,7 +51,7 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Title')
end
scenario 'click on New merge request shows new merge request page' do
it 'click on New merge request shows new merge request page' do
visit project_path(project)
click_topmenuitem("New merge request")
......@@ -61,7 +61,7 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Target branch')
end
scenario 'click on New project snippet shows new snippet page' do
it 'click on New project snippet shows new snippet page' do
visit project_path(project)
page.within '.header-content' do
......@@ -74,7 +74,7 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Title')
end
scenario 'Click on New subgroup shows new group page', :nested_groups do
it 'Click on New subgroup shows new group page', :nested_groups do
visit group_path(group)
click_topmenuitem("New subgroup")
......@@ -83,7 +83,7 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Group name')
end
scenario 'Click on New project in group shows new project page' do
it 'Click on New project in group shows new project page' do
visit group_path(group)
page.within '.header-content' do
......@@ -107,7 +107,7 @@ feature 'Top Plus Menu', :js do
sign_in(guest_user)
end
scenario 'click on New issue shows new issue page' do
it 'click on New issue shows new issue page' do
visit project_path(project)
click_topmenuitem("New issue")
......@@ -116,37 +116,37 @@ feature 'Top Plus Menu', :js do
expect(page).to have_content('Title')
end
scenario 'has no New merge request menu item' do
it 'has no New merge request menu item' do
visit project_path(project)
hasnot_topmenuitem("New merge request")
end
scenario 'has no New project snippet menu item' do
it 'has no New project snippet menu item' do
visit project_path(project)
expect(find('.header-new.dropdown')).not_to have_selector('.header-new-project-snippet')
end
scenario 'public project has no New merge request menu item' do
it 'public project has no New merge request menu item' do
visit project_path(public_project)
hasnot_topmenuitem("New merge request")
end
scenario 'public project has no New project snippet menu item' do
it 'public project has no New project snippet menu item' do
visit project_path(public_project)
expect(find('.header-new.dropdown')).not_to have_selector('.header-new-project-snippet')
end
scenario 'has no New subgroup menu item' do
it 'has no New subgroup menu item' do
visit group_path(group)
hasnot_topmenuitem("New subgroup")
end
scenario 'has no New project for group menu item' do
it 'has no New project for group menu item' do
visit group_path(group)
expect(find('.header-new.dropdown')).not_to have_selector('.header-new-group-project')
......
require 'spec_helper'
feature 'Global search' do
describe 'Global search' do
let(:user) { create(:user) }
let(:project) { create(:project, namespace: user.namespace) }
......
require 'spec_helper'
feature 'Group variables', :js do
describe 'Group variables', :js do
let(:user) { create(:user) }
let(:group) { create(:group) }
let!(:variable) { create(:ci_group_variable, key: 'test_key', value: 'test value', group: group) }
let(:page_path) { group_settings_ci_cd_path(group) }
background do
before do
group.add_master(user)
gitlab_sign_in(user)
......
require 'spec_helper'
feature 'Group activity page' do
describe 'Group activity page' do
let(:user) { create(:group_member, :developer, user: create(:user), group: group ).user }
let(:group) { create(:group) }
let(:path) { activity_group_path(group) }
......
require 'spec_helper'
feature 'Group empty states' do
describe 'Group empty states' do
let(:group) { create(:group) }
let(:user) { create(:group_member, :developer, user: create(:user), group: group ).user }
......
require 'spec_helper'
feature 'Edit group settings' do
given(:user) { create(:user) }
given(:group) { create(:group, path: 'foo') }
describe 'Edit group settings' do
let(:user) { create(:user) }
let(:group) { create(:group, path: 'foo') }
background do
before do
group.add_owner(user)
sign_in(user)
end
......@@ -14,14 +14,14 @@ feature 'Edit group settings' do
let(:old_group_full_path) { "/#{group.path}" }
let(:new_group_full_path) { "/#{new_group_path}" }
scenario 'the group is accessible via the new path' do
it 'the group is accessible via the new path' do
update_path(new_group_path)
visit new_group_full_path
expect(current_path).to eq(new_group_full_path)
expect(find('h1.group-title')).to have_content(group.name)
end
scenario 'the old group path redirects to the new path' do
it 'the old group path redirects to the new path' do
update_path(new_group_path)
visit old_group_full_path
expect(current_path).to eq(new_group_full_path)
......@@ -29,18 +29,18 @@ feature 'Edit group settings' do
end
context 'with a subgroup' do
given!(:subgroup) { create(:group, parent: group, path: 'subgroup') }
given(:old_subgroup_full_path) { "/#{group.path}/#{subgroup.path}" }
given(:new_subgroup_full_path) { "/#{new_group_path}/#{subgroup.path}" }
let!(:subgroup) { create(:group, parent: group, path: 'subgroup') }
let(:old_subgroup_full_path) { "/#{group.path}/#{subgroup.path}" }
let(:new_subgroup_full_path) { "/#{new_group_path}/#{subgroup.path}" }
scenario 'the subgroup is accessible via the new path' do
it 'the subgroup is accessible via the new path' do
update_path(new_group_path)
visit new_subgroup_full_path
expect(current_path).to eq(new_subgroup_full_path)
expect(find('h1.group-title')).to have_content(subgroup.name)
end
scenario 'the old subgroup path redirects to the new path' do
it 'the old subgroup path redirects to the new path' do
update_path(new_group_path)
visit old_subgroup_full_path
expect(current_path).to eq(new_subgroup_full_path)
......@@ -49,9 +49,9 @@ feature 'Edit group settings' do
end
context 'with a project' do
given!(:project) { create(:project, group: group) }
given(:old_project_full_path) { "/#{group.path}/#{project.path}" }
given(:new_project_full_path) { "/#{new_group_path}/#{project.path}" }
let!(:project) { create(:project, group: group) }
let(:old_project_full_path) { "/#{group.path}/#{project.path}" }
let(:new_project_full_path) { "/#{new_group_path}/#{project.path}" }
before(:context) do
TestEnv.clean_test_path
......@@ -61,14 +61,14 @@ feature 'Edit group settings' do
TestEnv.clean_test_path
end
scenario 'the project is accessible via the new path' do
it 'the project is accessible via the new path' do
update_path(new_group_path)
visit new_project_full_path
expect(current_path).to eq(new_project_full_path)
expect(find('.breadcrumbs')).to have_content(project.path)
end
scenario 'the old project path redirects to the new path' do
it 'the old project path redirects to the new path' do
update_path(new_group_path)
visit old_project_full_path
expect(current_path).to eq(new_project_full_path)
......
require 'spec_helper'
feature 'Group issues page' do
describe 'Group issues page' do
include FilteredSearchHelpers
let(:group) { create(:group) }
......
require 'spec_helper'
feature 'Edit group label' do
given(:user) { create(:user) }
given(:group) { create(:group) }
given(:label) { create(:group_label, group: group) }
describe 'Edit group label' do
let(:user) { create(:user) }
let(:group) { create(:group) }
let(:label) { create(:group_label, group: group) }
background do
before do
group.add_owner(user)
sign_in(user)
visit edit_group_label_path(group, label)
end
scenario 'update label with new title' do
it 'update label with new title' do
fill_in 'label_title', with: 'new label name'
click_button 'Save changes'
......
require 'spec_helper'
feature 'Group labels' do
describe 'Group labels' do
let(:user) { create(:user) }
let(:group) { create(:group) }
let!(:label) { create(:group_label, group: group) }
background do
before do
group.add_owner(user)
sign_in(user)
visit group_labels_path(group)
end
scenario 'label has edit button', :js do
it 'label has edit button', :js do
expect(page).to have_selector('.label-action.edit')
end
end
require 'spec_helper'
feature 'Labels subscription' do
describe 'Labels subscription' do
let(:user) { create(:user) }
let(:group) { create(:group) }
let!(:feature) { create(:group_label, group: group, title: 'feature') }
......@@ -11,7 +11,7 @@ feature 'Labels subscription' do
gitlab_sign_in user
end
scenario 'users can subscribe/unsubscribe to group labels', :js do
it 'users can subscribe/unsubscribe to group labels', :js do
visit group_labels_path(group)
expect(page).to have_content('feature')
......
require 'spec_helper'
feature 'Groups > Labels > User sees links to issuables' do
describe 'Groups > Labels > User sees links to issuables' do
set(:group) { create(:group, :public) }
before do
......@@ -8,7 +8,7 @@ feature 'Groups > Labels > User sees links to issuables' do
visit group_labels_path(group)
end
scenario 'shows links to MRs and issues' do
it 'shows links to MRs and issues' do
expect(page).to have_link('view merge requests')
expect(page).to have_link('view open issues')
end
......
require 'spec_helper'
feature 'Groups > Members > Filter members' do
describe 'Groups > Members > Filter members' do
let(:user) { create(:user) }
let(:user_with_2fa) { create(:user, :two_factor_via_otp) }
let(:group) { create(:group) }
background do
before do
group.add_owner(user)
group.add_master(user_with_2fa)
sign_in(user)
end
scenario 'shows all members' do
it 'shows all members' do
visit_members_list
expect(first_member).to include(user.name)
......@@ -20,7 +20,7 @@ feature 'Groups > Members > Filter members' do
expect(page).to have_css('.member-filter-2fa-dropdown .dropdown-toggle-text', text: '2FA: Everyone')
end
scenario 'shows only 2FA members' do
it 'shows only 2FA members' do
visit_members_list(two_factor: 'enabled')
expect(first_member).to include(user_with_2fa.name)
......@@ -28,7 +28,7 @@ feature 'Groups > Members > Filter members' do
expect(page).to have_css('.member-filter-2fa-dropdown .dropdown-toggle-text', text: '2FA: Enabled')
end
scenario 'shows only non 2FA members' do
it 'shows only non 2FA members' do
visit_members_list(two_factor: 'disabled')
expect(first_member).to include(user.name)
......
require 'spec_helper'
feature 'Groups > Members > Leave group' do
describe 'Groups > Members > Leave group' do
let(:user) { create(:user) }
let(:other_user) { create(:user) }
let(:group) { create(:group) }
background do
before do
gitlab_sign_in(user)
end
scenario 'guest leaves the group' do
it 'guest leaves the group' do
group.add_guest(user)
group.add_owner(other_user)
......@@ -21,7 +21,7 @@ feature 'Groups > Members > Leave group' do
expect(group.users).not_to include(user)
end
scenario 'guest leaves the group as last member' do
it 'guest leaves the group as last member' do
group.add_guest(user)
visit group_path(group)
......@@ -32,7 +32,7 @@ feature 'Groups > Members > Leave group' do
expect(group.users).not_to include(user)
end
scenario 'owner leaves the group if they is not the last owner' do
it 'owner leaves the group if they is not the last owner' do
group.add_owner(user)
group.add_owner(other_user)
......@@ -44,7 +44,7 @@ feature 'Groups > Members > Leave group' do
expect(group.users).not_to include(user)
end
scenario 'owner can not leave the group if they is a last owner' do
it 'owner can not leave the group if they is a last owner' do
group.add_owner(user)
visit group_path(group)
......
require 'spec_helper'
feature 'Groups > Members > List members' do
describe 'Groups > Members > List members' do
include Select2Helper
let(:user1) { create(:user, name: 'John Doe') }
......@@ -8,11 +8,11 @@ feature 'Groups > Members > List members' do
let(:group) { create(:group) }
let(:nested_group) { create(:group, parent: group) }
background do
before do
gitlab_sign_in(user1)
end
scenario 'show members from current group and parent', :nested_groups do
it 'show members from current group and parent', :nested_groups do
group.add_developer(user1)
nested_group.add_developer(user2)
......@@ -22,7 +22,7 @@ feature 'Groups > Members > List members' do
expect(second_row.text).to include(user2.name)
end
scenario 'show user once if member of both current group and parent', :nested_groups do
it 'show user once if member of both current group and parent', :nested_groups do
group.add_developer(user1)
nested_group.add_developer(user1)
......
require 'spec_helper'
feature 'Groups > Members > Manage members' do
describe 'Groups > Members > Manage members' do
include Select2Helper
let(:user1) { create(:user, name: 'John Doe') }
let(:user2) { create(:user, name: 'Mary Jane') }
let(:group) { create(:group) }
background do
before do
sign_in(user1)
end
scenario 'update user to owner level', :js do
it 'update user to owner level', :js do
group.add_owner(user1)
group.add_developer(user2)
......@@ -25,7 +25,7 @@ feature 'Groups > Members > Manage members' do
end
end
scenario 'add user to group', :js do
it 'add user to group', :js do
group.add_owner(user1)
visit group_group_members_path(group)
......@@ -38,7 +38,7 @@ feature 'Groups > Members > Manage members' do
end
end
scenario 'do not disclose email addresses', :js do
it 'do not disclose email addresses', :js do
group.add_owner(user1)
create(:user, email: 'undisclosed_email@gitlab.com', name: "Jane 'invisible' Doe")
......@@ -59,7 +59,7 @@ feature 'Groups > Members > Manage members' do
expect(page).to have_content("Jane 'invisible' Doe")
end
scenario 'remove user from group', :js do
it 'remove user from group', :js do
group.add_owner(user1)
group.add_developer(user2)
......@@ -75,7 +75,7 @@ feature 'Groups > Members > Manage members' do
expect(group.users).not_to include(user2)
end
scenario 'add yourself to group when already an owner', :js do
it 'add yourself to group when already an owner', :js do
group.add_owner(user1)
visit group_group_members_path(group)
......@@ -88,7 +88,7 @@ feature 'Groups > Members > Manage members' do
end
end
scenario 'invite user to group', :js do
it 'invite user to group', :js do
group.add_owner(user1)
visit group_group_members_path(group)
......@@ -102,7 +102,7 @@ feature 'Groups > Members > Manage members' do
end
end
scenario 'guest can not manage other users' do
it 'guest can not manage other users' do
group.add_guest(user1)
group.add_developer(user2)
......
require 'spec_helper'
feature 'Groups > Members > Master manages access requests' do
describe 'Groups > Members > Master manages access requests' do
it_behaves_like 'Master manages access requests' do
let(:entity) { create(:group, :public, :access_requestable) }
let(:members_page_path) { group_group_members_path(entity) }
......
require 'spec_helper'
feature 'Groups > Members > Request access' do
describe 'Groups > Members > Request access' do
let(:user) { create(:user) }
let(:owner) { create(:user) }
let(:group) { create(:group, :public, :access_requestable) }
let!(:project) { create(:project, :private, namespace: group) }
background do
before do
group.add_owner(owner)
sign_in(user)
visit group_path(group)
end
scenario 'request access feature is disabled' do
it 'request access feature is disabled' do
group.update_attributes(request_access_enabled: false)
visit group_path(group)
expect(page).not_to have_content 'Request Access'
end
scenario 'user can request access to a group' do
it 'user can request access to a group' do
perform_enqueued_jobs { click_link 'Request Access' }
expect(ActionMailer::Base.deliveries.last.to).to eq [owner.notification_email]
......@@ -32,13 +32,13 @@ feature 'Groups > Members > Request access' do
expect(page).not_to have_content 'Leave group'
end
scenario 'user does not see private projects' do
it 'user does not see private projects' do
perform_enqueued_jobs { click_link 'Request Access' }
expect(page).not_to have_content project.name
end
scenario 'user does not see group in the Dashboard > Groups page' do
it 'user does not see group in the Dashboard > Groups page' do
perform_enqueued_jobs { click_link 'Request Access' }
visit dashboard_groups_path
......@@ -46,7 +46,7 @@ feature 'Groups > Members > Request access' do
expect(page).not_to have_content group.name
end
scenario 'user is not listed in the group members page' do
it 'user is not listed in the group members page' do
click_link 'Request Access'
expect(group.requesters.exists?(user_id: user)).to be_truthy
......@@ -58,7 +58,7 @@ feature 'Groups > Members > Request access' do
end
end
scenario 'user can withdraw its request for access' do
it 'user can withdraw its request for access' do
click_link 'Request Access'
expect(group.requesters.exists?(user_id: user)).to be_truthy
......@@ -69,7 +69,7 @@ feature 'Groups > Members > Request access' do
expect(page).to have_content 'Your access request to the group has been withdrawn.'
end
scenario 'member does not see the request access button' do
it 'member does not see the request access button' do
group.add_owner(user)
visit group_path(group)
......
require 'spec_helper'
feature 'Groups > Members > Sort members' do
describe 'Groups > Members > Sort members' do
let(:owner) { create(:user, name: 'John Doe') }
let(:developer) { create(:user, name: 'Mary Jane', last_sign_in_at: 5.days.ago) }
let(:group) { create(:group) }
background do
before do
create(:group_member, :owner, user: owner, group: group, created_at: 5.days.ago)
create(:group_member, :developer, user: developer, group: group, created_at: 3.days.ago)
sign_in(owner)
end
scenario 'sorts alphabetically by default' do
it 'sorts alphabetically by default' do
visit_members_list(sort: nil)
expect(first_member).to include(owner.name)
......@@ -20,7 +20,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, ascending')
end
scenario 'sorts by access level ascending' do
it 'sorts by access level ascending' do
visit_members_list(sort: :access_level_asc)
expect(first_member).to include(developer.name)
......@@ -28,7 +28,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Access level, ascending')
end
scenario 'sorts by access level descending' do
it 'sorts by access level descending' do
visit_members_list(sort: :access_level_desc)
expect(first_member).to include(owner.name)
......@@ -36,7 +36,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Access level, descending')
end
scenario 'sorts by last joined' do
it 'sorts by last joined' do
visit_members_list(sort: :last_joined)
expect(first_member).to include(developer.name)
......@@ -44,7 +44,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Last joined')
end
scenario 'sorts by oldest joined' do
it 'sorts by oldest joined' do
visit_members_list(sort: :oldest_joined)
expect(first_member).to include(owner.name)
......@@ -52,7 +52,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Oldest joined')
end
scenario 'sorts by name ascending' do
it 'sorts by name ascending' do
visit_members_list(sort: :name_asc)
expect(first_member).to include(owner.name)
......@@ -60,7 +60,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, ascending')
end
scenario 'sorts by name descending' do
it 'sorts by name descending' do
visit_members_list(sort: :name_desc)
expect(first_member).to include(developer.name)
......@@ -68,7 +68,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, descending')
end
scenario 'sorts by recent sign in', :clean_gitlab_redis_shared_state do
it 'sorts by recent sign in', :clean_gitlab_redis_shared_state do
visit_members_list(sort: :recent_sign_in)
expect(first_member).to include(owner.name)
......@@ -76,7 +76,7 @@ feature 'Groups > Members > Sort members' do
expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Recent sign in')
end
scenario 'sorts by oldest sign in', :clean_gitlab_redis_shared_state do
it 'sorts by oldest sign in', :clean_gitlab_redis_shared_state do
visit_members_list(sort: :oldest_sign_in)
expect(first_member).to include(developer.name)
......
require 'spec_helper'
feature 'Group merge requests page' do
describe 'Group merge requests page' do
include FilteredSearchHelpers
let(:path) { merge_requests_group_path(group) }
......
require 'rails_helper'
feature 'Group milestones' do
describe 'Group milestones' do
let(:group) { create(:group) }
let!(:project) { create(:project_empty_repo, group: group) }
let(:user) { create(:group_member, :master, user: create(:user), group: group ).user }
......
require 'spec_helper'
feature 'Milestones sorting', :js do
describe 'Milestones sorting', :js do
let(:group) { create(:group) }
let!(:project) { create(:project_empty_repo, group: group) }
let!(:other_project) { create(:project_empty_repo, group: group) }
......@@ -15,7 +15,7 @@ feature 'Milestones sorting', :js do
sign_in(user)
end
scenario 'visit group milestones and sort by due_date_asc' do
it 'visit group milestones and sort by due_date_asc' do
visit group_milestones_path(group)
expect(page).to have_button('Due soon')
......
require 'spec_helper'
feature 'Group Badges' do
describe 'Group Badges' do
include WaitForRequests
let(:user) { create(:user) }
......
require 'spec_helper'
feature 'Group share with group lock' do
given(:root_owner) { create(:user) }
given(:root_group) { create(:group) }
describe 'Group share with group lock' do
let(:root_owner) { create(:user) }
let(:root_group) { create(:group) }
background do
before do
root_group.add_owner(root_owner)
sign_in(root_owner)
end
context 'with a subgroup', :nested_groups do
given!(:subgroup) { create(:group, parent: root_group) }
let!(:subgroup) { create(:group, parent: root_group) }
context 'when enabling the parent group share with group lock' do
scenario 'the subgroup share with group lock becomes enabled' do
it 'the subgroup share with group lock becomes enabled' do
visit edit_group_path(root_group)
enable_group_lock
......@@ -23,14 +23,14 @@ feature 'Group share with group lock' do
end
context 'when disabling the parent group share with group lock (which was already enabled)' do
background do
before do
visit edit_group_path(root_group)
enable_group_lock
end
context 'and the subgroup share with group lock is enabled' do
scenario 'the subgroup share with group lock does not change' do
it 'the subgroup share with group lock does not change' do
visit edit_group_path(root_group)
disable_group_lock
......@@ -40,13 +40,13 @@ feature 'Group share with group lock' do
end
context 'but the subgroup share with group lock is disabled' do
background do
before do
visit edit_group_path(subgroup)
disable_group_lock
end
scenario 'the subgroup share with group lock does not change' do
it 'the subgroup share with group lock does not change' do
visit edit_group_path(root_group)
disable_group_lock
......
require 'spec_helper'
feature 'Group show page' do
describe 'Group show page' do
let(:group) { create(:group) }
let(:path) { group_path(group) }
......
require 'spec_helper'
feature 'Groups > User sees users dropdowns in issuables list' do
describe 'Groups > User sees users dropdowns in issuables list' do
let(:entity) { create(:group) }
let(:user_in_dropdown) { create(:user) }
let!(:user_not_in_dropdown) { create(:user) }
......
require 'spec_helper'
feature 'Group' do
describe 'Group' do
before do
sign_in(create(:admin))
end
......
require 'spec_helper'
feature 'Blob shortcuts', :js do
describe 'Blob shortcuts', :js do
let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) }
let(:issue) { create(:issue, project: project, author: user) }
......
require 'rails_helper'
feature 'Issue awards', :js do
describe 'Issue awards', :js do
let(:user) { create(:user) }
let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project) }
......
require 'rails_helper'
feature 'Issues > Labels bulk assignment' do
describe 'Issues > Labels bulk assignment' do
let(:user) { create(:user) }
let!(:project) { create(:project) }
let!(:issue1) { create(:issue, project: project, title: "Issue 1") }
......
require 'rails_helper'
feature 'Resolving all open discussions in a merge request from an issue', :js do
describe 'Resolving all open discussions in a merge request from an issue', :js do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:merge_request) { create(:merge_request, source_project: project) }
......
require 'rails_helper'
feature 'Resolve an open discussion in a merge request by creating an issue', :js do
describe 'Resolve an open discussion in a merge request by creating an issue', :js do
let(:user) { create(:user) }
let(:project) { create(:project, :repository, only_allow_merge_if_all_discussions_are_resolved: true) }
let(:merge_request) { create(:merge_request, source_project: project) }
......
require 'rails_helper'
feature 'GFM autocomplete', :js do
describe 'GFM autocomplete', :js do
let(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') }
let(:project) { create(:project) }
let(:label) { create(:label, project: project, title: 'special+') }
......
require 'rails_helper'
feature 'Issue Detail', :js do
describe 'Issue Detail', :js do
let(:user) { create(:user) }
let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project, author: user) }
......
require 'rails_helper'
feature 'Issue Sidebar' do
describe 'Issue Sidebar' do
include MobileHelpers
let(:group) { create(:group, :nested) }
......
require 'rails_helper'
feature 'Issue markdown toolbar', :js do
describe 'Issue markdown toolbar', :js do
let(:project) { create(:project, :public) }
let(:issue) { create(:issue, project: project) }
let(:user) { create(:user) }
......
require 'rails_helper'
feature 'issue move to another project' do
describe 'issue move to another project' do
let(:user) { create(:user) }
let(:old_project) { create(:project, :repository) }
let(:text) { 'Some issue description' }
......@@ -9,16 +9,18 @@ feature 'issue move to another project' do
create(:issue, description: text, project: old_project, author: user)
end
background { sign_in(user) }
before do
sign_in(user)
end
context 'user does not have permission to move issue' do
background do
before do
old_project.add_guest(user)
visit issue_path(issue)
end
scenario 'moving issue to another project not allowed' do
it 'moving issue to another project not allowed' do
expect(page).to have_no_selector('.js-sidebar-move-issue-block')
end
end
......@@ -30,14 +32,14 @@ feature 'issue move to another project' do
let(:text) { "Text with #{mr.to_reference}" }
let(:cross_reference) { old_project.to_reference(new_project) }
background do
before do
old_project.add_reporter(user)
new_project.add_reporter(user)
visit issue_path(issue)
end
scenario 'moving issue to another project', :js do
it 'moving issue to another project', :js do
find('.js-move-issue').click
wait_for_requests
all('.js-move-issue-dropdown-item')[0].click
......@@ -49,7 +51,7 @@ feature 'issue move to another project' do
expect(page.current_path).to include project_path(new_project)
end
scenario 'searching project dropdown', :js do
it 'searching project dropdown', :js do
new_project_search.add_reporter(user)
find('.js-move-issue').click
......@@ -66,9 +68,11 @@ feature 'issue move to another project' do
context 'user does not have permission to move the issue to a project', :js do
let!(:private_project) { create(:project, :private) }
let(:another_project) { create(:project) }
background { another_project.add_guest(user) }
before do
another_project.add_guest(user)
end
scenario 'browsing projects in projects select' do
it 'browsing projects in projects select' do
find('.js-move-issue').click
wait_for_requests
......@@ -84,7 +88,7 @@ feature 'issue move to another project' do
create(:issue, project: old_project, author: user, moved_to: new_issue)
end
scenario 'user wants to move issue that has already been moved' do
it 'user wants to move issue that has already been moved' do
expect(page).to have_no_selector('#move_to_project_id')
end
end
......
require 'spec_helper'
feature 'Issue notes polling', :js do
describe 'Issue notes polling', :js do
include NoteInteractionHelpers
let(:project) { create(:project, :public) }
......
require 'rails_helper'
feature 'Manually create a todo item from issue', :js do
describe 'Manually create a todo item from issue', :js do
let!(:project) { create(:project) }
let!(:issue) { create(:issue, project: project) }
let!(:user) { create(:user)}
......
require 'rails_helper'
feature 'Multiple issue updating from issues#index', :js do
describe 'Multiple issue updating from issues#index', :js do
let!(:project) { create(:project) }
let!(:issue) { create(:issue, project: project) }
let!(:user) { create(:user)}
......
require 'rails_helper'
feature 'Issues > User uses quick actions', :js do
describe 'Issues > User uses quick actions', :js do
include Spec::Support::Helpers::Features::NotesHelpers
it_behaves_like 'issuable record that supports quick actions in its description and notes', :issue do
......
require 'spec_helper'
feature 'Labels Hierarchy', :js, :nested_groups do
describe 'Labels Hierarchy', :js, :nested_groups do
include FilteredSearchHelpers
let!(:user) { create(:user) }
......
require 'spec_helper'
feature 'Merge request > User creates image diff notes', :js do
describe 'Merge request > User creates image diff notes', :js do
include NoteInteractionHelpers
let(:project) { create(:project, :public, :repository) }
......
require 'spec_helper'
feature 'Merge request > User resolves outdated diff discussions', :js do
describe 'Merge request > User resolves outdated diff discussions', :js do
let(:project) { create(:project, :repository, :public) }
let(:merge_request) do
......
require 'spec_helper'
feature 'User squashes a merge request', :js do
describe 'User squashes a merge request', :js do
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:source_branch) { 'csv' }
......
require 'rails_helper'
feature 'Milestone' do
describe 'Milestone' do
let(:group) { create(:group, :public) }
let(:project) { create(:project, :public, namespace: group) }
let(:user) { create(:user) }
......@@ -11,8 +11,8 @@ feature 'Milestone' do
sign_in(user)
end
feature 'Create a milestone' do
scenario 'shows an informative message for a new milestone' do
describe 'Create a milestone' do
it 'shows an informative message for a new milestone' do
visit new_project_milestone_path(project)
page.within '.milestone-form' do
......@@ -28,8 +28,8 @@ feature 'Milestone' do
end
end
feature 'Open a milestone with closed issues' do
scenario 'shows an informative message' do
describe 'Open a milestone with closed issues' do
it 'shows an informative message' do
milestone = create(:milestone, project: project, title: 8.7)
create(:issue, title: "Bugfix1", project: project, milestone: milestone, state: "closed")
......@@ -39,8 +39,8 @@ feature 'Milestone' do
end
end
feature 'Open a project milestone with an existing title' do
scenario 'displays validation message when there is a project milestone with same title' do
describe 'Open a project milestone with an existing title' do
it 'displays validation message when there is a project milestone with same title' do
milestone = create(:milestone, project: project, title: 8.7)
visit new_project_milestone_path(project)
......@@ -52,7 +52,7 @@ feature 'Milestone' do
expect(find('.alert-danger')).to have_content('already being used for another group or project milestone.')
end
scenario 'displays validation message when there is a group milestone with same title' do
it 'displays validation message when there is a group milestone with same title' do
milestone = create(:milestone, project_id: nil, group: project.group, title: 8.7)
visit new_group_milestone_path(project.group)
......@@ -66,8 +66,8 @@ feature 'Milestone' do
end
end
feature 'Open a milestone', :js do
scenario 'shows total issue time spent correctly when no time has been logged' do
describe 'Open a milestone', :js do
it 'shows total issue time spent correctly when no time has been logged' do
milestone = create(:milestone, project: project, title: 8.7)
visit project_milestone_path(project, milestone)
......@@ -79,7 +79,7 @@ feature 'Milestone' do
end
end
scenario 'shows total issue time spent' do
it 'shows total issue time spent' do
milestone = create(:milestone, project: project, title: 8.7)
issue1 = create(:issue, project: project, milestone: milestone)
issue2 = create(:issue, project: project, milestone: milestone)
......@@ -98,8 +98,8 @@ feature 'Milestone' do
end
end
feature 'Deleting a milestone' do
scenario "The delete milestone button does not show for unauthorized users" do
describe 'Deleting a milestone' do
it "The delete milestone button does not show for unauthorized users" do
create(:milestone, project: project, title: 8.7)
sign_out(user)
......@@ -109,7 +109,7 @@ feature 'Milestone' do
end
end
feature 'deprecation popover', :js do
describe 'deprecation popover', :js do
it 'opens deprecation popover' do
milestone = create(:milestone, project: project)
......
require 'spec_helper'
feature 'OAuth Login', :js, :allow_forgery_protection do
describe 'OAuth Login', :js, :allow_forgery_protection do
include DeviseHelpers
def enter_code(code)
......
require 'spec_helper'
feature 'Member autocomplete', :js do
describe 'Member autocomplete', :js do
let(:project) { create(:project, :public) }
let(:user) { create(:user) }
let(:author) { create(:user) }
......
require 'spec_helper'
feature 'Password reset' do
describe 'Password reset' do
describe 'throttling' do
it 'sends reset instructions when not previously sent' do
user = create(:user)
......
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.
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