summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml36
-rw-r--r--.rubocop.yml2
-rw-r--r--CHANGELOG6
-rw-r--r--README.md2
-rw-r--r--VERSION2
-rw-r--r--app/assets/stylesheets/generic/header.scss28
-rw-r--r--app/assets/stylesheets/generic/sidebar.scss22
-rw-r--r--app/controllers/admin/identities_controller.rb41
-rw-r--r--app/controllers/admin/users_controller.rb13
-rw-r--r--app/controllers/registrations_controller.rb2
-rw-r--r--app/helpers/events_helper.rb2
-rw-r--r--app/models/identity.rb1
-rw-r--r--app/models/user.rb34
-rw-r--r--app/services/delete_user_service.rb6
-rw-r--r--app/views/admin/identities/_form.html.haml19
-rw-r--r--app/views/admin/identities/_identity.html.haml12
-rw-r--r--app/views/admin/identities/edit.html.haml6
-rw-r--r--app/views/admin/identities/index.html.haml13
-rw-r--r--app/views/admin/users/_head.html.haml23
-rw-r--r--app/views/admin/users/groups.html.haml19
-rw-r--r--app/views/admin/users/index.html.haml8
-rw-r--r--app/views/admin/users/keys.html.haml3
-rw-r--r--app/views/admin/users/projects.html.haml43
-rw-r--r--app/views/admin/users/show.html.haml386
-rw-r--r--app/views/layouts/header/_default.html.haml3
-rw-r--r--app/views/layouts/header/_public.html.haml3
-rw-r--r--config/routes.rb5
-rw-r--r--db/migrate/20150620233230_add_default_otp_required_for_login_value.rb11
-rw-r--r--db/schema.rb4
-rw-r--r--doc/README.md1
-rw-r--r--features/admin/users.feature20
-rw-r--r--features/project/merge_requests.feature12
-rw-r--r--features/project/source/browse_files.feature2
-rw-r--r--features/steps/admin/users.rb41
-rw-r--r--features/steps/dashboard/dashboard.rb2
-rw-r--r--features/steps/dashboard/event_filters.rb2
-rw-r--r--features/steps/explore/projects.rb1
-rw-r--r--features/steps/groups.rb6
-rw-r--r--features/steps/profile/profile.rb6
-rw-r--r--features/steps/project/merge_requests.rb22
-rw-r--r--features/steps/project/project.rb6
-rw-r--r--features/steps/project/snippets.rb6
-rw-r--r--features/steps/shared/admin.rb1
-rw-r--r--features/steps/shared/issuable.rb2
-rw-r--r--features/steps/shared/paths.rb45
-rw-r--r--features/steps/shared/user.rb6
-rw-r--r--features/steps/snippets/snippets.rb12
-rw-r--r--lib/api/users.rb2
-rw-r--r--lib/gitlab/backend/shell_env.rb4
-rw-r--r--lib/gitlab/o_auth/provider.rb19
-rw-r--r--lib/gitlab/satellite/action.rb6
-rw-r--r--lib/tasks/cache.rake2
-rw-r--r--lib/tasks/dev.rake4
-rw-r--r--lib/tasks/gitlab/backup.rake4
-rw-r--r--lib/tasks/gitlab/bulk_add_permission.rake8
-rw-r--r--lib/tasks/gitlab/check.rake10
-rw-r--r--lib/tasks/gitlab/cleanup.rake6
-rw-r--r--lib/tasks/gitlab/enable_automerge.rake2
-rw-r--r--lib/tasks/gitlab/generate_docs.rake2
-rw-r--r--lib/tasks/gitlab/import.rake2
-rw-r--r--lib/tasks/gitlab/info.rake2
-rw-r--r--lib/tasks/gitlab/setup.rake2
-rw-r--r--lib/tasks/gitlab/shell.rake6
-rw-r--r--lib/tasks/gitlab/test.rake2
-rw-r--r--lib/tasks/gitlab/web_hook.rake6
-rw-r--r--lib/tasks/migrate/add_limits_mysql.rake2
-rw-r--r--lib/tasks/migrate/migrate_iids.rake2
-rw-r--r--lib/tasks/setup.rake2
-rw-r--r--lib/tasks/sidekiq.rake6
-rw-r--r--lib/tasks/spec.rake8
-rw-r--r--lib/tasks/spinach.rake44
-rw-r--r--lib/tasks/test.rake4
-rw-r--r--spec/controllers/admin/users_controller_spec.rb24
-rw-r--r--spec/controllers/blob_controller_spec.rb12
-rw-r--r--spec/controllers/branches_controller_spec.rb4
-rw-r--r--spec/controllers/commit_controller_spec.rb52
-rw-r--r--spec/controllers/commits_controller_spec.rb7
-rw-r--r--spec/controllers/help_controller_spec.rb16
-rw-r--r--spec/controllers/import/bitbucket_controller_spec.rb21
-rw-r--r--spec/controllers/import/github_controller_spec.rb16
-rw-r--r--spec/controllers/import/gitlab_controller_spec.rb14
-rw-r--r--spec/controllers/profiles/preferences_controller_spec.rb2
-rw-r--r--spec/controllers/projects/compare_controller_spec.rb7
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb62
-rw-r--r--spec/controllers/projects/refs_controller_spec.rb17
-rw-r--r--spec/controllers/projects_controller_spec.rb16
-rw-r--r--spec/controllers/tree_controller_spec.rb12
-rw-r--r--spec/factories/merge_requests.rb2
-rw-r--r--spec/features/admin/admin_users_spec.rb40
-rw-r--r--spec/features/atom/users_spec.rb19
-rw-r--r--spec/features/issues_spec.rb6
-rw-r--r--spec/features/notes_on_merge_requests_spec.rb14
-rw-r--r--spec/features/search_spec.rb1
-rw-r--r--spec/helpers/application_helper_spec.rb12
-rw-r--r--spec/helpers/groups_helper.rb4
-rw-r--r--spec/helpers/oauth_helper_spec.rb2
-rw-r--r--spec/helpers/preferences_helper_spec.rb2
-rw-r--r--spec/helpers/tab_helper_spec.rb4
-rw-r--r--spec/helpers/tree_helper_spec.rb4
-rw-r--r--spec/lib/disable_email_interceptor_spec.rb4
-rw-r--r--spec/lib/extracts_path_spec.rb2
-rw-r--r--spec/lib/file_size_validator_spec.rb15
-rw-r--r--spec/lib/gitlab/asciidoc_spec.rb18
-rw-r--r--spec/lib/gitlab/backend/grack_auth_spec.rb12
-rw-r--r--spec/lib/gitlab/bitbucket_import/project_creator_spec.rb20
-rw-r--r--spec/lib/gitlab/github_import/project_creator_spec.rb22
-rw-r--r--spec/lib/gitlab/gitlab_import/project_creator_spec.rb22
-rw-r--r--spec/lib/gitlab/google_code_import/importer_spec.rb15
-rw-r--r--spec/lib/gitlab/google_code_import/project_creator_spec.rb12
-rw-r--r--spec/lib/gitlab/markdown/autolink_filter_spec.rb4
-rw-r--r--spec/lib/gitlab/markdown/label_reference_filter_spec.rb2
-rw-r--r--spec/lib/gitlab/o_auth/auth_hash_spec.rb18
-rw-r--r--spec/lib/gitlab/popen_spec.rb4
-rw-r--r--spec/lib/gitlab/satellite/action_spec.rb34
-rw-r--r--spec/lib/gitlab/satellite/merge_action_spec.rb24
-rw-r--r--spec/lib/gitlab/version_info_spec.rb1
-rw-r--r--spec/lib/votes_spec.rb7
-rw-r--r--spec/mailers/notify_spec.rb4
-rw-r--r--spec/models/commit_range_spec.rb4
-rw-r--r--spec/models/deploy_keys_project_spec.rb4
-rw-r--r--spec/models/hooks/service_hook_spec.rb10
-rw-r--r--spec/models/hooks/system_hook_spec.rb20
-rw-r--r--spec/models/hooks/web_hook_spec.rb10
-rw-r--r--spec/models/project_security_spec.rb14
-rw-r--r--spec/models/project_services/hipchat_service_spec.rb6
-rw-r--r--spec/models/project_services/slack_service/issue_message_spec.rb4
-rw-r--r--spec/models/project_services/slack_service/merge_message_spec.rb4
-rw-r--r--spec/models/project_services/slack_service/push_message_spec.rb20
-rw-r--r--spec/models/project_team_spec.rb1
-rw-r--r--spec/models/project_wiki_spec.rb2
-rw-r--r--spec/models/service_spec.rb17
-rw-r--r--spec/models/user_spec.rb74
-rw-r--r--spec/models/wiki_page_spec.rb8
-rw-r--r--spec/requests/api/doorkeeper_access_spec.rb10
-rw-r--r--spec/requests/api/files_spec.rb12
-rw-r--r--spec/requests/api/fork_spec.rb17
-rw-r--r--spec/requests/api/group_members_spec.rb18
-rw-r--r--spec/requests/api/groups_spec.rb6
-rw-r--r--spec/requests/api/merge_requests_spec.rb5
-rw-r--r--spec/requests/api/project_hooks_spec.rb11
-rw-r--r--spec/requests/api/project_members_spec.rb31
-rw-r--r--spec/requests/api/projects_spec.rb18
-rw-r--r--spec/requests/api/system_hooks_spec.rb12
-rw-r--r--spec/requests/api/users_spec.rb114
-rw-r--r--spec/routing/admin_routing_spec.rb1
-rw-r--r--spec/routing/routing_spec.rb1
-rw-r--r--spec/services/archive_repository_service_spec.rb5
-rw-r--r--spec/services/git_push_service_spec.rb18
-rw-r--r--spec/services/git_tag_push_service_spec.rb6
-rw-r--r--spec/services/issues/bulk_update_service_spec.rb20
-rw-r--r--spec/services/merge_requests/refresh_service_spec.rb6
-rw-r--r--spec/services/notes/create_service_spec.rb1
-rw-r--r--spec/services/projects/fork_service_spec.rb6
-rw-r--r--spec/services/projects/update_service_spec.rb2
-rw-r--r--spec/services/projects/upload_service_spec.rb4
-rw-r--r--spec/services/system_hooks_service_spec.rb12
-rw-r--r--spec/services/test_hook_service_spec.rb6
-rw-r--r--spec/support/db_cleaner.rb2
-rw-r--r--spec/support/matchers.rb10
-rw-r--r--spec/support/select2_helper.rb4
-rw-r--r--spec/tasks/gitlab/backup_rake_spec.rb4
-rw-r--r--spec/workers/repository_archive_worker_spec.rb1
162 files changed, 1357 insertions, 941 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4a9574be053..5524c9a7fcb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,35 +9,57 @@ before_script:
- touch log/test.log
- bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"
- bundle exec rake db:create RAILS_ENV=test
-Rspec:
+
+spec:feature:
+ script:
+ - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:feature
+ tags:
+ - ruby
+ - mysql
+
+spec:api:
+ script:
+ - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:api
+ tags:
+ - ruby
+ - mysql
+
+spec:other:
+ script:
+ - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:other
+ tags:
+ - ruby
+ - mysql
+
+spinach:project:
script:
- - RAILS_ENV=test SIMPLECOV=true bundle exec rake spec
+ - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:project
tags:
- ruby
- mysql
-Spinach:
+spinach:other:
script:
- - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach
+ - RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:other
tags:
- ruby
- mysql
-Jasmine:
+jasmine:ci:
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake jasmine:ci
tags:
- ruby
- mysql
-Rubocop:
+rubocop:
script:
- bundle exec rubocop
tags:
- ruby
- mysql
-Brakeman:
+brakeman:
script:
- bundle exec rake brakeman
tags:
diff --git a/.rubocop.yml b/.rubocop.yml
index 0cc729d3b08..ea4d365761e 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -993,8 +993,6 @@ Rails/Validation:
AllCops:
RunRailsCops: true
Exclude:
- - 'spec/**/*'
- - 'features/**/*'
- 'vendor/**/*'
- 'db/**/*'
- 'tmp/**/*'
diff --git a/CHANGELOG b/CHANGELOG
index 53258e7fd1a..f353a444fba 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,9 @@
Please view this file on the master branch, on stable branches it's out of date.
v 7.13.0 (unreleased)
+ - Fix invalid timestamps in RSS feeds (Rowan Wookey)
+ - Fix error when deleting a user who has projects (Stan Hu)
+ - Fix downloading of patches on public merge requests when user logged out (Stan Hu)
- Update maintenance documentation to explain no need to recompile asssets for omnibus installations (Stan Hu)
- Support commenting on diffs in side-by-side mode (Stan Hu)
- Fix JavaScript error when clicking on the comment button on a diff line that has a comment already (Stan Hu)
@@ -8,8 +11,11 @@ v 7.13.0 (unreleased)
- Rename "Design" profile settings page to "Preferences".
- Allow users to customize their default Dashboard page.
- Update ssl_ciphers in Nginx example to remove DHE settings. This will deny forward secrecy for Android 2.3.7, Java 6 and OpenSSL 0.9.8
+ - Admin can edit and remove user identities
- Convert CRLF newlines to LF when committing using the web editor.
- API request /projects/:project_id/merge_requests?state=closed will return only closed merge requests without merged one. If you need ones that were merged - use state=merged.
+ - Allow Administrators to filter the user list by those with or without Two-factor Authentication enabled.
+ - Show a user's Two-factor Authentication status in the administration area.
v 7.12.0 (unreleased)
- Fix Error 500 when one user attempts to access a personal, internal snippet (Stan Hu)
diff --git a/README.md b/README.md
index 85ea5c876af..52a483aa532 100644
--- a/README.md
+++ b/README.md
@@ -101,4 +101,4 @@ Please see [Getting help for GitLab](https://about.gitlab.com/getting-help/) on
## Is it awesome?
Thanks for [asking this question](https://twitter.com/supersloth/status/489462789384056832) Joshua.
-[These people](https://twitter.com/gitlab/favorites) seem to like it. \ No newline at end of file
+[These people](https://twitter.com/gitlab/favorites) seem to like it.
diff --git a/VERSION b/VERSION
index 5f0902c7c6a..5778e530e10 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-7.12.0.pre \ No newline at end of file
+7.13.0.pre
diff --git a/app/assets/stylesheets/generic/header.scss b/app/assets/stylesheets/generic/header.scss
index 26eb7ab1a12..8faae893a51 100644
--- a/app/assets/stylesheets/generic/header.scss
+++ b/app/assets/stylesheets/generic/header.scss
@@ -3,6 +3,8 @@
*
*/
header {
+ transition-duration: .3s;
+
&.navbar-empty {
background: #FFF;
border-bottom: 1px solid #EEE;
@@ -67,28 +69,34 @@ header {
float: left;
height: $header-height;
width: $sidebar_width;
+ transition-duration: .3s;
a {
float: left;
height: $header-height;
width: 100%;
padding: ($header-height - 36 ) / 2 8px;
-
- h3 {
- width: 158px;
- float: left;
- margin: 0;
- margin-left: 14px;
- font-size: 18px;
- line-height: $header-height - 14;
- font-weight: normal;
- }
+ overflow: hidden;
img {
width: 36px;
height: 36px;
float: left;
}
+
+ .gitlab-text-container {
+ width: 230px;
+
+ h3 {
+ width: 158px;
+ float: left;
+ margin: 0;
+ margin-left: 14px;
+ font-size: 18px;
+ line-height: $header-height - 14;
+ font-weight: normal;
+ }
+ }
}
&:hover {
diff --git a/app/assets/stylesheets/generic/sidebar.scss b/app/assets/stylesheets/generic/sidebar.scss
index 65e06e14c73..add0d1b04ad 100644
--- a/app/assets/stylesheets/generic/sidebar.scss
+++ b/app/assets/stylesheets/generic/sidebar.scss
@@ -4,12 +4,14 @@
top: 0;
left: 0;
height: 100%;
+ transition-duration: .3s;
}
}
.sidebar-wrapper {
z-index: 99;
background: $background-color;
+ transition-duration: .3s;
}
.content-wrapper {
@@ -19,8 +21,10 @@
}
.nav-sidebar {
+ transition-duration: .3s;
margin: 0;
list-style: none;
+ overflow: hidden;
&.navbar-collapse {
padding: 0px !important;
@@ -35,9 +39,6 @@
}
.nav-sidebar li {
-}
-
-.nav-sidebar li {
&.separate-item {
padding-top: 10px;
margin-top: 10px;
@@ -48,7 +49,7 @@
display: block;
text-decoration: none;
padding: 8px 15px;
- font-size: 13px;
+ font-size: 14px;
line-height: 20px;
padding-left: 16px;
@@ -79,6 +80,7 @@
@mixin expanded-sidebar {
padding-left: $sidebar_width;
+ transition-duration: .3s;
.sidebar-wrapper {
width: $sidebar_width;
@@ -89,6 +91,10 @@
top: $header-height;
width: $sidebar_width;
}
+
+ .nav-sidebar li a{
+ width: 230px;
+ }
}
.content-wrapper {
@@ -98,6 +104,7 @@
@mixin folded-sidebar {
padding-left: 50px;
+ transition-duration: .3s;
.sidebar-wrapper {
width: $sidebar_collapsed_width;
@@ -109,10 +116,10 @@
width: $sidebar_collapsed_width;
li a {
- padding-left: 18px;
font-size: 14px;
padding: 8px 15px;
- text-align: center;
+ text-align: left;
+ padding-left: 16px;
& > span {
@@ -144,6 +151,7 @@
height: 28px;
text-align: center;
line-height: 28px;
+ transition-duration: .3s;
}
.collapse-nav a:hover {
@@ -180,8 +188,10 @@
bottom: 0;
width: 100%;
padding: 10px;
+ overflow: hidden;
.username {
margin-top: 5px;
+ width: 230px;
}
}
diff --git a/app/controllers/admin/identities_controller.rb b/app/controllers/admin/identities_controller.rb
new file mode 100644
index 00000000000..d28614731f9
--- /dev/null
+++ b/app/controllers/admin/identities_controller.rb
@@ -0,0 +1,41 @@
+class Admin::IdentitiesController < Admin::ApplicationController
+ before_action :user
+ before_action :identity, except: :index
+
+ def index
+ @identities = @user.identities
+ end
+
+ def edit
+ end
+
+ def update
+ if @identity.update_attributes(identity_params)
+ redirect_to admin_user_identities_path(@user), notice: 'User identity was successfully updated.'
+ else
+ render :edit
+ end
+ end
+
+ def destroy
+ if @identity.destroy
+ redirect_to admin_user_identities_path(@user), notice: 'User identity was successfully removed.'
+ else
+ redirect_to admin_user_identities_path(@user), alert: 'Failed to remove user identity.'
+ end
+ end
+
+ protected
+
+ def user
+ @user ||= User.find_by!(username: params[:user_id])
+ end
+
+ def identity
+ @identity ||= user.identities.find(params[:id])
+ end
+
+ def identity_params
+ params.require(:identity).permit(:provider, :extern_uid)
+ end
+end
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 06d6d61e907..ec29c320654 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -1,5 +1,5 @@
class Admin::UsersController < Admin::ApplicationController
- before_action :user, only: [:show, :edit, :update, :destroy]
+ before_action :user, except: [:index, :new, :create]
def index
@users = User.order_name_asc.filter(params[:filter])
@@ -9,8 +9,17 @@ class Admin::UsersController < Admin::ApplicationController
end
def show
+ end
+
+ def projects
@personal_projects = user.personal_projects
@joined_projects = user.projects.joined(@user)
+ end
+
+ def groups
+ end
+
+ def keys
@keys = user.keys
end
@@ -86,7 +95,7 @@ class Admin::UsersController < Admin::ApplicationController
end
def destroy
- DeleteUserService.new.execute(user)
+ DeleteUserService.new(current_user).execute(user)
respond_to do |format|
format.html { redirect_to admin_users_path }
diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index 6ccc7934f2f..3b3dc86cb68 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -6,7 +6,7 @@ class RegistrationsController < Devise::RegistrationsController
end
def destroy
- DeleteUserService.new.execute(current_user)
+ DeleteUserService.new(current_user).execute(current_user)
respond_to do |format|
format.html { redirect_to new_user_session_path, notice: "Account successfully removed." }
diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb
index d440da050e1..8428281f8f6 100644
--- a/app/helpers/events_helper.rb
+++ b/app/helpers/events_helper.rb
@@ -189,7 +189,7 @@ module EventsHelper
xml.id "tag:#{request.host},#{event.created_at.strftime("%Y-%m-%d")}:#{event.id}"
xml.link href: event_link
xml.title truncate(event_title, length: 80)
- xml.updated event.created_at.strftime("%Y-%m-%dT%H:%M:%S%Z")
+ xml.updated event.created_at.xmlschema
xml.media :thumbnail, width: "40", height: "40", url: avatar_icon(event.author_email)
xml.author do |author|
xml.name event.author_name
diff --git a/app/models/identity.rb b/app/models/identity.rb
index 756d19adec7..ad60154be71 100644
--- a/app/models/identity.rb
+++ b/app/models/identity.rb
@@ -14,6 +14,7 @@ class Identity < ActiveRecord::Base
include Sortable
belongs_to :user
+ validates :provider, presence: true
validates :extern_uid, allow_blank: true, uniqueness: { scope: :provider }
validates :user_id, uniqueness: { scope: :provider }
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 29f43051464..22cd15bf971 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -50,12 +50,12 @@
# bitbucket_access_token :string(255)
# bitbucket_access_token_secret :string(255)
# location :string(255)
-# public_email :string(255) default(""), not null
# encrypted_otp_secret :string(255)
# encrypted_otp_secret_iv :string(255)
# encrypted_otp_secret_salt :string(255)
-# otp_required_for_login :boolean
+# otp_required_for_login :boolean default(FALSE), not null
# otp_backup_codes :text
+# public_email :string(255) default(""), not null
# dashboard :integer default(0)
#
@@ -80,6 +80,7 @@ class User < ActiveRecord::Base
devise :two_factor_authenticatable,
otp_secret_encryption_key: File.read(Rails.root.join('.secret')).chomp
+ alias_attribute :two_factor_enabled, :otp_required_for_login
devise :two_factor_backupable, otp_number_of_backup_codes: 10
serialize :otp_backup_codes, JSON
@@ -193,11 +194,13 @@ class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
# Scopes
- scope :admins, -> { where(admin: true) }
+ scope :admins, -> { where(admin: true) }
scope :blocked, -> { with_state(:blocked) }
scope :active, -> { with_state(:active) }
scope :not_in_project, ->(project) { project.users.present? ? where("id not in (:ids)", ids: project.users.map(&:id) ) : all }
scope :without_projects, -> { where('id NOT IN (SELECT DISTINCT(user_id) FROM members)') }
+ scope :with_two_factor, -> { where(two_factor_enabled: true) }
+ scope :without_two_factor, -> { where(two_factor_enabled: false) }
#
# Class methods
@@ -247,9 +250,16 @@ class User < ActiveRecord::Base
def filter(filter_name)
case filter_name
- when "admins"; self.admins
- when "blocked"; self.blocked
- when "wop"; self.without_projects
+ when 'admins'
+ self.admins
+ when 'blocked'
+ self.blocked
+ when 'two_factor_disabled'
+ self.without_two_factor
+ when 'two_factor_enabled'
+ self.with_two_factor
+ when 'wop'
+ self.without_projects
else
self.active
end
@@ -316,18 +326,6 @@ class User < ActiveRecord::Base
@reset_token
end
- # Check if the user has enabled Two-factor Authentication
- def two_factor_enabled?
- otp_required_for_login
- end
-
- # Set whether or not Two-factor Authentication is enabled for the current user
- #
- # setting - Boolean
- def two_factor_enabled=(setting)
- self.otp_required_for_login = setting
- end
-
def namespace_uniq
namespace_name = self.username
existing_namespace = Namespace.by_path(namespace_name)
diff --git a/app/services/delete_user_service.rb b/app/services/delete_user_service.rb
index 9017a63af3b..e622fd5ea5d 100644
--- a/app/services/delete_user_service.rb
+++ b/app/services/delete_user_service.rb
@@ -1,4 +1,10 @@
class DeleteUserService
+ attr_accessor :current_user
+
+ def initialize(current_user)
+ @current_user = current_user
+ end
+
def execute(user)
if user.solo_owned_groups.present?
user.errors[:base] << 'You must transfer ownership or delete groups before you can remove user'
diff --git a/app/views/admin/identities/_form.html.haml b/app/views/admin/identities/_form.html.haml
new file mode 100644
index 00000000000..b405aa6e8e3
--- /dev/null
+++ b/app/views/admin/identities/_form.html.haml
@@ -0,0 +1,19 @@
+= form_for [:admin, @user, @identity], html: { class: 'form-horizontal fieldset-form' } do |f|
+ - if @identity.errors.any?
+ #error_explanation
+ .alert.alert-danger
+ - @identity.errors.full_messages.each do |msg|
+ %p= msg
+
+ .form-group
+ = f.label :provider, class: 'control-label'
+ .col-sm-10
+ = f.select :provider, Gitlab::OAuth::Provider.names, { allow_blank: false }, class: 'form-control'
+ .form-group
+ = f.label :extern_uid, "Identifier", class: 'control-label'
+ .col-sm-10
+ = f.text_field :extern_uid, required: true, class: 'form-control', required: true
+
+ .form-actions
+ = f.submit 'Save changes', class: "btn btn-save"
+
diff --git a/app/views/admin/identities/_identity.html.haml b/app/views/admin/identities/_identity.html.haml
new file mode 100644
index 00000000000..671c4fbc677
--- /dev/null
+++ b/app/views/admin/identities/_identity.html.haml
@@ -0,0 +1,12 @@
+%tr
+ %td
+ = identity.provider
+ %td
+ = identity.extern_uid
+ %td
+ = link_to edit_admin_user_identity_path(@user, identity), class: 'btn btn-xs btn-grouped' do
+ Edit
+ = link_to [:admin, @user, identity], method: :delete,
+ class: 'btn btn-xs btn-danger',
+ data: { confirm: "Are you sure you want to remove this identity?" } do
+ Delete
diff --git a/app/views/admin/identities/edit.html.haml b/app/views/admin/identities/edit.html.haml
new file mode 100644
index 00000000000..515d46b0f29
--- /dev/null
+++ b/app/views/admin/identities/edit.html.haml
@@ -0,0 +1,6 @@
+- page_title "Edit", @identity.provider, "Identities", @user.name, "Users"
+%h3.page-title
+ Edit identity for #{@user.name}
+%hr
+
+= render 'form'
diff --git a/app/views/admin/identities/index.html.haml b/app/views/admin/identities/index.html.haml
new file mode 100644
index 00000000000..ae57e3adc4d
--- /dev/null
+++ b/app/views/admin/identities/index.html.haml
@@ -0,0 +1,13 @@
+- page_title "Identities", @user.name, "Users"
+= render 'admin/users/head'
+
+- if @identities.present?
+ %table.table
+ %thead
+ %tr
+ %th Provider
+ %th Identifier
+ %th
+ = render @identities
+- else
+ %h4 This user has no identities
diff --git a/app/views/admin/users/_head.html.haml b/app/views/admin/users/_head.html.haml
new file mode 100644
index 00000000000..9d5e934c8ba
--- /dev/null
+++ b/app/views/admin/users/_head.html.haml
@@ -0,0 +1,23 @@
+%h3.page-title
+ = @user.name
+ - if @user.blocked?
+ %span.cred (Blocked)
+ - if @user.admin
+ %span.cred (Admin)
+
+ .pull-right
+ = link_to edit_admin_user_path(@user), class: "btn btn-grouped" do
+ %i.fa.fa-pencil-square-o
+ Edit
+%hr
+%ul.nav.nav-tabs
+ = nav_link(path: 'users#show') do
+ = link_to "Account", admin_user_path(@user)
+ = nav_link(path: 'users#groups') do
+ = link_to "Groups", groups_admin_user_path(@user)
+ = nav_link(path: 'users#projects') do
+ = link_to "Projects", projects_admin_user_path(@user)
+ = nav_link(path: 'users#keys') do
+ = link_to "SSH keys", keys_admin_user_path(@user)
+ = nav_link(controller: :identities) do
+ = link_to "Identities", admin_user_identities_path(@user)
diff --git a/app/views/admin/users/groups.html.haml b/app/views/admin/users/groups.html.haml
new file mode 100644
index 00000000000..dbecb7bbfd6
--- /dev/null
+++ b/app/views/admin/users/groups.html.haml
@@ -0,0 +1,19 @@
+- page_title "Groups", @user.name, "Users"
+= render 'admin/users/head'
+
+- if @user.group_members.present?
+ .panel.panel-default
+ .panel-heading Groups:
+ %ul.well-list
+ - @user.group_members.each do |group_member|
+ - group = group_member.group
+ %li.group_member
+ %span{class: ("list-item-name" unless group_member.owner?)}
+ %strong= link_to group.name, admin_group_path(group)
+ .pull-right
+ %span.light= group_member.human_access
+ - unless group_member.owner?
+ = link_to group_group_member_path(group, group_member), data: { confirm: remove_user_from_group_message(group, group_member) }, method: :delete, remote: true, class: "btn-xs btn btn-remove", title: 'Remove user from group' do
+ %i.fa.fa-times.fa-inverse
+- else
+ .nothing-here-block This user has no groups.
diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml
index 45dee86b017..9c1bec7c84d 100644
--- a/app/views/admin/users/index.html.haml
+++ b/app/views/admin/users/index.html.haml
@@ -13,6 +13,14 @@
= link_to admin_users_path(filter: "admins") do
Admins
%small.pull-right= User.admins.count
+ %li.filter-two-factor-enabled{class: "#{'active' if params[:filter] == 'two_factor_enabled'}"}
+ = link_to admin_users_path(filter: 'two_factor_enabled') do
+ 2FA Enabled
+ %small.pull-right= User.with_two_factor.count
+ %li.filter-two-factor-disabled{class: "#{'active' if params[:filter] == 'two_factor_disabled'}"}
+ = link_to admin_users_path(filter: 'two_factor_disabled') do
+ 2FA Disabled
+ %small.pull-right= User.without_two_factor.count
%li{class: "#{'active' if params[:filter] == "blocked"}"}
= link_to admin_users_path(filter: "blocked") do
Blocked
diff --git a/app/views/admin/users/keys.html.haml b/app/views/admin/users/keys.html.haml
new file mode 100644
index 00000000000..07110717082
--- /dev/null
+++ b/app/views/admin/users/keys.html.haml
@@ -0,0 +1,3 @@
+- page_title "Keys", @user.name, "Users"
+= render 'admin/users/head'
+= render 'profiles/keys/key_table', admin: true
diff --git a/app/views/admin/users/projects.html.haml b/app/views/admin/users/projects.html.haml
new file mode 100644
index 00000000000..0d7a1a25a80
--- /dev/null
+++ b/app/views/admin/users/projects.html.haml
@@ -0,0 +1,43 @@
+- page_title "Projects", @user.name, "Users"
+= render 'admin/users/head'
+
+- if @user.groups.any?
+ .panel.panel-default
+ .panel-heading Group projects
+ %ul.well-list
+ - @user.groups.each do |group|
+ %li
+ %strong= group.name
+ &ndash; access to
+ #{pluralize(group.projects.count, 'project')}
+
+.row
+ .col-md-6
+ - if @personal_projects.present?
+ = render 'users/projects', projects: @personal_projects
+ - else
+ .nothing-here-block This user has no personal projects.
+
+
+ .col-md-6
+ .panel.panel-default
+ .panel-heading Joined projects (#{@joined_projects.count})
+ %ul.well-list
+ - @joined_projects.sort_by(&:name_with_namespace).each do |project|
+ - member = project.team.find_member(@user.id)
+ %li.project_member
+ .list-item-name
+ = link_to admin_namespace_project_path(project.namespace, project), class: dom_class(project) do
+ = project.name_with_namespace
+
+ - if member
+ .pull-right
+ - if member.owner?
+ %span.light Owner
+ - else
+ %span.light= member.human_access
+
+ - if member.respond_to? :project
+ = link_to namespace_project_project_member_path(project.namespace, project, member), data: { confirm: remove_from_project_team_message(project, member) }, remote: true, method: :delete, class: "btn-xs btn btn-remove", title: 'Remove user from project' do
+ %i.fa.fa-times
+
diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml
index 48cd22fc34b..2662b3569ec 100644
--- a/app/views/admin/users/show.html.haml
+++ b/app/views/admin/users/show.html.haml
@@ -1,240 +1,154 @@
- page_title @user.name, "Users"
-%h3.page-title
- User:
- = @user.name
- - if @user.blocked?
- %span.cred (Blocked)
- - if @user.admin
- %span.cred (Admin)
-
- .pull-right
- = link_to edit_admin_user_path(@user), class: "btn btn-grouped" do
- %i.fa.fa-pencil-square-o
- Edit
-%hr
-%ul.nav.nav-tabs
- %li.active
- %a{"data-toggle" => "tab", href: "#account"} Account
- %li
- %a{"data-toggle" => "tab", href: "#profile"} Profile
- %li
- %a{"data-toggle" => "tab", href: "#groups"} Groups
- %li
- %a{"data-toggle" => "tab", href: "#projects"} Projects
- %li
- %a{"data-toggle" => "tab", href: "#ssh-keys"} SSH keys
-
-.tab-content
- #account.tab-pane.active
- .row
- .col-md-6
- .panel.panel-default
- .panel-heading
- Account:
- %ul.well-list
- %li
- %span.light Name:
- %strong= @user.name
- %li
- %span.light Username:
- %strong
- = @user.username
- %li
- %span.light Email:
- %strong
- = mail_to @user.email
- - @user.emails.each do |email|
- %li
- %span.light Secondary email:
- %strong= email.email
- = link_to remove_email_admin_user_path(@user, email), data: { confirm: "Are you sure you want to remove #{email.email}?" }, method: :delete, class: "btn-xs btn btn-remove pull-right", title: 'Remove secondary email', id: "remove_email_#{email.id}" do
- %i.fa.fa-times
-
- %li.two-factor-status
- %span.light Two-factor Authentication:
- %strong{class: @user.two_factor_enabled? ? 'cgreen' : 'cred'}
- - if @user.two_factor_enabled?
- Enabled
- - else
- Disabled
-
- %li
- %span.light Can create groups:
- %strong
- = @user.can_create_group ? "Yes" : "No"
- %li
- %span.light Personal projects limit:
- %strong
- = @user.projects_limit
- %li
- %span.light Member since:
- %strong
- = @user.created_at.stamp("Nov 12, 2031")
- - if @user.confirmed_at
- %li
- %span.light Confirmed at:
- %strong
- = @user.confirmed_at.stamp("Nov 12, 2031")
+= render 'admin/users/head'
+
+.row
+ .col-md-6
+ .panel.panel-default
+ .panel-heading
+ = @user.name
+ %ul.well-list
+ %li
+ = image_tag avatar_icon(@user.email, 60), class: "avatar s60"
+ %li
+ %span.light Profile page:
+ %strong
+ = link_to user_path(@user) do
+ = @user.username
+ = render 'users/profile', user: @user
+
+ .panel.panel-default
+ .panel-heading
+ Account:
+ %ul.well-list
+ %li
+ %span.light Name:
+ %strong= @user.name
+ %li
+ %span.light Username:
+ %strong
+ = @user.username
+ %li
+ %span.light Email:
+ %strong
+ = mail_to @user.email
+ - @user.emails.each do |email|
+ %li
+ %span.light Secondary email:
+ %strong= email.email
+ = link_to remove_email_admin_user_path(@user, email), data: { confirm: "Are you sure you want to remove #{email.email}?" }, method: :delete, class: "btn-xs btn btn-remove pull-right", title: 'Remove secondary email', id: "remove_email_#{email.id}" do
+ %i.fa.fa-times
+
+ %li.two-factor-status
+ %span.light Two-factor Authentication:
+ %strong{class: @user.two_factor_enabled? ? 'cgreen' : 'cred'}
+ - if @user.two_factor_enabled?
+ Enabled
- else
- %li
- %span.light Confirmed:
- %strong.cred
- No
-
- %li
- %span.light Current sign-in at:
- %strong
- - if @user.current_sign_in_at
- = @user.current_sign_in_at.stamp("Nov 12, 2031")
- - else
- never
-
- %li
- %span.light Last sign-in at:
- %strong
- - if @user.last_sign_in_at
- = @user.last_sign_in_at.stamp("Nov 12, 2031")
- - else
- never
-
- %li
- %span.light Sign-in count:
- %strong
- = @user.sign_in_count
-
- - if @user.ldap_user?
- %li
- %span.light LDAP uid:
- %strong
- = @user.ldap_identity.extern_uid
-
- - if @user.created_by
- %li
- %span.light Created by:
- %strong
- = link_to @user.created_by.name, [:admin, @user.created_by]
-
- .col-md-6
- - unless @user == current_user
- - if @user.blocked?
- .panel.panel-info
- .panel-heading
- This user is blocked
- .panel-body
- %p Blocking user has the following effects:
- %ul
- %li User will not be able to login
- %li User will not be able to access git repositories
- %li Personal projects will be left
- %li Owned groups will be left
- %br
- = link_to 'Unblock user', unblock_admin_user_path(@user), method: :put, class: "btn btn-info", data: { confirm: 'Are you sure?' }
- - else
- .panel.panel-warning
- .panel-heading
- Block this user
- .panel-body
- %p Blocking user has the following effects:
- %ul
- %li User will not be able to login
- %li User will not be able to access git repositories
- %li User will be removed from joined projects and groups
- %li Personal projects will be left
- %li Owned groups will be left
- %br
- = link_to 'Block user', block_admin_user_path(@user), data: { confirm: 'USER WILL BE BLOCKED! Are you sure?' }, method: :put, class: "btn btn-warning"
-
- .panel.panel-danger
- .panel-heading
- Remove user
- .panel-body
- - if @user.can_be_removed?
- %p Deleting a user has the following effects:
- %ul
- %li All user content like authored issues, snippets, comments will be removed
- - rp = @user.personal_projects.count
- - unless rp.zero?
- %li #{pluralize rp, 'personal project'} will be removed and cannot be restored
- %br
- = link_to 'Remove user', [:admin, @user], data: { confirm: "USER #{@user.name} WILL BE REMOVED! Are you sure?" }, method: :delete, class: "btn btn-remove"
- - else
- - if @user.solo_owned_groups.present?
- %p
- This user is currently an owner in these groups:
- %strong #{@user.solo_owned_groups.map(&:name).join(', ')}
- %p
- You must transfer ownership or delete these groups before you can delete this user.
+ Disabled
+
+ %li
+ %span.light Can create groups:
+ %strong
+ = @user.can_create_group ? "Yes" : "No"
+ %li
+ %span.light Personal projects limit:
+ %strong
+ = @user.projects_limit
+ %li
+ %span.light Member since:
+ %strong
+ = @user.created_at.stamp("Nov 12, 2031")
+ - if @user.confirmed_at
+ %li
+ %span.light Confirmed at:
+ %strong
+ = @user.confirmed_at.stamp("Nov 12, 2031")
+ - else
+ %li
+ %span.light Confirmed:
+ %strong.cred
+ No
+
+ %li
+ %span.light Current sign-in at:
+ %strong
+ - if @user.current_sign_in_at
+ = @user.current_sign_in_at.stamp("Nov 12, 2031")
+ - else
+ never
- #profile.tab-pane
- .row
- .col-md-6
- .panel.panel-default
+ %li
+ %span.light Last sign-in at:
+ %strong
+ - if @user.last_sign_in_at
+ = @user.last_sign_in_at.stamp("Nov 12, 2031")
+ - else
+ never
+
+ %li
+ %span.light Sign-in count:
+ %strong
+ = @user.sign_in_count
+
+ - if @user.ldap_user?
+ %li
+ %span.light LDAP uid:
+ %strong
+ = @user.ldap_identity.extern_uid
+
+ - if @user.created_by
+ %li
+ %span.light Created by:
+ %strong
+ = link_to @user.created_by.name, [:admin, @user.created_by]
+
+ .col-md-6
+ - unless @user == current_user
+ - if @user.blocked?
+ .panel.panel-info
.panel-heading
- = @user.name
- %ul.well-list
- %li
- = image_tag avatar_icon(@user.email, 60), class: "avatar s60"
- %li
- %span.light Profile page:
- %strong
- = link_to user_path(@user) do
- = @user.username
- .col-md-6
- = render 'users/profile', user: @user
-
- #groups.tab-pane
- - if @user.group_members.present?
- .panel.panel-default
- .panel-heading Groups:
- %ul.well-list
- - @user.group_members.each do |group_member|
- - group = group_member.group
- %li.group_member
- %span{class: ("list-item-name" unless group_member.owner?)}
- %strong= link_to group.name, admin_group_path(group)
- .pull-right
- %span.light= group_member.human_access
- - unless group_member.owner?
- = link_to group_group_member_path(group, group_member), data: { confirm: remove_user_from_group_message(group, group_member) }, method: :delete, remote: true, class: "btn-xs btn btn-remove", title: 'Remove user from group' do
- %i.fa.fa-times.fa-inverse
- - else
- .nothing-here-block This user has no groups.
-
- #projects.tab-pane
- - if @user.groups.any?
- .panel.panel-default
- .panel-heading Group projects
- %ul.well-list
- - @user.groups.each do |group|
- %li
- %strong= group.name
- &ndash; access to
- #{pluralize(group.projects.count, 'project')}
-
- .row
- .col-md-6
- = render 'users/projects', projects: @personal_projects
-
- .col-md-6
- .panel.panel-default
- .panel-heading Joined projects (#{@joined_projects.count})
- %ul.well-list
- - @joined_projects.sort_by(&:name_with_namespace).each do |project|
- - member = project.team.find_member(@user.id)
- %li.project_member
- .list-item-name
- = link_to admin_namespace_project_path(project.namespace, project), class: dom_class(project) do
- = project.name_with_namespace
-
- - if member
- .pull-right
- - if member.owner?
- %span.light Owner
- - else
- %span.light= member.human_access
-
- - if member.respond_to? :project
- = link_to namespace_project_project_member_path(project.namespace, project, member), data: { confirm: remove_from_project_team_message(project, member) }, remote: true, method: :delete, class: "btn-xs btn btn-remove", title: 'Remove user from project' do
- %i.fa.fa-times
- #ssh-keys.tab-pane
- = render 'profiles/keys/key_table', admin: true
+ This user is blocked
+ .panel-body
+ %p Blocking user has the following effects:
+ %ul
+ %li User will not be able to login
+ %li User will not be able to access git repositories
+ %li Personal projects will be left
+ %li Owned groups will be left
+ %br
+ = link_to 'Unblock user', unblock_admin_user_path(@user), method: :put, class: "btn btn-info", data: { confirm: 'Are you sure?' }
+ - else
+ .panel.panel-warning
+ .panel-heading
+ Block this user
+ .panel-body
+ %p Blocking user has the following effects:
+ %ul
+ %li User will not be able to login
+ %li User will not be able to access git repositories
+ %li User will be removed from joined projects and groups
+ %li Personal projects will be left
+ %li Owned groups will be left
+ %br
+ = link_to 'Block user', block_admin_user_path(@user), data: { confirm: 'USER WILL BE BLOCKED! Are you sure?' }, method: :put, class: "btn btn-warning"
+
+ .panel.panel-danger
+ .panel-heading
+ Remove user
+ .panel-body
+ - if @user.can_be_removed?
+ %p Deleting a user has the following effects:
+ %ul
+ %li All user content like authored issues, snippets, comments will be removed
+ - rp = @user.personal_projects.count
+ - unless rp.zero?
+ %li #{pluralize rp, 'personal project'} will be removed and cannot be restored
+ %br
+ = link_to 'Remove user', [:admin, @user], data: { confirm: "USER #{@user.name} WILL BE REMOVED! Are you sure?" }, method: :delete, class: "btn btn-remove"
+ - else
+ - if @user.solo_owned_groups.present?
+ %p
+ This user is currently an owner in these groups:
+ %strong #{@user.solo_owned_groups.map(&:name).join(', ')}
+ %p
+ You must transfer ownership or delete these groups before you can delete this user.
diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml
index 1403b86f377..b3cd7b0e37b 100644
--- a/app/views/layouts/header/_default.html.haml
+++ b/app/views/layouts/header/_default.html.haml
@@ -3,7 +3,8 @@
.header-logo
= link_to root_path, class: 'home', title: 'Dashboard', id: 'js-shortcuts-home', data: {toggle: 'tooltip', placement: 'bottom'} do
= brand_header_logo
- %h3 GitLab
+ .gitlab-text-container
+ %h3 GitLab
.header-content
%button.navbar-toggle{type: 'button'}
%span.sr-only Toggle navigation
diff --git a/app/views/layouts/header/_public.html.haml b/app/views/layouts/header/_public.html.haml
index 2c5884a5b6d..15c2e292be3 100644
--- a/app/views/layouts/header/_public.html.haml
+++ b/app/views/layouts/header/_public.html.haml
@@ -3,7 +3,8 @@
.header-logo
= link_to explore_root_path, class: "home" do
= brand_header_logo
- %h3 GitLab
+ .gitlab-text-container
+ %h3 GitLab
.header-content
- unless current_controller?('sessions')
.pull-right
diff --git a/config/routes.rb b/config/routes.rb
index d60bc796fdb..33f55dde476 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -149,7 +149,12 @@ Gitlab::Application.routes.draw do
namespace :admin do
resources :users, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ } do
resources :keys, only: [:show, :destroy]
+ resources :identities, only: [:index, :edit, :update, :destroy]
+
member do
+ get :projects
+ get :keys
+ get :groups
put :team_update
put :block
put :unblock
diff --git a/db/migrate/20150620233230_add_default_otp_required_for_login_value.rb b/db/migrate/20150620233230_add_default_otp_required_for_login_value.rb
new file mode 100644
index 00000000000..8eed8678b2f
--- /dev/null
+++ b/db/migrate/20150620233230_add_default_otp_required_for_login_value.rb
@@ -0,0 +1,11 @@
+class AddDefaultOtpRequiredForLoginValue < ActiveRecord::Migration
+ def up
+ execute %q{UPDATE users SET otp_required_for_login = FALSE WHERE otp_required_for_login IS NULL}
+
+ change_column :users, :otp_required_for_login, :boolean, default: false, null: false
+ end
+
+ def down
+ change_column :users, :otp_required_for_login, :boolean, null: true
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index f063a4868b1..3a5af6a76d4 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20150610065936) do
+ActiveRecord::Schema.define(version: 20150620233230) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -499,7 +499,7 @@ ActiveRecord::Schema.define(version: 20150610065936) do
t.string "encrypted_otp_secret"
t.string "encrypted_otp_secret_iv"
t.string "encrypted_otp_secret_salt"
- t.boolean "otp_required_for_login"
+ t.boolean "otp_required_for_login", default: false, null: false
t.text "otp_backup_codes"
t.string "public_email", default: "", null: false
t.integer "dashboard", default: 0
diff --git a/doc/README.md b/doc/README.md
index 28459613252..424b9e9a47e 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -4,6 +4,7 @@
- [API](api/README.md) Automate GitLab via a simple and powerful API.
- [GitLab as OAuth2 authentication service provider](integration/oauth_provider.md). It allows you to login to other applications from GitLab.
+- [GitLab Basics](gitlab_basics/README.md) Find step by step how to start working on your commandline and on GitLab.
- [Importing to GitLab](workflow/importing/README.md).
- [Markdown](markdown/markdown.md) GitLab's advanced formatting system.
- [Permissions](permissions/permissions.md) Learn what each role in a project (guest/reporter/developer/master/owner) can do.
diff --git a/features/admin/users.feature b/features/admin/users.feature
index 1a8720dd77e..6755645778a 100644
--- a/features/admin/users.feature
+++ b/features/admin/users.feature
@@ -28,7 +28,7 @@ Feature: Admin Users
When I submit modified user
Then I see user attributes changed
-@javascript
+ @javascript
Scenario: Remove users secondary email
Given I visit admin users page
And I view the user with secondary email
@@ -40,8 +40,26 @@ Feature: Admin Users
Given user "Pete" with ssh keys
And I visit admin users page
And click on user "Pete"
+ And click on ssh keys tab
Then I should see key list
And I click on the key title
Then I should see key details
And I click on remove key
Then I should see the key removed
+
+ Scenario: Show user identities
+ Given user "Pete" with twitter account
+ And I visit "Pete" identities page in admin
+ Then I should see twitter details
+
+ Scenario: Update user identities
+ Given user "Pete" with twitter account
+ And I visit "Pete" identities page in admin
+ And I modify twitter identity
+ Then I should see twitter details updated
+
+ Scenario: Remove user identities
+ Given user "Pete" with twitter account
+ And I visit "Pete" identities page in admin
+ And I remove twitter identity
+ Then I should not see twitter details
diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature
index d043badbc46..35ffa9fc6e1 100644
--- a/features/project/merge_requests.feature
+++ b/features/project/merge_requests.feature
@@ -41,6 +41,18 @@ Feature: Project Merge Requests
And I submit new merge request "Wiki Feature"
Then I should see merge request "Wiki Feature"
+ Scenario: I download a diff on a public merge request
+ Given public project "Community"
+ And "John Doe" owns public project "Community"
+ And project "Community" has "Bug CO-01" open merge request with diffs inside
+ Given I logout directly
+ And I visit merge request page "Bug CO-01"
+ And I click on "Email Patches"
+ Then I should see a patch diff
+ And I visit merge request page "Bug CO-01"
+ And I click on "Plain Diff"
+ Then I should see a patch diff
+
@javascript
Scenario: I comment on a merge request
Given I visit merge request page "Bug NS-04"
diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature
index 90b966dd645..af68cb96ed9 100644
--- a/features/project/source/browse_files.feature
+++ b/features/project/source/browse_files.feature
@@ -45,7 +45,7 @@ Feature: Project Source Browse Files
Then I am redirected to the new file on new branch
And I should see its new content
- @javascript @tricky
+ @javascript
Scenario: I can create file in empty repo
Given I own an empty project
And I visit my empty project page
diff --git a/features/steps/admin/users.rb b/features/steps/admin/users.rb
index 34a3ed9f615..6c4b91586d6 100644
--- a/features/steps/admin/users.rb
+++ b/features/steps/admin/users.rb
@@ -114,4 +114,45 @@ class Spinach::Features::AdminUsers < Spinach::FeatureSteps
step 'I should see the key removed' do
expect(page).not_to have_content 'ssh-rsa Key2'
end
+
+ step 'user "Pete" with twitter account' do
+ @user = create(:user, name: 'Pete')
+ @user.identities.create!(extern_uid: '123456', provider: 'twitter')
+ end
+
+ step 'I visit "Pete" identities page in admin' do
+ allow(Gitlab::OAuth::Provider).to receive(:names).and_return(%w(twitter twitter_updated))
+ visit admin_user_identities_path(@user)
+ end
+
+ step 'I should see twitter details' do
+ expect(page).to have_content 'Pete'
+ expect(page).to have_content 'twitter'
+ end
+
+ step 'I modify twitter identity' do
+ find('.table').find(:link, 'Edit').click
+ fill_in 'identity_extern_uid', with: '654321'
+ select 'twitter_updated', from: 'identity_provider'
+ click_button 'Save changes'
+ end
+
+ step 'I should see twitter details updated' do
+ expect(page).to have_content 'Pete'
+ expect(page).to have_content 'twitter_updated'
+ expect(page).to have_content '654321'
+ end
+
+ step 'I remove twitter identity' do
+ click_link 'Delete'
+ end
+
+ step 'I should not see twitter details' do
+ expect(page).to have_content 'Pete'
+ expect(page).to_not have_content 'twitter'
+ end
+
+ step 'click on ssh keys tab' do
+ click_link 'SSH keys'
+ end
end
diff --git a/features/steps/dashboard/dashboard.rb b/features/steps/dashboard/dashboard.rb
index 945bf35ff27..cb3a80cac29 100644
--- a/features/steps/dashboard/dashboard.rb
+++ b/features/steps/dashboard/dashboard.rb
@@ -28,7 +28,7 @@ class Spinach::Features::Dashboard < Spinach::FeatureSteps
end
step 'user with name "John Doe" joined project "Shop"' do
- user = create(:user, {name: "John Doe"})
+ user = create(:user, { name: "John Doe" })
project.team << [user, :master]
Event.create(
project: project,
diff --git a/features/steps/dashboard/event_filters.rb b/features/steps/dashboard/event_filters.rb
index 834afa439a0..726b37cfde5 100644
--- a/features/steps/dashboard/event_filters.rb
+++ b/features/steps/dashboard/event_filters.rb
@@ -52,7 +52,7 @@ class Spinach::Features::EventFilters < Spinach::FeatureSteps
end
step 'this project has new member event' do
- user = create(:user, {name: "John Doe"})
+ user = create(:user, { name: "John Doe" })
Event.create(
project: @project,
author_id: user.id,
diff --git a/features/steps/explore/projects.rb b/features/steps/explore/projects.rb
index 49c2f6a1253..8b498e7b4a6 100644
--- a/features/steps/explore/projects.rb
+++ b/features/steps/explore/projects.rb
@@ -145,4 +145,3 @@ class Spinach::Features::ExploreProjects < Spinach::FeatureSteps
@public_merge_request ||= MergeRequest.find_by!(title: 'Bug fix for public project')
end
end
-
diff --git a/features/steps/groups.rb b/features/steps/groups.rb
index 6221163ac54..2812c5473e9 100644
--- a/features/steps/groups.rb
+++ b/features/steps/groups.rb
@@ -128,14 +128,14 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
end
step 'I change group "Owned" avatar' do
- attach_file(:group_avatar, File.join(Rails.root, 'public', 'gitlab_logo.png'))
+ attach_file(:group_avatar, File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif'))
click_button "Save group"
Group.find_by(name: "Owned").reload
end
step 'I should see new group "Owned" avatar' do
expect(Group.find_by(name: "Owned").avatar).to be_instance_of AvatarUploader
- expect(Group.find_by(name: "Owned").avatar.url).to eq "/uploads/group/avatar/#{ Group.find_by(name:"Owned").id }/gitlab_logo.png"
+ expect(Group.find_by(name: "Owned").avatar.url).to eq "/uploads/group/avatar/#{ Group.find_by(name:"Owned").id }/banana_sample.gif"
end
step 'I should see the "Remove avatar" button' do
@@ -143,7 +143,7 @@ class Spinach::Features::Groups < Spinach::FeatureSteps
end
step 'I have group "Owned" avatar' do
- attach_file(:group_avatar, File.join(Rails.root, 'public', 'gitlab_logo.png'))
+ attach_file(:group_avatar, File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif'))
click_button "Save group"
Group.find_by(name: "Owned").reload
end
diff --git a/features/steps/profile/profile.rb b/features/steps/profile/profile.rb
index 3f19bed8a0b..11e1163c352 100644
--- a/features/steps/profile/profile.rb
+++ b/features/steps/profile/profile.rb
@@ -27,14 +27,14 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
end
step 'I change my avatar' do
- attach_file(:user_avatar, File.join(Rails.root, 'public', 'gitlab_logo.png'))
+ attach_file(:user_avatar, File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif'))
click_button "Save changes"
@user.reload
end
step 'I should see new avatar' do
expect(@user.avatar).to be_instance_of AvatarUploader
- expect(@user.avatar.url).to eq "/uploads/user/avatar/#{ @user.id }/gitlab_logo.png"
+ expect(@user.avatar.url).to eq "/uploads/user/avatar/#{ @user.id }/banana_sample.gif"
end
step 'I should see the "Remove avatar" button' do
@@ -42,7 +42,7 @@ class Spinach::Features::Profile < Spinach::FeatureSteps
end
step 'I have an avatar' do
- attach_file(:user_avatar, File.join(Rails.root, 'public', 'gitlab_logo.png'))
+ attach_file(:user_avatar, File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif'))
click_button "Save changes"
@user.reload
end
diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb
index 5684d661527..f11edb659d5 100644
--- a/features/steps/project/merge_requests.rb
+++ b/features/steps/project/merge_requests.rb
@@ -6,6 +6,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
include SharedPaths
include SharedMarkdown
include SharedDiffNote
+ include SharedUser
step 'I click link "New Merge Request"' do
click_link "New Merge Request"
@@ -108,6 +109,15 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
author: project.users.first)
end
+ step 'project "Community" has "Bug CO-01" open merge request with diffs inside' do
+ project = Project.find_by(name: "Community")
+ create(:merge_request_with_diffs,
+ title: "Bug CO-01",
+ source_project: project,
+ target_project: project,
+ author: project.users.first)
+ end
+
step 'I switch to the diff tab' do
visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request)
end
@@ -326,6 +336,18 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
expect(page).to have_content 'Target branch changed from master to feature'
end
+ step 'I click on "Email Patches"' do
+ click_link "Email Patches"
+ end
+
+ step 'I click on "Plain Diff"' do
+ click_link "Plain Diff"
+ end
+
+ step 'I should see a patch diff' do
+ expect(page).to have_content('diff --git')
+ end
+
def merge_request
@merge_request ||= MergeRequest.find_by!(title: "Bug NS-05")
end
diff --git a/features/steps/project/project.rb b/features/steps/project/project.rb
index e4465a1c3b7..b4a0ba1e27f 100644
--- a/features/steps/project/project.rb
+++ b/features/steps/project/project.rb
@@ -28,7 +28,7 @@ class Spinach::Features::Project < Spinach::FeatureSteps
step 'I change the project avatar' do
attach_file(
:project_avatar,
- File.join(Rails.root, 'public', 'gitlab_logo.png')
+ File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif')
)
click_button 'Save changes'
@project.reload
@@ -37,7 +37,7 @@ class Spinach::Features::Project < Spinach::FeatureSteps
step 'I should see new project avatar' do
expect(@project.avatar).to be_instance_of AvatarUploader
url = @project.avatar.url
- expect(url).to eq "/uploads/project/avatar/#{ @project.id }/gitlab_logo.png"
+ expect(url).to eq "/uploads/project/avatar/#{ @project.id }/banana_sample.gif"
end
step 'I should see the "Remove avatar" button' do
@@ -47,7 +47,7 @@ class Spinach::Features::Project < Spinach::FeatureSteps
step 'I have an project avatar' do
attach_file(
:project_avatar,
- File.join(Rails.root, 'public', 'gitlab_logo.png')
+ File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif')
)
click_button 'Save changes'
@project.reload
diff --git a/features/steps/project/snippets.rb b/features/steps/project/snippets.rb
index eedb4e1b74a..db8ad08bb9e 100644
--- a/features/steps/project/snippets.rb
+++ b/features/steps/project/snippets.rb
@@ -52,8 +52,8 @@ class Spinach::Features::ProjectSnippets < Spinach::FeatureSteps
end
step 'I submit new snippet "Snippet three"' do
- fill_in "project_snippet_title", :with => "Snippet three"
- fill_in "project_snippet_file_name", :with => "my_snippet.rb"
+ fill_in "project_snippet_title", with: "Snippet three"
+ fill_in "project_snippet_file_name", with: "my_snippet.rb"
page.within('.file-editor') do
find(:xpath, "//input[@id='project_snippet_content']").set 'Content of snippet three'
end
@@ -66,7 +66,7 @@ class Spinach::Features::ProjectSnippets < Spinach::FeatureSteps
end
step 'I submit new title "Snippet new title"' do
- fill_in "project_snippet_title", :with => "Snippet new title"
+ fill_in "project_snippet_title", with: "Snippet new title"
click_button "Save"
end
diff --git a/features/steps/shared/admin.rb b/features/steps/shared/admin.rb
index b6072995677..fbaa408226e 100644
--- a/features/steps/shared/admin.rb
+++ b/features/steps/shared/admin.rb
@@ -9,4 +9,3 @@ module SharedAdmin
2.times { create(:user) }
end
end
-
diff --git a/features/steps/shared/issuable.rb b/features/steps/shared/issuable.rb
index 41db2612f26..e6d1b8b8efc 100644
--- a/features/steps/shared/issuable.rb
+++ b/features/steps/shared/issuable.rb
@@ -2,7 +2,7 @@ module SharedIssuable
include Spinach::DSL
def edit_issuable
- find(:css, '.issuable-edit').click
+ find(:css, '.issuable-edit').click
end
step 'I click link "Edit" for the merge request' do
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index 3bd0d60281c..4cc01443c8b 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -20,43 +20,43 @@ module SharedPaths
# ----------------------------------------
step 'I visit group "Owned" page' do
- visit group_path(Group.find_by(name:"Owned"))
+ visit group_path(Group.find_by(name: "Owned"))
end
step 'I visit group "Owned" issues page' do
- visit issues_group_path(Group.find_by(name:"Owned"))
+ visit issues_group_path(Group.find_by(name: "Owned"))
end
step 'I visit group "Owned" merge requests page' do
- visit merge_requests_group_path(Group.find_by(name:"Owned"))
+ visit merge_requests_group_path(Group.find_by(name: "Owned"))
end
step 'I visit group "Owned" members page' do
- visit group_group_members_path(Group.find_by(name:"Owned"))
+ visit group_group_members_path(Group.find_by(name: "Owned"))
end
step 'I visit group "Owned" settings page' do
- visit edit_group_path(Group.find_by(name:"Owned"))
+ visit edit_group_path(Group.find_by(name: "Owned"))
end
step 'I visit group "Guest" page' do
- visit group_path(Group.find_by(name:"Guest"))
+ visit group_path(Group.find_by(name: "Guest"))
end
step 'I visit group "Guest" issues page' do
- visit issues_group_path(Group.find_by(name:"Guest"))
+ visit issues_group_path(Group.find_by(name: "Guest"))
end
step 'I visit group "Guest" merge requests page' do
- visit merge_requests_group_path(Group.find_by(name:"Guest"))
+ visit merge_requests_group_path(Group.find_by(name: "Guest"))
end
step 'I visit group "Guest" members page' do
- visit group_group_members_path(Group.find_by(name:"Guest"))
+ visit group_group_members_path(Group.find_by(name: "Guest"))
end
step 'I visit group "Guest" settings page' do
- visit edit_group_path(Group.find_by(name:"Guest"))
+ visit edit_group_path(Group.find_by(name: "Guest"))
end
# ----------------------------------------
@@ -201,11 +201,11 @@ module SharedPaths
end
step "I visit my project's commits page" do
- visit namespace_project_commits_path(@project.namespace, @project, root_ref, {limit: 5})
+ visit namespace_project_commits_path(@project.namespace, @project, root_ref, { limit: 5 })
end
step "I visit my project's commits page for a specific path" do
- visit namespace_project_commits_path(@project.namespace, @project, root_ref + "/app/models/project.rb", {limit: 5})
+ visit namespace_project_commits_path(@project.namespace, @project, root_ref + "/app/models/project.rb", { limit: 5 })
end
step 'I visit my project\'s commits stats page' do
@@ -272,11 +272,11 @@ module SharedPaths
end
step 'I visit project commits page' do
- visit namespace_project_commits_path(@project.namespace, @project, root_ref, {limit: 5})
+ visit namespace_project_commits_path(@project.namespace, @project, root_ref, { limit: 5 })
end
step 'I visit project commits page for stable branch' do
- visit namespace_project_commits_path(@project.namespace, @project, 'stable', {limit: 5})
+ visit namespace_project_commits_path(@project.namespace, @project, 'stable', { limit: 5 })
end
step 'I visit project source page' do
@@ -357,6 +357,11 @@ module SharedPaths
visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
end
+ step 'I visit merge request page "Bug CO-01"' do
+ mr = MergeRequest.find_by(title: "Bug CO-01")
+ visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
+ end
+
step 'I visit project "Shop" merge requests page' do
visit namespace_project_merge_requests_path(project.namespace, project)
end
@@ -418,13 +423,13 @@ module SharedPaths
visit explore_projects_path
end
- step 'I visit the explore trending projects' do
- visit trending_explore_projects_path
- end
+ step 'I visit the explore trending projects' do
+ visit trending_explore_projects_path
+ end
- step 'I visit the explore starred projects' do
- visit starred_explore_projects_path
- end
+ step 'I visit the explore starred projects' do
+ visit starred_explore_projects_path
+ end
step 'I visit the public groups area' do
visit explore_groups_path
diff --git a/features/steps/shared/user.rb b/features/steps/shared/user.rb
index 209d77c7acf..fc1e8d6e889 100644
--- a/features/steps/shared/user.rb
+++ b/features/steps/shared/user.rb
@@ -2,16 +2,16 @@ module SharedUser
include Spinach::DSL
step 'User "John Doe" exists' do
- user_exists("John Doe", {username: "john_doe"})
+ user_exists("John Doe", { username: "john_doe" })
end
step 'User "Mary Jane" exists' do
- user_exists("Mary Jane", {username: "mary_jane"})
+ user_exists("Mary Jane", { username: "mary_jane" })
end
protected
def user_exists(name, options = {})
- User.find_by(name: name) || create(:user, {name: name, admin: false}.merge(options))
+ User.find_by(name: name) || create(:user, { name: name, admin: false }.merge(options))
end
end
diff --git a/features/steps/snippets/snippets.rb b/features/steps/snippets/snippets.rb
index 426da2918ea..6ff48e0c6b8 100644
--- a/features/steps/snippets/snippets.rb
+++ b/features/steps/snippets/snippets.rb
@@ -23,8 +23,8 @@ class Spinach::Features::Snippets < Spinach::FeatureSteps
end
step 'I submit new snippet "Personal snippet three"' do
- fill_in "personal_snippet_title", :with => "Personal snippet three"
- fill_in "personal_snippet_file_name", :with => "my_snippet.rb"
+ fill_in "personal_snippet_title", with: "Personal snippet three"
+ fill_in "personal_snippet_file_name", with: "my_snippet.rb"
page.within('.file-editor') do
find(:xpath, "//input[@id='personal_snippet_content']").set 'Content of snippet three'
end
@@ -32,12 +32,12 @@ class Spinach::Features::Snippets < Spinach::FeatureSteps
end
step 'I submit new internal snippet' do
- fill_in "personal_snippet_title", :with => "Internal personal snippet one"
- fill_in "personal_snippet_file_name", :with => "my_snippet.rb"
+ fill_in "personal_snippet_title", with: "Internal personal snippet one"
+ fill_in "personal_snippet_file_name", with: "my_snippet.rb"
choose 'personal_snippet_visibility_level_10'
page.within('.file-editor') do
- find(:xpath, "//input[@id='personal_snippet_content']").set 'Content of internal snippet'
+ find(:xpath, "//input[@id='personal_snippet_content']").set 'Content of internal snippet'
end
click_button "Create snippet"
@@ -49,7 +49,7 @@ class Spinach::Features::Snippets < Spinach::FeatureSteps
end
step 'I submit new title "Personal snippet new title"' do
- fill_in "personal_snippet_title", :with => "Personal snippet new title"
+ fill_in "personal_snippet_title", with: "Personal snippet new title"
click_button "Save"
end
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 7d4c68c7412..9b268cfe8bc 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -194,7 +194,7 @@ module API
user = User.find_by(id: params[:id])
if user
- DeleteUserService.new.execute(user)
+ DeleteUserService.new(current_user).execute(user)
else
not_found!('User')
end
diff --git a/lib/gitlab/backend/shell_env.rb b/lib/gitlab/backend/shell_env.rb
index 044afb27f3f..17ec029eed4 100644
--- a/lib/gitlab/backend/shell_env.rb
+++ b/lib/gitlab/backend/shell_env.rb
@@ -6,7 +6,9 @@ module Gitlab
def set_env(user)
# Set GL_ID env variable
- ENV['GL_ID'] = "user-#{user.id}"
+ if user
+ ENV['GL_ID'] = "user-#{user.id}"
+ end
end
def reset_env
diff --git a/lib/gitlab/o_auth/provider.rb b/lib/gitlab/o_auth/provider.rb
new file mode 100644
index 00000000000..f986499a27c
--- /dev/null
+++ b/lib/gitlab/o_auth/provider.rb
@@ -0,0 +1,19 @@
+module Gitlab
+ module OAuth
+ class Provider
+ def self.names
+ providers = []
+
+ Gitlab.config.ldap.servers.values.each do |server|
+ providers << server['provider_name']
+ end
+
+ Gitlab.config.omniauth.providers.each do |provider|
+ providers << provider['name']
+ end
+
+ providers
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/satellite/action.rb b/lib/gitlab/satellite/action.rb
index 4890ccf21e6..489070f1a3f 100644
--- a/lib/gitlab/satellite/action.rb
+++ b/lib/gitlab/satellite/action.rb
@@ -39,8 +39,10 @@ module Gitlab
def prepare_satellite!(repo)
project.satellite.clear_and_update!
- repo.config['user.name'] = user.name
- repo.config['user.email'] = user.email
+ if user
+ repo.config['user.name'] = user.name
+ repo.config['user.email'] = user.email
+ end
end
def default_options(options = {})
diff --git a/lib/tasks/cache.rake b/lib/tasks/cache.rake
index 753a5a11070..1728dda72cf 100644
--- a/lib/tasks/cache.rake
+++ b/lib/tasks/cache.rake
@@ -1,5 +1,5 @@
namespace :cache do
- desc "GITLAB | Clear redis cache"
+ desc "GitLab | Clear redis cache"
task :clear => :environment do
# Hack into Rails.cache until https://github.com/redis-store/redis-store/pull/225
# is accepted (I hope) and we can update the redis-store gem.
diff --git a/lib/tasks/dev.rake b/lib/tasks/dev.rake
index b22c631c8ba..6f27972c4e4 100644
--- a/lib/tasks/dev.rake
+++ b/lib/tasks/dev.rake
@@ -1,14 +1,14 @@
task dev: ["dev:setup"]
namespace :dev do
- desc "GITLAB | Setup developer environment (db, fixtures)"
+ desc "GitLab | Setup developer environment (db, fixtures)"
task :setup => :environment do
ENV['force'] = 'yes'
Rake::Task["gitlab:setup"].invoke
Rake::Task["gitlab:shell:setup"].invoke
end
- desc 'GITLAB | Start/restart foreman and watch for changes'
+ desc 'GitLab | Start/restart foreman and watch for changes'
task :foreman => :environment do
sh 'rerun --dir app,config,lib -- foreman start'
end
diff --git a/lib/tasks/gitlab/backup.rake b/lib/tasks/gitlab/backup.rake
index 84445b3bf2f..4c73f90bbf2 100644
--- a/lib/tasks/gitlab/backup.rake
+++ b/lib/tasks/gitlab/backup.rake
@@ -3,7 +3,7 @@ require 'active_record/fixtures'
namespace :gitlab do
namespace :backup do
# Create backup of GitLab system
- desc "GITLAB | Create a backup of the GitLab system"
+ desc "GitLab | Create a backup of the GitLab system"
task create: :environment do
warn_user_is_not_gitlab
configure_cron_mode
@@ -19,7 +19,7 @@ namespace :gitlab do
end
# Restore backup of GitLab system
- desc "GITLAB | Restore a previously created backup"
+ desc "GitLab | Restore a previously created backup"
task restore: :environment do
warn_user_is_not_gitlab
configure_cron_mode
diff --git a/lib/tasks/gitlab/bulk_add_permission.rake b/lib/tasks/gitlab/bulk_add_permission.rake
index 3d8c171dfa3..5dbf7d61e06 100644
--- a/lib/tasks/gitlab/bulk_add_permission.rake
+++ b/lib/tasks/gitlab/bulk_add_permission.rake
@@ -1,6 +1,6 @@
namespace :gitlab do
namespace :import do
- desc "GITLAB | Add all users to all projects (admin users are added as masters)"
+ desc "GitLab | Add all users to all projects (admin users are added as masters)"
task all_users_to_all_projects: :environment do |t, args|
user_ids = User.where(admin: false).pluck(:id)
admin_ids = User.where(admin: true).pluck(:id)
@@ -13,7 +13,7 @@ namespace :gitlab do
ProjectMember.add_users_into_projects(projects_ids, admin_ids, ProjectMember::MASTER)
end
- desc "GITLAB | Add a specific user to all projects (as a developer)"
+ desc "GitLab | Add a specific user to all projects (as a developer)"
task :user_to_projects, [:email] => :environment do |t, args|
user = User.find_by(email: args.email)
project_ids = Project.pluck(:id)
@@ -21,7 +21,7 @@ namespace :gitlab do
ProjectMember.add_users_into_projects(project_ids, Array.wrap(user.id), ProjectMember::DEVELOPER)
end
- desc "GITLAB | Add all users to all groups (admin users are added as owners)"
+ desc "GitLab | Add all users to all groups (admin users are added as owners)"
task all_users_to_all_groups: :environment do |t, args|
user_ids = User.where(admin: false).pluck(:id)
admin_ids = User.where(admin: true).pluck(:id)
@@ -35,7 +35,7 @@ namespace :gitlab do
end
end
- desc "GITLAB | Add a specific user to all groups (as a developer)"
+ desc "GitLab | Add a specific user to all groups (as a developer)"
task :user_to_groups, [:email] => :environment do |t, args|
user = User.find_by_email args.email
groups = Group.all
diff --git a/lib/tasks/gitlab/check.rake b/lib/tasks/gitlab/check.rake
index 75bd41f2838..aed84226a2f 100644
--- a/lib/tasks/gitlab/check.rake
+++ b/lib/tasks/gitlab/check.rake
@@ -1,5 +1,5 @@
namespace :gitlab do
- desc "GITLAB | Check the configuration of GitLab and its environment"
+ desc "GitLab | Check the configuration of GitLab and its environment"
task check: %w{gitlab:gitlab_shell:check
gitlab:sidekiq:check
gitlab:ldap:check
@@ -8,7 +8,7 @@ namespace :gitlab do
namespace :app do
- desc "GITLAB | Check the configuration of the GitLab Rails app"
+ desc "GitLab | Check the configuration of the GitLab Rails app"
task check: :environment do
warn_user_is_not_gitlab
start_checking "GitLab"
@@ -329,7 +329,7 @@ namespace :gitlab do
end
namespace :gitlab_shell do
- desc "GITLAB | Check the configuration of GitLab Shell"
+ desc "GitLab | Check the configuration of GitLab Shell"
task check: :environment do
warn_user_is_not_gitlab
start_checking "GitLab Shell"
@@ -574,7 +574,7 @@ namespace :gitlab do
namespace :sidekiq do
- desc "GITLAB | Check the configuration of Sidekiq"
+ desc "GitLab | Check the configuration of Sidekiq"
task check: :environment do
warn_user_is_not_gitlab
start_checking "Sidekiq"
@@ -667,7 +667,7 @@ namespace :gitlab do
end
namespace :repo do
- desc "GITLAB | Check the integrity of the repositories managed by GitLab"
+ desc "GitLab | Check the integrity of the repositories managed by GitLab"
task check: :environment do
namespace_dirs = Dir.glob(
File.join(Gitlab.config.gitlab_shell.repos_path, '*')
diff --git a/lib/tasks/gitlab/cleanup.rake b/lib/tasks/gitlab/cleanup.rake
index d49cb6778f1..6b1e3716147 100644
--- a/lib/tasks/gitlab/cleanup.rake
+++ b/lib/tasks/gitlab/cleanup.rake
@@ -1,6 +1,6 @@
namespace :gitlab do
namespace :cleanup do
- desc "GITLAB | Cleanup | Clean namespaces"
+ desc "GitLab | Cleanup | Clean namespaces"
task dirs: :environment do
warn_user_is_not_gitlab
remove_flag = ENV['REMOVE']
@@ -43,7 +43,7 @@ namespace :gitlab do
end
end
- desc "GITLAB | Cleanup | Clean repositories"
+ desc "GitLab | Cleanup | Clean repositories"
task repos: :environment do
warn_user_is_not_gitlab
remove_flag = ENV['REMOVE']
@@ -85,7 +85,7 @@ namespace :gitlab do
end
end
- desc "GITLAB | Cleanup | Block users that have been removed in LDAP"
+ desc "GitLab | Cleanup | Block users that have been removed in LDAP"
task block_removed_ldap_users: :environment do
warn_user_is_not_gitlab
block_flag = ENV['BLOCK']
diff --git a/lib/tasks/gitlab/enable_automerge.rake b/lib/tasks/gitlab/enable_automerge.rake
index aa9869daf2f..3dade9d75b8 100644
--- a/lib/tasks/gitlab/enable_automerge.rake
+++ b/lib/tasks/gitlab/enable_automerge.rake
@@ -1,6 +1,6 @@
namespace :gitlab do
namespace :satellites do
- desc "GITLAB | Create satellite repos"
+ desc "GitLab | Create satellite repos"
task create: :environment do
create_satellites
end
diff --git a/lib/tasks/gitlab/generate_docs.rake b/lib/tasks/gitlab/generate_docs.rake
index 332cd61f84c..f6448c38e10 100644
--- a/lib/tasks/gitlab/generate_docs.rake
+++ b/lib/tasks/gitlab/generate_docs.rake
@@ -1,5 +1,5 @@
namespace :gitlab do
- desc "GITLAB | Generate sdocs for project"
+ desc "GitLab | Generate sdocs for project"
task generate_docs: :environment do
system(*%W(bundle exec sdoc -o doc/code app lib))
end
diff --git a/lib/tasks/gitlab/import.rake b/lib/tasks/gitlab/import.rake
index 7c98ad3144f..5f83e5e8e7f 100644
--- a/lib/tasks/gitlab/import.rake
+++ b/lib/tasks/gitlab/import.rake
@@ -9,7 +9,7 @@ namespace :gitlab do
# * The project owner will set to the first administator of the system
# * Existing projects will be skipped
#
- desc "GITLAB | Import bare repositories from gitlab_shell -> repos_path into GitLab project instance"
+ desc "GitLab | Import bare repositories from gitlab_shell -> repos_path into GitLab project instance"
task repos: :environment do
git_base_path = Gitlab.config.gitlab_shell.repos_path
diff --git a/lib/tasks/gitlab/info.rake b/lib/tasks/gitlab/info.rake
index 72452e1d8ea..bf221f06d3b 100644
--- a/lib/tasks/gitlab/info.rake
+++ b/lib/tasks/gitlab/info.rake
@@ -1,6 +1,6 @@
namespace :gitlab do
namespace :env do
- desc "GITLAB | Show information about GitLab and its environment"
+ desc "GitLab | Show information about GitLab and its environment"
task info: :environment do
# check if there is an RVM environment
diff --git a/lib/tasks/gitlab/setup.rake b/lib/tasks/gitlab/setup.rake
index 8b4ccdfc3fe..0ac4b0fa8a3 100644
--- a/lib/tasks/gitlab/setup.rake
+++ b/lib/tasks/gitlab/setup.rake
@@ -1,5 +1,5 @@
namespace :gitlab do
- desc "GITLAB | Setup production application"
+ desc "GitLab | Setup production application"
task setup: :environment do
setup_db
end
diff --git a/lib/tasks/gitlab/shell.rake b/lib/tasks/gitlab/shell.rake
index afdaba11cb0..3c0cc763d17 100644
--- a/lib/tasks/gitlab/shell.rake
+++ b/lib/tasks/gitlab/shell.rake
@@ -1,6 +1,6 @@
namespace :gitlab do
namespace :shell do
- desc "GITLAB | Install or upgrade gitlab-shell"
+ desc "GitLab | Install or upgrade gitlab-shell"
task :install, [:tag, :repo] => :environment do |t, args|
warn_user_is_not_gitlab
@@ -75,12 +75,12 @@ namespace :gitlab do
end
end
- desc "GITLAB | Setup gitlab-shell"
+ desc "GitLab | Setup gitlab-shell"
task setup: :environment do
setup
end
- desc "GITLAB | Build missing projects"
+ desc "GitLab | Build missing projects"
task build_missing_projects: :environment do
Project.find_each(batch_size: 1000) do |project|
path_to_repo = project.repository.path_to_repo
diff --git a/lib/tasks/gitlab/test.rake b/lib/tasks/gitlab/test.rake
index b4c0ae3ff79..cbb3d61af04 100644
--- a/lib/tasks/gitlab/test.rake
+++ b/lib/tasks/gitlab/test.rake
@@ -1,5 +1,5 @@
namespace :gitlab do
- desc "GITLAB | Run all tests"
+ desc "GitLab | Run all tests"
task :test do
cmds = [
%W(rake brakeman),
diff --git a/lib/tasks/gitlab/web_hook.rake b/lib/tasks/gitlab/web_hook.rake
index 412bcad1229..76e443e55ee 100644
--- a/lib/tasks/gitlab/web_hook.rake
+++ b/lib/tasks/gitlab/web_hook.rake
@@ -1,6 +1,6 @@
namespace :gitlab do
namespace :web_hook do
- desc "GITLAB | Adds a web hook to the projects"
+ desc "GitLab | Adds a web hook to the projects"
task :add => :environment do
web_hook_url = ENV['URL']
namespace_path = ENV['NAMESPACE']
@@ -20,7 +20,7 @@ namespace :gitlab do
end
end
- desc "GITLAB | Remove a web hook from the projects"
+ desc "GitLab | Remove a web hook from the projects"
task :rm => :environment do
web_hook_url = ENV['URL']
namespace_path = ENV['NAMESPACE']
@@ -33,7 +33,7 @@ namespace :gitlab do
puts "#{count} web hooks were removed."
end
- desc "GITLAB | List web hooks"
+ desc "GitLab | List web hooks"
task :list => :environment do
namespace_path = ENV['NAMESPACE']
diff --git a/lib/tasks/migrate/add_limits_mysql.rake b/lib/tasks/migrate/add_limits_mysql.rake
index a1972a682d8..6ded519aff2 100644
--- a/lib/tasks/migrate/add_limits_mysql.rake
+++ b/lib/tasks/migrate/add_limits_mysql.rake
@@ -1,6 +1,6 @@
require Rails.root.join('db/migrate/limits_to_mysql')
-desc "GITLAB | Add limits to strings in mysql database"
+desc "GitLab | Add limits to strings in mysql database"
task add_limits_mysql: :environment do
puts "Adding limits to schema.rb for mysql"
LimitsToMysql.new.up
diff --git a/lib/tasks/migrate/migrate_iids.rake b/lib/tasks/migrate/migrate_iids.rake
index 33271e1a2bb..d258c6fd08d 100644
--- a/lib/tasks/migrate/migrate_iids.rake
+++ b/lib/tasks/migrate/migrate_iids.rake
@@ -1,4 +1,4 @@
-desc "GITLAB | Build internal ids for issues and merge requests"
+desc "GitLab | Build internal ids for issues and merge requests"
task migrate_iids: :environment do
puts 'Issues'.yellow
Issue.where(iid: nil).find_each(batch_size: 100) do |issue|
diff --git a/lib/tasks/setup.rake b/lib/tasks/setup.rake
index 93701de8f63..4c79ffbfa6b 100644
--- a/lib/tasks/setup.rake
+++ b/lib/tasks/setup.rake
@@ -1,4 +1,4 @@
-desc "GITLAB | Setup gitlab db"
+desc "GitLab | Setup gitlab db"
task :setup do
Rake::Task["gitlab:setup"].invoke
end
diff --git a/lib/tasks/sidekiq.rake b/lib/tasks/sidekiq.rake
index e4bd6545755..d1f6ed87704 100644
--- a/lib/tasks/sidekiq.rake
+++ b/lib/tasks/sidekiq.rake
@@ -1,10 +1,10 @@
namespace :sidekiq do
- desc "GITLAB | Stop sidekiq"
+ desc "GitLab | Stop sidekiq"
task :stop do
system *%W(bin/background_jobs stop)
end
- desc "GITLAB | Start sidekiq"
+ desc "GitLab | Start sidekiq"
task :start do
system *%W(bin/background_jobs start)
end
@@ -14,7 +14,7 @@ namespace :sidekiq do
system *%W(bin/background_jobs restart)
end
- desc "GITLAB | Start sidekiq with launchd on Mac OS X"
+ desc "GitLab | Start sidekiq with launchd on Mac OS X"
task :launchd do
system *%W(bin/background_jobs start_no_deamonize)
end
diff --git a/lib/tasks/spec.rake b/lib/tasks/spec.rake
index bee22300298..831746815d7 100644
--- a/lib/tasks/spec.rake
+++ b/lib/tasks/spec.rake
@@ -1,7 +1,7 @@
Rake::Task["spec"].clear if Rake::Task.task_defined?('spec')
namespace :spec do
- desc 'GITLAB | Run request specs'
+ desc 'GitLab | Rspec | Run request specs'
task :api do
cmds = [
%W(rake gitlab:setup),
@@ -10,7 +10,7 @@ namespace :spec do
run_commands(cmds)
end
- desc 'GITLAB | Run feature specs'
+ desc 'GitLab | Rspec | Run feature specs'
task :feature do
cmds = [
%W(rake gitlab:setup),
@@ -19,7 +19,7 @@ namespace :spec do
run_commands(cmds)
end
- desc 'GITLAB | Run other specs'
+ desc 'GitLab | Rspec | Run other specs'
task :other do
cmds = [
%W(rake gitlab:setup),
@@ -29,7 +29,7 @@ namespace :spec do
end
end
-desc "GITLAB | Run specs"
+desc "GitLab | Run specs"
task :spec do
cmds = [
%W(rake gitlab:setup),
diff --git a/lib/tasks/spinach.rake b/lib/tasks/spinach.rake
index 4aefc18ce14..c8881be0954 100644
--- a/lib/tasks/spinach.rake
+++ b/lib/tasks/spinach.rake
@@ -1,34 +1,30 @@
Rake::Task["spinach"].clear if Rake::Task.task_defined?('spinach')
-desc "GITLAB | Run spinach"
-task :spinach do
- tags = if ENV['SEMAPHORE']
- '~@tricky'
- else
- '~@semaphore'
- end
-
- cmds = [
- %W(rake gitlab:setup),
- %W(spinach --tags #{tags}),
- ]
- run_commands(cmds)
-end
+namespace :spinach do
+ desc "GitLab | Spinach | Run project spinach features"
+ task :project do
+ cmds = [
+ %W(rake gitlab:setup),
+ %W(spinach --tags ~@admin,~@dashboard,~@profile,~@public,~@snippets),
+ ]
+ run_commands(cmds)
+ end
-desc "GITLAB | Run project spinach features"
-task :spinach_project do
- cmds = [
- %W(rake gitlab:setup),
- %W(spinach --tags ~@admin,~@dashboard,~@profile,~@public,~@snippets),
- ]
- run_commands(cmds)
+ desc "GitLab | Spinach | Run other spinach features"
+ task :other do
+ cmds = [
+ %W(rake gitlab:setup),
+ %W(spinach --tags @admin,@dashboard,@profile,@public,@snippets),
+ ]
+ run_commands(cmds)
+ end
end
-desc "GITLAB | Run other spinach features"
-task :spinach_other do
+desc "GitLab | Run spinach"
+task :spinach do
cmds = [
%W(rake gitlab:setup),
- %W(spinach --tags @admin,@dashboard,@profile,@public,@snippets),
+ %W(spinach),
]
run_commands(cmds)
end
diff --git a/lib/tasks/test.rake b/lib/tasks/test.rake
index a39d9649876..b9f9c72c91f 100644
--- a/lib/tasks/test.rake
+++ b/lib/tasks/test.rake
@@ -1,6 +1,6 @@
Rake::Task["test"].clear
-desc "GITLAB | Run all tests"
+desc "GitLab | Run all tests"
task :test do
Rake::Task["gitlab:test"].invoke
end
@@ -8,6 +8,6 @@ end
unless Rails.env.production?
require 'coveralls/rake/task'
Coveralls::RakeTask.new
- desc "GITLAB | Run all tests on CI with simplecov"
+ desc "GitLab | Run all tests on CI with simplecov"
task :test_ci => [:rubocop, :brakeman, 'jasmine:ci', :spinach, :spec, 'coveralls:push']
end
diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb
new file mode 100644
index 00000000000..f27e861e175
--- /dev/null
+++ b/spec/controllers/admin/users_controller_spec.rb
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+describe Admin::UsersController do
+ let(:admin) { create(:admin) }
+
+ before do
+ sign_in(admin)
+ end
+
+ describe 'DELETE #user with projects' do
+ let(:user) { create(:user) }
+ let(:project) { create(:project, namespace: user.namespace) }
+
+ before do
+ project.team << [user, :developer]
+ end
+
+ it 'deletes user' do
+ delete :destroy, id: user.username, format: :json
+ expect(response.status).to eq(200)
+ expect { User.find(user.id) }.to raise_exception(ActiveRecord::RecordNotFound)
+ end
+ end
+end
diff --git a/spec/controllers/blob_controller_spec.rb b/spec/controllers/blob_controller_spec.rb
index a1102f28340..eb91e577b87 100644
--- a/spec/controllers/blob_controller_spec.rb
+++ b/spec/controllers/blob_controller_spec.rb
@@ -18,8 +18,10 @@ describe Projects::BlobController do
render_views
before do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: id)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: id)
end
context "valid branch, valid file" do
@@ -42,8 +44,10 @@ describe Projects::BlobController do
render_views
before do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: id)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: id)
controller.instance_variable_set(:@blob, nil)
end
diff --git a/spec/controllers/branches_controller_spec.rb b/spec/controllers/branches_controller_spec.rb
index 51397382cfb..db3b64babcd 100644
--- a/spec/controllers/branches_controller_spec.rb
+++ b/spec/controllers/branches_controller_spec.rb
@@ -17,13 +17,13 @@ describe Projects::BranchesController do
describe "POST create" do
render_views
- before {
+ before do
post :create,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
branch_name: branch,
ref: ref
- }
+ end
context "valid branch name, valid source" do
let(:branch) { "merge_branch" }
diff --git a/spec/controllers/commit_controller_spec.rb b/spec/controllers/commit_controller_spec.rb
index 34ee61f7ede..bb3d87f3840 100644
--- a/spec/controllers/commit_controller_spec.rb
+++ b/spec/controllers/commit_controller_spec.rb
@@ -13,8 +13,11 @@ describe Projects::CommitController do
describe "#show" do
shared_examples "export as" do |format|
it "should generally work" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id,
+ format: format)
expect(response).to be_success
end
@@ -22,13 +25,17 @@ describe Projects::CommitController do
it "should generate it" do
expect_any_instance_of(Commit).to receive(:"to_#{format}")
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id, format: format)
end
it "should render it" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id, format: format)
expect(response.body).to eq(commit.send(:"to_#{format}"))
end
@@ -37,8 +44,10 @@ describe Projects::CommitController do
allow_any_instance_of(Commit).to receive(:"to_#{format}").
and_return('HTML entities &<>" ')
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id, format: format)
expect(response.body).not_to include('&amp;')
expect(response.body).not_to include('&gt;')
@@ -52,8 +61,11 @@ describe Projects::CommitController do
let(:format) { :diff }
it "should really only be a git diff" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id,
+ format: format)
expect(response.body).to start_with("diff --git")
end
@@ -64,15 +76,21 @@ describe Projects::CommitController do
let(:format) { :patch }
it "should really be a git email patch" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id,
+ format: format)
expect(response.body).to start_with("From #{commit.id}")
end
it "should contain a git diff" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id,
+ format: format)
expect(response.body).to match(/^diff --git/)
end
@@ -81,8 +99,10 @@ describe Projects::CommitController do
describe "#branches" do
it "contains branch and tags information" do
- get(:branches, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: commit.id)
+ get(:branches,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id)
expect(assigns(:branches)).to include("master", "feature_conflict")
expect(assigns(:tags)).to include("v1.1.0")
diff --git a/spec/controllers/commits_controller_spec.rb b/spec/controllers/commits_controller_spec.rb
index 2184b35152e..7d8089c4bc6 100644
--- a/spec/controllers/commits_controller_spec.rb
+++ b/spec/controllers/commits_controller_spec.rb
@@ -12,8 +12,11 @@ describe Projects::CommitsController do
describe "GET show" do
context "as atom feed" do
it "should render as atom" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: "master", format: "atom")
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: "master",
+ format: "atom")
expect(response).to be_success
expect(response.content_type).to eq('application/atom+xml')
end
diff --git a/spec/controllers/help_controller_spec.rb b/spec/controllers/help_controller_spec.rb
index 93535ced7ae..1f7fd517342 100644
--- a/spec/controllers/help_controller_spec.rb
+++ b/spec/controllers/help_controller_spec.rb
@@ -35,8 +35,10 @@ describe HelpController do
context 'for image formats' do
context 'when requested file exists' do
it 'renders the raw file' do
- get :show, category: 'workflow/protected_branches',
- file: 'protected_branches1', format: :png
+ get :show,
+ category: 'workflow/protected_branches',
+ file: 'protected_branches1',
+ format: :png
expect(response).to be_success
expect(response.content_type).to eq 'image/png'
expect(response.headers['Content-Disposition']).to match(/^inline;/)
@@ -45,7 +47,10 @@ describe HelpController do
context 'when requested file is missing' do
it 'renders not found' do
- get :show, category: 'foo', file: 'bar', format: :png
+ get :show,
+ category: 'foo',
+ file: 'bar',
+ format: :png
expect(response).to be_not_found
end
end
@@ -53,7 +58,10 @@ describe HelpController do
context 'for other formats' do
it 'always renders not found' do
- get :show, category: 'ssh', file: 'README', format: :foo
+ get :show,
+ category: 'ssh',
+ file: 'README',
+ format: :foo
expect(response).to be_not_found
end
end
diff --git a/spec/controllers/import/bitbucket_controller_spec.rb b/spec/controllers/import/bitbucket_controller_spec.rb
index f577c2b3006..d5d9310e603 100644
--- a/spec/controllers/import/bitbucket_controller_spec.rb
+++ b/spec/controllers/import/bitbucket_controller_spec.rb
@@ -61,20 +61,13 @@ describe Import::BitbucketController do
describe "POST create" do
let(:bitbucket_username) { user.username }
- let(:bitbucket_user) {
- {
- user: {
- username: bitbucket_username
- }
- }.with_indifferent_access
- }
-
- let(:bitbucket_repo) {
- {
- slug: "vim",
- owner: bitbucket_username
- }.with_indifferent_access
- }
+ let(:bitbucket_user) do
+ { user: { username: bitbucket_username } }.with_indifferent_access
+ end
+
+ let(:bitbucket_repo) do
+ { slug: "vim", owner: bitbucket_username }.with_indifferent_access
+ end
before do
allow(Gitlab::BitbucketImport::KeyAdder).
diff --git a/spec/controllers/import/github_controller_spec.rb b/spec/controllers/import/github_controller_spec.rb
index 9534981c78b..0bc14059a35 100644
--- a/spec/controllers/import/github_controller_spec.rb
+++ b/spec/controllers/import/github_controller_spec.rb
@@ -55,14 +55,14 @@ describe Import::GithubController do
describe "POST create" do
let(:github_username) { user.username }
-
- let(:github_user) {
- OpenStruct.new(login: github_username)
- }
-
- let(:github_repo) {
- OpenStruct.new(name: 'vim', full_name: "#{github_username}/vim", owner: OpenStruct.new(login: github_username))
- }
+ let(:github_user) { OpenStruct.new(login: github_username) }
+ let(:github_repo) do
+ OpenStruct.new(
+ name: 'vim',
+ full_name: "#{github_username}/vim",
+ owner: OpenStruct.new(login: github_username)
+ )
+ end
before do
stub_client(user: github_user, repo: github_repo)
diff --git a/spec/controllers/import/gitlab_controller_spec.rb b/spec/controllers/import/gitlab_controller_spec.rb
index cb06cdc09ea..4bc67c86703 100644
--- a/spec/controllers/import/gitlab_controller_spec.rb
+++ b/spec/controllers/import/gitlab_controller_spec.rb
@@ -53,21 +53,17 @@ describe Import::GitlabController do
describe "POST create" do
let(:gitlab_username) { user.username }
-
- let(:gitlab_user) {
- {
- username: gitlab_username
- }.with_indifferent_access
- }
-
- let(:gitlab_repo) {
+ let(:gitlab_user) do
+ { username: gitlab_username }.with_indifferent_access
+ end
+ let(:gitlab_repo) do
{
path: 'vim',
path_with_namespace: "#{gitlab_username}/vim",
owner: { name: gitlab_username },
namespace: { path: gitlab_username }
}.with_indifferent_access
- }
+ end
before do
stub_client(user: gitlab_user, project: gitlab_repo)
diff --git a/spec/controllers/profiles/preferences_controller_spec.rb b/spec/controllers/profiles/preferences_controller_spec.rb
index 1f0943c93d8..8f02003992a 100644
--- a/spec/controllers/profiles/preferences_controller_spec.rb
+++ b/spec/controllers/profiles/preferences_controller_spec.rb
@@ -63,7 +63,7 @@ describe Profiles::PreferencesController do
context 'on invalid dashboard setting' do
it 'sets the flash' do
- prefs = {dashboard: 'invalid'}
+ prefs = { dashboard: 'invalid' }
go params: prefs
diff --git a/spec/controllers/projects/compare_controller_spec.rb b/spec/controllers/projects/compare_controller_spec.rb
index 23e1566b8f3..b643b354073 100644
--- a/spec/controllers/projects/compare_controller_spec.rb
+++ b/spec/controllers/projects/compare_controller_spec.rb
@@ -12,8 +12,11 @@ describe Projects::CompareController do
end
it 'compare should show some diffs' do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, from: ref_from, to: ref_to)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ from: ref_from,
+ to: ref_to)
expect(response).to be_success
expect(assigns(:diffs).length).to be >= 1
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index b9c6f6e472e..b8db8591709 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -13,8 +13,11 @@ describe Projects::MergeRequestsController do
describe "#show" do
shared_examples "export merge as" do |format|
it "should generally work" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format)
expect(response).to be_success
end
@@ -22,13 +25,19 @@ describe Projects::MergeRequestsController do
it "should generate it" do
expect_any_instance_of(MergeRequest).to receive(:"to_#{format}")
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format)
end
it "should render it" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format)
expect(response.body).to eq((merge_request.send(:"to_#{format}",user)).to_s)
end
@@ -37,8 +46,11 @@ describe Projects::MergeRequestsController do
allow_any_instance_of(MergeRequest).to receive(:"to_#{format}").
and_return('HTML entities &<>" ')
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format)
expect(response.body).not_to include('&amp;')
expect(response.body).not_to include('&gt;')
@@ -52,8 +64,11 @@ describe Projects::MergeRequestsController do
let(:format) { :diff }
it "should really only be a git diff" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format)
expect(response.body).to start_with("diff --git")
end
@@ -64,15 +79,20 @@ describe Projects::MergeRequestsController do
let(:format) { :patch }
it "should really be a git email patch with commit" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid, format: format)
expect(response.body[0..100]).to start_with("From #{merge_request.commits.last.id}")
end
it "should contain git diffs" do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format)
expect(response.body).to match(/^diff --git/)
end
@@ -81,8 +101,11 @@ describe Projects::MergeRequestsController do
describe 'GET diffs' do
def go(format: 'html')
- get :diffs, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format
+ get :diffs,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format
end
context 'as html' do
@@ -126,8 +149,11 @@ describe Projects::MergeRequestsController do
describe 'GET commits' do
def go(format: 'html')
- get :commits, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: merge_request.iid, format: format
+ get :commits,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: merge_request.iid,
+ format: format
end
context 'as html' do
diff --git a/spec/controllers/projects/refs_controller_spec.rb b/spec/controllers/projects/refs_controller_spec.rb
index c254ab7cb6e..abd45a74e2d 100644
--- a/spec/controllers/projects/refs_controller_spec.rb
+++ b/spec/controllers/projects/refs_controller_spec.rb
@@ -11,15 +11,20 @@ describe Projects::RefsController do
describe 'GET #logs_tree' do
def default_get(format = :html)
- get :logs_tree, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: 'master',
- path: 'foo/bar/baz.html', format: format
+ get :logs_tree,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: 'master',
+ path: 'foo/bar/baz.html',
+ format: format
end
def xhr_get(format = :html)
- xhr :get, :logs_tree, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: 'master',
- path: 'foo/bar/baz.html', format: format
+ xhr :get,
+ :logs_tree,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param, id: 'master',
+ path: 'foo/bar/baz.html', format: format
end
it 'never throws MissingTemplate' do
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index a1b82a32150..29233e9fae6 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -16,30 +16,34 @@ describe ProjectsController do
get :show, "go-get" => "1", namespace_id: "bogus_namespace", id: "bogus_project"
expect(response.body).to include("name='go-import'")
-
+
content = "localhost/bogus_namespace/bogus_project git http://localhost/bogus_namespace/bogus_project.git"
expect(response.body).to include("content='#{content}'")
end
end
end
-
+
describe "POST #toggle_star" do
it "toggles star if user is signed in" do
sign_in(user)
expect(user.starred?(public_project)).to be_falsey
- post(:toggle_star, namespace_id: public_project.namespace.to_param,
+ post(:toggle_star,
+ namespace_id: public_project.namespace.to_param,
id: public_project.to_param)
expect(user.starred?(public_project)).to be_truthy
- post(:toggle_star, namespace_id: public_project.namespace.to_param,
+ post(:toggle_star,
+ namespace_id: public_project.namespace.to_param,
id: public_project.to_param)
expect(user.starred?(public_project)).to be_falsey
end
it "does nothing if user is not signed in" do
- post(:toggle_star, namespace_id: project.namespace.to_param,
+ post(:toggle_star,
+ namespace_id: project.namespace.to_param,
id: public_project.to_param)
expect(user.starred?(public_project)).to be_falsey
- post(:toggle_star, namespace_id: project.namespace.to_param,
+ post(:toggle_star,
+ namespace_id: project.namespace.to_param,
id: public_project.to_param)
expect(user.starred?(public_project)).to be_falsey
end
diff --git a/spec/controllers/tree_controller_spec.rb b/spec/controllers/tree_controller_spec.rb
index 7b219819bbc..e09caf5df13 100644
--- a/spec/controllers/tree_controller_spec.rb
+++ b/spec/controllers/tree_controller_spec.rb
@@ -19,8 +19,10 @@ describe Projects::TreeController do
render_views
before do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: id)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: id)
end
context "valid branch, no path" do
@@ -48,8 +50,10 @@ describe Projects::TreeController do
render_views
before do
- get(:show, namespace_id: project.namespace.to_param,
- project_id: project.to_param, id: id)
+ get(:show,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: id)
end
context 'redirect to blob' do
diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb
index 77cd37c22d9..3b7adfe4398 100644
--- a/spec/factories/merge_requests.rb
+++ b/spec/factories/merge_requests.rb
@@ -28,7 +28,7 @@ FactoryGirl.define do
source_project factory: :project
target_project { source_project }
- # → git log --pretty=oneline feature..master
+ # $ git log --pretty=oneline feature..master
# 5937ac0a7beb003549fc5fd26fc247adbce4a52e Add submodule from gitlab.com
# 570e7b2abdd848b95f2f578043fc23bd6f6fd24d Change some files
# 6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9 More submodules
diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb
index 7f5cb30cb94..86717761582 100644
--- a/spec/features/admin/admin_users_spec.rb
+++ b/spec/features/admin/admin_users_spec.rb
@@ -16,6 +16,46 @@ describe "Admin::Users", feature: true do
expect(page).to have_content(@user.email)
expect(page).to have_content(@user.name)
end
+
+ describe 'Two-factor Authentication filters' do
+ it 'counts users who have enabled 2FA' do
+ create(:user, two_factor_enabled: true)
+
+ visit admin_users_path
+
+ page.within('.filter-two-factor-enabled small') do
+ expect(page).to have_content('1')
+ end
+ end
+
+ it 'filters by users who have enabled 2FA' do
+ user = create(:user, two_factor_enabled: true)
+
+ visit admin_users_path
+ click_link '2FA Enabled'
+
+ expect(page).to have_content(user.email)
+ end
+
+ it 'counts users who have not enabled 2FA' do
+ create(:user, two_factor_enabled: false)
+
+ visit admin_users_path
+
+ page.within('.filter-two-factor-disabled small') do
+ expect(page).to have_content('2') # Including admin
+ end
+ end
+
+ it 'filters by users who have not enabled 2FA' do
+ user = create(:user, two_factor_enabled: false)
+
+ visit admin_users_path
+ click_link '2FA Disabled'
+
+ expect(page).to have_content(user.email)
+ end
+ end
end
describe "GET /admin/users/new" do
diff --git a/spec/features/atom/users_spec.rb b/spec/features/atom/users_spec.rb
index 770ac04c2c5..dc41be8246f 100644
--- a/spec/features/atom/users_spec.rb
+++ b/spec/features/atom/users_spec.rb
@@ -14,17 +14,24 @@ describe "User Feed", feature: true do
context 'feed content' do
let(:project) { create(:project) }
let(:issue) do
- create(:issue, project: project,
- author: user, description: "Houston, we have a bug!\n\n***\n\nI guess.")
+ create(:issue,
+ project: project,
+ author: user,
+ description: "Houston, we have a bug!\n\n***\n\nI guess.")
end
let(:note) do
- create(:note, noteable: issue, author: user,
- note: 'Bug confirmed :+1:', project: project)
+ create(:note,
+ noteable: issue,
+ author: user,
+ note: 'Bug confirmed :+1:',
+ project: project)
end
let(:merge_request) do
create(:merge_request,
- title: 'Fix bug', author: user,
- source_project: project, target_project: project,
+ title: 'Fix bug',
+ author: user,
+ source_project: project,
+ target_project: project,
description: "Here is the fix: ![an image](image.png)")
end
diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb
index 1f2675044d3..158a5c0c29c 100644
--- a/spec/features/issues_spec.rb
+++ b/spec/features/issues_spec.rb
@@ -36,9 +36,7 @@ describe 'Issues', feature: true do
end
it 'does not change issue count' do
- expect {
- click_button 'Save changes'
- }.not_to change { Issue.count }
+ expect { click_button 'Save changes' }.to_not change { Issue.count }
end
it 'should update issue fields' do
@@ -295,7 +293,7 @@ describe 'Issues', feature: true do
issue.save
end
- it 'allows user to remove assignee', :js => true do
+ it 'allows user to remove assignee', js: true do
visit namespace_project_issue_path(project.namespace, project, issue)
expect(page).to have_content "Assignee: #{user2.name}"
diff --git a/spec/features/notes_on_merge_requests_spec.rb b/spec/features/notes_on_merge_requests_spec.rb
index 219bb3129e7..12ab4b844d8 100644
--- a/spec/features/notes_on_merge_requests_spec.rb
+++ b/spec/features/notes_on_merge_requests_spec.rb
@@ -86,13 +86,13 @@ describe 'Comments' do
end
# TODO: fix after 7.7 release
- #it "should reset the edit note form textarea with the original content of the note if cancelled" do
- #within(".current-note-edit-form") do
- #fill_in "note[note]", with: "Some new content"
- #find(".btn-cancel").click
- #expect(find(".js-note-text", visible: false).text).to eq note.note
- #end
- #end
+ # it "should reset the edit note form textarea with the original content of the note if cancelled" do
+ # within(".current-note-edit-form") do
+ # fill_in "note[note]", with: "Some new content"
+ # find(".btn-cancel").click
+ # expect(find(".js-note-text", visible: false).text).to eq note.note
+ # end
+ # end
it 'appends the edited at time to the note' do
page.within('.current-note-edit-form') do
diff --git a/spec/features/search_spec.rb b/spec/features/search_spec.rb
index 479334f45d8..84c036e59c0 100644
--- a/spec/features/search_spec.rb
+++ b/spec/features/search_spec.rb
@@ -17,4 +17,3 @@ describe "Search", feature: true do
expect(page).to have_content @project.name
end
end
-
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 582c401c55a..8fd3d8f407b 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -40,15 +40,15 @@ describe ApplicationHelper do
end
describe 'project_icon' do
- avatar_file_path = File.join(Rails.root, 'public', 'gitlab_logo.png')
+ avatar_file_path = File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif')
it 'should return an url for the avatar' do
project = create(:project)
project.avatar = File.open(avatar_file_path)
project.save!
- avatar_url = "http://localhost/uploads/project/avatar/#{ project.id }/gitlab_logo.png"
+ avatar_url = "http://localhost/uploads/project/avatar/#{ project.id }/banana_sample.gif"
expect(project_icon("#{project.namespace.to_param}/#{project.to_param}").to_s).to eq(
- "<img alt=\"Gitlab logo\" src=\"#{avatar_url}\" />"
+ "<img alt=\"Banana sample\" src=\"#{avatar_url}\" />"
)
end
@@ -65,14 +65,14 @@ describe ApplicationHelper do
end
describe 'avatar_icon' do
- avatar_file_path = File.join(Rails.root, 'public', 'gitlab_logo.png')
+ avatar_file_path = File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif')
it 'should return an url for the avatar' do
user = create(:user)
user.avatar = File.open(avatar_file_path)
user.save!
expect(avatar_icon(user.email).to_s).
- to match("/uploads/user/avatar/#{ user.id }/gitlab_logo.png")
+ to match("/uploads/user/avatar/#{ user.id }/banana_sample.gif")
end
it 'should return an url for the avatar with relative url' do
@@ -83,7 +83,7 @@ describe ApplicationHelper do
user.avatar = File.open(avatar_file_path)
user.save!
expect(avatar_icon(user.email).to_s).
- to match("/gitlab/uploads/user/avatar/#{ user.id }/gitlab_logo.png")
+ to match("/gitlab/uploads/user/avatar/#{ user.id }/banana_sample.gif")
end
it 'should call gravatar_icon when no avatar is present' do
diff --git a/spec/helpers/groups_helper.rb b/spec/helpers/groups_helper.rb
index 3e99ab84ec9..5d174460681 100644
--- a/spec/helpers/groups_helper.rb
+++ b/spec/helpers/groups_helper.rb
@@ -2,14 +2,14 @@ require 'spec_helper'
describe GroupsHelper do
describe 'group_icon' do
- avatar_file_path = File.join(Rails.root, 'public', 'gitlab_logo.png')
+ avatar_file_path = File.join(Rails.root, 'spec', 'fixtures', 'banana_sample.gif')
it 'should return an url for the avatar' do
group = create(:group)
group.avatar = File.open(avatar_file_path)
group.save!
expect(group_icon(group.path).to_s).
- to match("/uploads/group/avatar/#{ group.id }/gitlab_logo.png")
+ to match("/uploads/group/avatar/#{ group.id }/banana_sample.gif")
end
it 'should give default avatar_icon when no avatar is present' do
diff --git a/spec/helpers/oauth_helper_spec.rb b/spec/helpers/oauth_helper_spec.rb
index 088c342fa13..3ef35f35102 100644
--- a/spec/helpers/oauth_helper_spec.rb
+++ b/spec/helpers/oauth_helper_spec.rb
@@ -17,4 +17,4 @@ describe OauthHelper do
expect(helper.additional_providers).to eq([])
end
end
-end \ No newline at end of file
+end
diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb
index 920de8c4325..d814b562113 100644
--- a/spec/helpers/preferences_helper_spec.rb
+++ b/spec/helpers/preferences_helper_spec.rb
@@ -61,7 +61,7 @@ describe PreferencesHelper do
(1..5).each do |color_scheme_id|
context "with color_scheme_id == #{color_scheme_id}" do
it 'should return a string' do
- current_user = double(:color_scheme_id => color_scheme_id)
+ current_user = double(color_scheme_id: color_scheme_id)
allow(self).to receive(:current_user).and_return(current_user)
expect(user_color_scheme_class).to be_kind_of(String)
end
diff --git a/spec/helpers/tab_helper_spec.rb b/spec/helpers/tab_helper_spec.rb
index fc0ceecfbe7..b473c0a7416 100644
--- a/spec/helpers/tab_helper_spec.rb
+++ b/spec/helpers/tab_helper_spec.rb
@@ -37,8 +37,8 @@ describe TabHelper do
end
it "passes extra html options to the list element" do
- expect(nav_link(action: :foo, html_options: {class: 'home'})).to match(/<li class="home active">/)
- expect(nav_link(html_options: {class: 'active'})).to match(/<li class="active">/)
+ expect(nav_link(action: :foo, html_options: { class: 'home' })).to match(/<li class="home active">/)
+ expect(nav_link(html_options: { class: 'active' })).to match(/<li class="active">/)
end
end
end
diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb
index 2013b3e4c2a..c70dd8076e0 100644
--- a/spec/helpers/tree_helper_spec.rb
+++ b/spec/helpers/tree_helper_spec.rb
@@ -4,10 +4,10 @@ describe TreeHelper do
describe 'flatten_tree' do
let(:project) { create(:project) }
- before {
+ before do
@repository = project.repository
@commit = project.commit("e56497bb")
- }
+ end
context "on a directory containing more than one file/directory" do
let(:tree_item) { double(name: "files", path: "files") }
diff --git a/spec/lib/disable_email_interceptor_spec.rb b/spec/lib/disable_email_interceptor_spec.rb
index 06d5450688b..a9624e9a2b7 100644
--- a/spec/lib/disable_email_interceptor_spec.rb
+++ b/spec/lib/disable_email_interceptor_spec.rb
@@ -7,9 +7,7 @@ describe DisableEmailInterceptor do
it 'should not send emails' do
allow(Gitlab.config.gitlab).to receive(:email_enabled).and_return(false)
- expect {
- deliver_mail
- }.not_to change(ActionMailer::Base.deliveries, :count)
+ expect { deliver_mail }.not_to change(ActionMailer::Base.deliveries, :count)
end
after do
diff --git a/spec/lib/extracts_path_spec.rb b/spec/lib/extracts_path_spec.rb
index 8e05e44defc..f077c80d478 100644
--- a/spec/lib/extracts_path_spec.rb
+++ b/spec/lib/extracts_path_spec.rb
@@ -18,7 +18,7 @@ describe ExtractsPath do
describe '#assign_ref' do
let(:ref) { sample_commit[:id] }
- let(:params) { {path: sample_commit[:line_code_path], ref: ref} }
+ let(:params) { { path: sample_commit[:line_code_path], ref: ref } }
before do
@project = create(:project)
diff --git a/spec/lib/file_size_validator_spec.rb b/spec/lib/file_size_validator_spec.rb
index 5c89c854714..12ccc051c74 100644
--- a/spec/lib/file_size_validator_spec.rb
+++ b/spec/lib/file_size_validator_spec.rb
@@ -9,9 +9,9 @@ describe 'Gitlab::FileSizeValidatorSpec' do
let(:options) { { maximum: 10, attributes: { attachment: attachment } } }
it 'attachment exceeds maximum limit' do
- allow(attachment).to receive(:size) { 100 }
- validator.validate_each(note, :attachment, attachment)
- expect(note.errors).to have_key(:attachment)
+ allow(attachment).to receive(:size) { 100 }
+ validator.validate_each(note, :attachment, attachment)
+ expect(note.errors).to have_key(:attachment)
end
it 'attachment under maximum limit' do
@@ -22,8 +22,13 @@ describe 'Gitlab::FileSizeValidatorSpec' do
end
describe 'options uses a symbol' do
- let(:options) { { maximum: :test,
- attributes: { attachment: attachment } } }
+ let(:options) do
+ {
+ maximum: :test,
+ attributes: { attachment: attachment }
+ }
+ end
+
before do
allow(note).to receive(:test) { 10 }
end
diff --git a/spec/lib/gitlab/asciidoc_spec.rb b/spec/lib/gitlab/asciidoc_spec.rb
index 23f83339ec5..03e36fd3552 100644
--- a/spec/lib/gitlab/asciidoc_spec.rb
+++ b/spec/lib/gitlab/asciidoc_spec.rb
@@ -11,8 +11,11 @@ module Gitlab
context "without project" do
it "should convert the input using Asciidoctor and default options" do
- expected_asciidoc_opts = { safe: :secure, backend: :html5,
- attributes: described_class::DEFAULT_ADOC_ATTRS }
+ expected_asciidoc_opts = {
+ safe: :secure,
+ backend: :html5,
+ attributes: described_class::DEFAULT_ADOC_ATTRS
+ }
expect(Asciidoctor).to receive(:convert)
.with(input, expected_asciidoc_opts).and_return(html)
@@ -22,11 +25,14 @@ module Gitlab
context "with asciidoc_opts" do
- let(:asciidoc_opts) { {safe: :safe, attributes: ['foo']} }
+ let(:asciidoc_opts) { { safe: :safe, attributes: ['foo'] } }
it "should merge the options with default ones" do
- expected_asciidoc_opts = { safe: :safe, backend: :html5,
- attributes: described_class::DEFAULT_ADOC_ATTRS + ['foo'] }
+ expected_asciidoc_opts = {
+ safe: :safe,
+ backend: :html5,
+ attributes: described_class::DEFAULT_ADOC_ATTRS + ['foo']
+ }
expect(Asciidoctor).to receive(:convert)
.with(input, expected_asciidoc_opts).and_return(html)
@@ -38,7 +44,7 @@ module Gitlab
context "with project in context" do
- let(:context) { {project: create(:project)} }
+ let(:context) { { project: create(:project) } }
it "should filter converted input via HTML pipeline and return result" do
filtered_html = '<b>ASCII</b>'
diff --git a/spec/lib/gitlab/backend/grack_auth_spec.rb b/spec/lib/gitlab/backend/grack_auth_spec.rb
index 42c9946d2a9..d9676445908 100644
--- a/spec/lib/gitlab/backend/grack_auth_spec.rb
+++ b/spec/lib/gitlab/backend/grack_auth_spec.rb
@@ -6,13 +6,13 @@ describe Grack::Auth do
let(:app) { lambda { |env| [200, {}, "Success!"] } }
let!(:auth) { Grack::Auth.new(app) }
- let(:env) {
+ let(:env) do
{
- "rack.input" => "",
- "REQUEST_METHOD" => "GET",
- "QUERY_STRING" => "service=git-upload-pack"
+ 'rack.input' => '',
+ 'REQUEST_METHOD' => 'GET',
+ 'QUERY_STRING' => 'service=git-upload-pack'
}
- }
+ end
let(:status) { auth.call(env).first }
describe "#call" do
@@ -121,7 +121,7 @@ describe Grack::Auth do
context "when the user isn't blocked" do
before do
- expect(Rack::Attack::Allow2Ban).to receive(:reset)
+ expect(Rack::Attack::Allow2Ban).to receive(:reset)
end
it "responds with status 200" do
diff --git a/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb b/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
index 0ec6a43f681..f8958c9bab8 100644
--- a/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
+++ b/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
@@ -2,24 +2,26 @@ require 'spec_helper'
describe Gitlab::BitbucketImport::ProjectCreator do
let(:user) { create(:user, bitbucket_access_token: "asdffg", bitbucket_access_token_secret: "sekret") }
- let(:repo) { {
- name: 'Vim',
- slug: 'vim',
- is_private: true,
- owner: "asd"}.with_indifferent_access
- }
+ let(:repo) do
+ {
+ name: 'Vim',
+ slug: 'vim',
+ is_private: true,
+ owner: "asd"
+ }.with_indifferent_access
+ end
let(:namespace){ create(:group, owner: user) }
before do
namespace.add_owner(user)
end
-
+
it 'creates project' do
allow_any_instance_of(Project).to receive(:add_import_job)
-
+
project_creator = Gitlab::BitbucketImport::ProjectCreator.new(repo, namespace, user)
project = project_creator.execute
-
+
expect(project.import_url).to eq("ssh://git@bitbucket.org/asd/vim.git")
expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
diff --git a/spec/lib/gitlab/github_import/project_creator_spec.rb b/spec/lib/gitlab/github_import/project_creator_spec.rb
index 3bf52cb685e..4fe7bd3b77d 100644
--- a/spec/lib/gitlab/github_import/project_creator_spec.rb
+++ b/spec/lib/gitlab/github_import/project_creator_spec.rb
@@ -2,14 +2,16 @@ require 'spec_helper'
describe Gitlab::GithubImport::ProjectCreator do
let(:user) { create(:user, github_access_token: "asdffg") }
- let(:repo) { OpenStruct.new(
- login: 'vim',
- name: 'vim',
- private: true,
- full_name: 'asd/vim',
- clone_url: "https://gitlab.com/asd/vim.git",
- owner: OpenStruct.new(login: "john"))
- }
+ let(:repo) do
+ OpenStruct.new(
+ login: 'vim',
+ name: 'vim',
+ private: true,
+ full_name: 'asd/vim',
+ clone_url: "https://gitlab.com/asd/vim.git",
+ owner: OpenStruct.new(login: "john")
+ )
+ end
let(:namespace){ create(:group, owner: user) }
before do
@@ -18,10 +20,10 @@ describe Gitlab::GithubImport::ProjectCreator do
it 'creates project' do
allow_any_instance_of(Project).to receive(:add_import_job)
-
+
project_creator = Gitlab::GithubImport::ProjectCreator.new(repo, namespace, user)
project = project_creator.execute
-
+
expect(project.import_url).to eq("https://asdffg@gitlab.com/asd/vim.git")
expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
diff --git a/spec/lib/gitlab/gitlab_import/project_creator_spec.rb b/spec/lib/gitlab/gitlab_import/project_creator_spec.rb
index 3cefe4ea8e2..938d08396fd 100644
--- a/spec/lib/gitlab/gitlab_import/project_creator_spec.rb
+++ b/spec/lib/gitlab/gitlab_import/project_creator_spec.rb
@@ -2,14 +2,16 @@ require 'spec_helper'
describe Gitlab::GitlabImport::ProjectCreator do
let(:user) { create(:user, gitlab_access_token: "asdffg") }
- let(:repo) { {
- name: 'vim',
- path: 'vim',
- visibility_level: Gitlab::VisibilityLevel::PRIVATE,
- path_with_namespace: 'asd/vim',
- http_url_to_repo: "https://gitlab.com/asd/vim.git",
- owner: {name: "john"}}.with_indifferent_access
- }
+ let(:repo) do
+ {
+ name: 'vim',
+ path: 'vim',
+ visibility_level: Gitlab::VisibilityLevel::PRIVATE,
+ path_with_namespace: 'asd/vim',
+ http_url_to_repo: "https://gitlab.com/asd/vim.git",
+ owner: { name: "john" }
+ }.with_indifferent_access
+ end
let(:namespace){ create(:group, owner: user) }
before do
@@ -18,10 +20,10 @@ describe Gitlab::GitlabImport::ProjectCreator do
it 'creates project' do
allow_any_instance_of(Project).to receive(:add_import_job)
-
+
project_creator = Gitlab::GitlabImport::ProjectCreator.new(repo, namespace, user)
project = project_creator.execute
-
+
expect(project.import_url).to eq("https://oauth2:asdffg@gitlab.com/asd/vim.git")
expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
diff --git a/spec/lib/gitlab/google_code_import/importer_spec.rb b/spec/lib/gitlab/google_code_import/importer_spec.rb
index 6a7a31239c3..c53ddeb87b5 100644
--- a/spec/lib/gitlab/google_code_import/importer_spec.rb
+++ b/spec/lib/gitlab/google_code_import/importer_spec.rb
@@ -4,16 +4,15 @@ describe Gitlab::GoogleCodeImport::Importer do
let(:mapped_user) { create(:user, username: "thilo123") }
let(:raw_data) { JSON.parse(File.read(Rails.root.join("spec/fixtures/GoogleCodeProjectHosting.json"))) }
let(:client) { Gitlab::GoogleCodeImport::Client.new(raw_data) }
- let(:import_data) {
+ let(:import_data) do
{
- "repo" => client.repo("tint2").raw_data,
- "user_map" => {
- "thilo..." => "@#{mapped_user.username}"
- }
- }
- }
+ 'repo' => client.repo('tint2').raw_data,
+ 'user_map' => { 'thilo...' => "@#{mapped_user.username}" }
+ }
+ end
let(:project) { create(:project) }
- subject { described_class.new(project) }
+
+ subject { described_class.new(project) }
before do
project.create_import_data(data: import_data)
diff --git a/spec/lib/gitlab/google_code_import/project_creator_spec.rb b/spec/lib/gitlab/google_code_import/project_creator_spec.rb
index 7a224538b8b..35549b48687 100644
--- a/spec/lib/gitlab/google_code_import/project_creator_spec.rb
+++ b/spec/lib/gitlab/google_code_import/project_creator_spec.rb
@@ -2,13 +2,13 @@ require 'spec_helper'
describe Gitlab::GoogleCodeImport::ProjectCreator do
let(:user) { create(:user) }
- let(:repo) {
+ let(:repo) do
Gitlab::GoogleCodeImport::Repository.new(
- "name" => 'vim',
- "summary" => 'VI Improved',
- "repositoryUrls" => [ "https://vim.googlecode.com/git/" ]
+ "name" => 'vim',
+ "summary" => 'VI Improved',
+ "repositoryUrls" => ["https://vim.googlecode.com/git/"]
)
- }
+ end
let(:namespace){ create(:group, owner: user) }
before do
@@ -20,7 +20,7 @@ describe Gitlab::GoogleCodeImport::ProjectCreator do
project_creator = Gitlab::GoogleCodeImport::ProjectCreator.new(repo, namespace, user)
project = project_creator.execute
-
+
expect(project.import_url).to eq("https://vim.googlecode.com/git/")
expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PUBLIC)
end
diff --git a/spec/lib/gitlab/markdown/autolink_filter_spec.rb b/spec/lib/gitlab/markdown/autolink_filter_spec.rb
index a14cb2da089..982be0782c9 100644
--- a/spec/lib/gitlab/markdown/autolink_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/autolink_filter_spec.rb
@@ -48,7 +48,7 @@ module Gitlab::Markdown
end
it 'accepts link_attr options' do
- doc = filter("See #{link}", link_attr: {class: 'custom'})
+ doc = filter("See #{link}", link_attr: { class: 'custom' })
expect(doc.at_css('a')['class']).to eq 'custom'
end
@@ -89,7 +89,7 @@ module Gitlab::Markdown
end
it 'accepts link_attr options' do
- doc = filter("See #{link}", link_attr: {class: 'custom'})
+ doc = filter("See #{link}", link_attr: { class: 'custom' })
expect(doc.at_css('a')['class']).to eq 'custom'
end
diff --git a/spec/lib/gitlab/markdown/label_reference_filter_spec.rb b/spec/lib/gitlab/markdown/label_reference_filter_spec.rb
index cf3337b1ba1..e9f8ed277a5 100644
--- a/spec/lib/gitlab/markdown/label_reference_filter_spec.rb
+++ b/spec/lib/gitlab/markdown/label_reference_filter_spec.rb
@@ -127,7 +127,7 @@ module Gitlab::Markdown
it 'gracefully handles non-references matching the pattern' do
exp = act = '(format nil "~0f" 3.0) ; 3.0'
expect(filter(act).to_html).to eq exp
- end
+ end
end
end
end
diff --git a/spec/lib/gitlab/o_auth/auth_hash_spec.rb b/spec/lib/gitlab/o_auth/auth_hash_spec.rb
index 5404b506813..4c0a4a49d2a 100644
--- a/spec/lib/gitlab/o_auth/auth_hash_spec.rb
+++ b/spec/lib/gitlab/o_auth/auth_hash_spec.rb
@@ -11,9 +11,9 @@ describe Gitlab::OAuth::AuthHash do
)
end
- let(:uid_raw) {
+ let(:uid_raw) do
"CN=Onur K\xC3\xBC\xC3\xA7\xC3\xBCk,OU=Test,DC=example,DC=net"
- }
+ end
let(:email_raw) { "onur.k\xC3\xBC\xC3\xA7\xC3\xBCk@example.net" }
let(:nickname_raw) { "ok\xC3\xBC\xC3\xA7\xC3\xBCk" }
let(:first_name_raw) { 'Onur' }
@@ -34,16 +34,16 @@ describe Gitlab::OAuth::AuthHash do
let(:nickname_utf8) { nickname_ascii.force_encoding(Encoding::UTF_8) }
let(:name_utf8) { name_ascii.force_encoding(Encoding::UTF_8) }
- let(:info_hash) {
+ let(:info_hash) do
{
- email: email_ascii,
+ email: email_ascii,
first_name: first_name_ascii,
- last_name: last_name_ascii,
- name: name_ascii,
- nickname: nickname_ascii,
- uid: uid_ascii
+ last_name: last_name_ascii,
+ name: name_ascii,
+ nickname: nickname_ascii,
+ uid: uid_ascii
}
- }
+ end
context 'defaults' do
it { expect(auth_hash.provider).to eql provider_utf8 }
diff --git a/spec/lib/gitlab/popen_spec.rb b/spec/lib/gitlab/popen_spec.rb
index f80d306cfc6..e53efec6c67 100644
--- a/spec/lib/gitlab/popen_spec.rb
+++ b/spec/lib/gitlab/popen_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'
describe 'Gitlab::Popen', no_db: true do
- let (:path) { Rails.root.join('tmp').to_s }
+ let(:path) { Rails.root.join('tmp').to_s }
before do
@klass = Class.new(Object)
@@ -40,6 +40,4 @@ describe 'Gitlab::Popen', no_db: true do
it { expect(@status).to be_zero }
it { expect(@output).to include('spec') }
end
-
end
-
diff --git a/spec/lib/gitlab/satellite/action_spec.rb b/spec/lib/gitlab/satellite/action_spec.rb
index 28e3d64ee2b..0a93676edc3 100644
--- a/spec/lib/gitlab/satellite/action_spec.rb
+++ b/spec/lib/gitlab/satellite/action_spec.rb
@@ -17,15 +17,13 @@ describe 'Gitlab::Satellite::Action' do
starting_remote_count = repo.git.list_remotes.size
expect(starting_remote_count).to be >= 1
#kind of hookey way to add a second remote
- origin_uri = repo.git.remote({v: true}).split(" ")[1]
- begin
- repo.git.remote({raise: true}, 'add', 'another-remote', origin_uri)
- repo.git.branch({raise: true}, 'a-new-branch')
+ origin_uri = repo.git.remote({ v: true }).split(" ")[1]
+
+ repo.git.remote({ raise: true }, 'add', 'another-remote', origin_uri)
+ repo.git.branch({ raise: true }, 'a-new-branch')
expect(repo.heads.size).to be > (starting_remote_count)
expect(repo.git.remote().split(" ").size).to be > (starting_remote_count)
- rescue
- end
repo.git.config({}, "user.name", "#{user.name} -- foo")
repo.git.config({}, "user.email", "#{user.email} -- foo")
@@ -35,10 +33,10 @@ describe 'Gitlab::Satellite::Action' do
#These must happen in the context of the satellite directory...
satellite_action = Gitlab::Satellite::Action.new(user, project)
- project.satellite.lock {
+ project.satellite.lock do
#Now clean it up, use send to get around prepare_satellite! being protected
satellite_action.send(:prepare_satellite!, repo)
- }
+ end
#verify it's clean
heads = repo.heads.map(&:name)
@@ -100,16 +98,16 @@ describe 'Gitlab::Satellite::Action' do
def flocked?(&block)
status = flock LOCK_EX|LOCK_NB
case status
- when false
- return true
- when 0
- begin
- block ? block.call : false
- ensure
- flock LOCK_UN
- end
- else
- raise SystemCallError, status
+ when false
+ return true
+ when 0
+ begin
+ block ? block.call : false
+ ensure
+ flock LOCK_UN
+ end
+ else
+ raise SystemCallError, status
end
end
end
diff --git a/spec/lib/gitlab/satellite/merge_action_spec.rb b/spec/lib/gitlab/satellite/merge_action_spec.rb
index 5cc8b0f21fb..9b1c9a34e29 100644
--- a/spec/lib/gitlab/satellite/merge_action_spec.rb
+++ b/spec/lib/gitlab/satellite/merge_action_spec.rb
@@ -82,23 +82,23 @@ describe 'Gitlab::Satellite::MergeAction' do
describe '#can_be_merged?' do
context 'on fork' do
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request_fork.author,
- merge_request_fork).can_be_merged?).to be_truthy }
+ it do
+ expect(Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).can_be_merged?).to be_truthy
+ end
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request_fork_with_conflict.author,
- merge_request_fork_with_conflict).can_be_merged?).to be_falsey }
+ it do
+ expect(Gitlab::Satellite::MergeAction.new(merge_request_fork_with_conflict.author, merge_request_fork_with_conflict).can_be_merged?).to be_falsey
+ end
end
context 'between branches' do
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request.author,
- merge_request).can_be_merged?).to be_truthy }
+ it do
+ expect(Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).can_be_merged?).to be_truthy
+ end
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request_with_conflict.author,
- merge_request_with_conflict).can_be_merged?).to be_falsey }
+ it do
+ expect(Gitlab::Satellite::MergeAction.new(merge_request_with_conflict.author, merge_request_with_conflict).can_be_merged?).to be_falsey
+ end
end
end
end
diff --git a/spec/lib/gitlab/version_info_spec.rb b/spec/lib/gitlab/version_info_spec.rb
index 5afeb1c1ec3..18f71b40fe0 100644
--- a/spec/lib/gitlab/version_info_spec.rb
+++ b/spec/lib/gitlab/version_info_spec.rb
@@ -66,4 +66,3 @@ describe 'Gitlab::VersionInfo', no_db: true do
it { expect(@unknown.to_s).to eq("Unknown") }
end
end
-
diff --git a/spec/lib/votes_spec.rb b/spec/lib/votes_spec.rb
index df243a26008..39e5d054e62 100644
--- a/spec/lib/votes_spec.rb
+++ b/spec/lib/votes_spec.rb
@@ -179,7 +179,10 @@ describe Issue, 'Votes' do
def add_note(text, author = issue.author)
created_at = Time.now - 1.hour + Note.count.seconds
- issue.notes << create(:note, note: text, project: issue.project,
- author_id: author.id, created_at: created_at)
+ issue.notes << create(:note,
+ note: text,
+ project: issue.project,
+ author_id: author.id,
+ created_at: created_at)
end
end
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index 89853d05161..97c07ad7d55 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -419,9 +419,7 @@ describe Notify do
describe 'project access changed' do
let(:project) { create(:project) }
let(:user) { create(:user) }
- let(:project_member) { create(:project_member,
- project: project,
- user: user) }
+ let(:project_member) { create(:project_member, project: project, user: user) }
subject { Notify.project_access_granted_email(project_member.id) }
it_behaves_like 'an email sent from GitLab'
diff --git a/spec/models/commit_range_spec.rb b/spec/models/commit_range_spec.rb
index e3ab4812464..1031af097bd 100644
--- a/spec/models/commit_range_spec.rb
+++ b/spec/models/commit_range_spec.rb
@@ -60,11 +60,11 @@ describe CommitRange do
end
it 'includes the correct values for a three-dot range' do
- expect(range.to_param).to eq({from: sha_from, to: sha_to})
+ expect(range.to_param).to eq({ from: sha_from, to: sha_to })
end
it 'includes the correct values for a two-dot range' do
- expect(range2.to_param).to eq({from: sha_from + '^', to: sha_to})
+ expect(range2.to_param).to eq({ from: sha_from + '^', to: sha_to })
end
end
diff --git a/spec/models/deploy_keys_project_spec.rb b/spec/models/deploy_keys_project_spec.rb
index 705ef257d86..0eb22599d18 100644
--- a/spec/models/deploy_keys_project_spec.rb
+++ b/spec/models/deploy_keys_project_spec.rb
@@ -44,9 +44,7 @@ describe DeployKeysProject do
it "destroys the deploy key" do
subject.destroy
- expect {
- deploy_key.reload
- }.to raise_error(ActiveRecord::RecordNotFound)
+ expect { deploy_key.reload }.to raise_error(ActiveRecord::RecordNotFound)
end
end
end
diff --git a/spec/models/hooks/service_hook_spec.rb b/spec/models/hooks/service_hook_spec.rb
index a218b327d76..4c8b8910ae7 100644
--- a/spec/models/hooks/service_hook_spec.rb
+++ b/spec/models/hooks/service_hook_spec.rb
@@ -26,7 +26,7 @@ describe ServiceHook do
describe "execute" do
before(:each) do
@service_hook = create(:service_hook)
- @data = { project_id: 1, data: {}}
+ @data = { project_id: 1, data: {} }
WebMock.stub_request(:post, @service_hook.url)
end
@@ -34,7 +34,7 @@ describe ServiceHook do
it "POSTs to the web hook URL" do
@service_hook.execute(@data)
expect(WebMock).to have_requested(:post, @service_hook.url).with(
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Service Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Service Hook' }
).once
end
@@ -43,16 +43,14 @@ describe ServiceHook do
@service_hook.execute(@data)
expect(WebMock).to have_requested(:post, @service_hook.url).with(
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Service Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Service Hook' }
).once
end
it "catches exceptions" do
expect(WebHook).to receive(:post).and_raise("Some HTTP Post error")
- expect {
- @service_hook.execute(@data)
- }.to raise_error(RuntimeError)
+ expect { @service_hook.execute(@data) }.to raise_error(RuntimeError)
end
end
end
diff --git a/spec/models/hooks/system_hook_spec.rb b/spec/models/hooks/system_hook_spec.rb
index edb21fc2e47..4175f9dd88f 100644
--- a/spec/models/hooks/system_hook_spec.rb
+++ b/spec/models/hooks/system_hook_spec.rb
@@ -29,7 +29,7 @@ describe SystemHook do
Projects::CreateService.new(create(:user), name: 'empty').execute
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /project_create/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -39,7 +39,7 @@ describe SystemHook do
Projects::DestroyService.new(project, user, {}).execute
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /project_destroy/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -47,7 +47,7 @@ describe SystemHook do
create(:user)
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /user_create/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -56,7 +56,7 @@ describe SystemHook do
user.destroy
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /user_destroy/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -66,7 +66,7 @@ describe SystemHook do
project.team << [user, :master]
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /user_add_to_team/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -77,7 +77,7 @@ describe SystemHook do
project.project_members.destroy_all
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /user_remove_from_team/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -85,7 +85,7 @@ describe SystemHook do
create(:group)
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /group_create/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -94,7 +94,7 @@ describe SystemHook do
group.destroy
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /group_destroy/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -104,7 +104,7 @@ describe SystemHook do
group.add_user(user, Gitlab::Access::MASTER)
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /user_add_to_group/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
@@ -115,7 +115,7 @@ describe SystemHook do
group.group_members.destroy_all
expect(WebMock).to have_requested(:post, @system_hook.url).with(
body: /user_remove_from_group/,
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'System Hook' }
).once
end
diff --git a/spec/models/hooks/web_hook_spec.rb b/spec/models/hooks/web_hook_spec.rb
index b51e6b4e619..23f30881d99 100644
--- a/spec/models/hooks/web_hook_spec.rb
+++ b/spec/models/hooks/web_hook_spec.rb
@@ -47,7 +47,7 @@ describe ProjectHook do
@project_hook = create(:project_hook)
@project = create(:project)
@project.hooks << [@project_hook]
- @data = { before: 'oldrev', after: 'newrev', ref: 'ref'}
+ @data = { before: 'oldrev', after: 'newrev', ref: 'ref' }
WebMock.stub_request(:post, @project_hook.url)
end
@@ -55,7 +55,7 @@ describe ProjectHook do
it "POSTs to the web hook URL" do
@project_hook.execute(@data, 'push_hooks')
expect(WebMock).to have_requested(:post, @project_hook.url).with(
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook' }
).once
end
@@ -64,16 +64,14 @@ describe ProjectHook do
@project_hook.execute(@data, 'push_hooks')
expect(WebMock).to have_requested(:post, @project_hook.url).with(
- headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook'}
+ headers: { 'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook' }
).once
end
it "catches exceptions" do
expect(WebHook).to receive(:post).and_raise("Some HTTP Post error")
- expect {
- @project_hook.execute(@data, 'push_hooks')
- }.to raise_error(RuntimeError)
+ expect { @project_hook.execute(@data, 'push_hooks') }.to raise_error(RuntimeError)
end
end
end
diff --git a/spec/models/project_security_spec.rb b/spec/models/project_security_spec.rb
index 1ee19003543..f600a240c46 100644
--- a/spec/models/project_security_spec.rb
+++ b/spec/models/project_security_spec.rb
@@ -110,17 +110,3 @@ describe Project do
end
end
end
-# == Schema Information
-#
-# Table name: projects
-#
-# id :integer not null, primary key
-# name :string(255)
-# path :string(255)
-# description :text
-# created_at :datetime
-# updated_at :datetime
-# private_flag :boolean default(TRUE), not null
-# code :string(255)
-#
-
diff --git a/spec/models/project_services/hipchat_service_spec.rb b/spec/models/project_services/hipchat_service_spec.rb
index 8ed03dd1da8..4707673269a 100644
--- a/spec/models/project_services/hipchat_service_spec.rb
+++ b/spec/models/project_services/hipchat_service_spec.rb
@@ -241,17 +241,17 @@ describe HipchatService do
context "#message_options" do
it "should be set to the defaults" do
- expect(hipchat.send(:message_options)).to eq({notify: false, color: 'yellow'})
+ expect(hipchat.send(:message_options)).to eq({ notify: false, color: 'yellow' })
end
it "should set notfiy to true" do
allow(hipchat).to receive(:notify).and_return('1')
- expect(hipchat.send(:message_options)).to eq({notify: true, color: 'yellow'})
+ expect(hipchat.send(:message_options)).to eq({ notify: true, color: 'yellow' })
end
it "should set the color" do
allow(hipchat).to receive(:color).and_return('red')
- expect(hipchat.send(:message_options)).to eq({notify: false, color: 'red'})
+ expect(hipchat.send(:message_options)).to eq({ notify: false, color: 'red' })
end
end
end
diff --git a/spec/models/project_services/slack_service/issue_message_spec.rb b/spec/models/project_services/slack_service/issue_message_spec.rb
index 8bca1fef44c..b78d92f23a1 100644
--- a/spec/models/project_services/slack_service/issue_message_spec.rb
+++ b/spec/models/project_services/slack_service/issue_message_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe SlackService::IssueMessage do
subject { SlackService::IssueMessage.new(args) }
- let(:args) {
+ let(:args) do
{
user: {
name: 'Test User',
@@ -23,7 +23,7 @@ describe SlackService::IssueMessage do
description: 'issue description'
}
}
- }
+ end
let(:color) { '#345' }
diff --git a/spec/models/project_services/slack_service/merge_message_spec.rb b/spec/models/project_services/slack_service/merge_message_spec.rb
index aeb408aa766..581c50d6c88 100644
--- a/spec/models/project_services/slack_service/merge_message_spec.rb
+++ b/spec/models/project_services/slack_service/merge_message_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe SlackService::MergeMessage do
subject { SlackService::MergeMessage.new(args) }
- let(:args) {
+ let(:args) do
{
user: {
name: 'Test User',
@@ -24,7 +24,7 @@ describe SlackService::MergeMessage do
target_branch: 'target_branch',
}
}
- }
+ end
let(:color) { '#345' }
diff --git a/spec/models/project_services/slack_service/push_message_spec.rb b/spec/models/project_services/slack_service/push_message_spec.rb
index 10963481a12..ddc290820d1 100644
--- a/spec/models/project_services/slack_service/push_message_spec.rb
+++ b/spec/models/project_services/slack_service/push_message_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe SlackService::PushMessage do
subject { SlackService::PushMessage.new(args) }
- let(:args) {
+ let(:args) do
{
after: 'after',
before: 'before',
@@ -12,7 +12,7 @@ describe SlackService::PushMessage do
user_name: 'user_name',
project_url: 'url'
}
- }
+ end
let(:color) { '#345' }
@@ -40,16 +40,16 @@ describe SlackService::PushMessage do
end
context 'tag push' do
- let(:args) {
+ let(:args) do
{
- after: 'after',
- before: Gitlab::Git::BLANK_SHA,
- project_name: 'project_name',
- ref: 'refs/tags/new_tag',
- user_name: 'user_name',
- project_url: 'url'
+ after: 'after',
+ before: Gitlab::Git::BLANK_SHA,
+ project_name: 'project_name',
+ ref: 'refs/tags/new_tag',
+ user_name: 'user_name',
+ project_url: 'url'
}
- }
+ end
it 'returns a message regarding pushes' do
expect(subject.pretext).to eq('user_name pushed new tag ' \
diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb
index 19201cc15a7..d125166e336 100644
--- a/spec/models/project_team_spec.rb
+++ b/spec/models/project_team_spec.rb
@@ -67,4 +67,3 @@ describe ProjectTeam do
end
end
end
-
diff --git a/spec/models/project_wiki_spec.rb b/spec/models/project_wiki_spec.rb
index 2acdb7dfddc..f785203af7d 100644
--- a/spec/models/project_wiki_spec.rb
+++ b/spec/models/project_wiki_spec.rb
@@ -231,7 +231,7 @@ describe ProjectWiki do
end
def commit_details
- commit = {name: user.name, email: user.email, message: "test commit"}
+ commit = { name: user.name, email: user.email, message: "test commit" }
end
def create_page(name, content)
diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb
index cb633216d3b..ca11758ee06 100644
--- a/spec/models/service_spec.rb
+++ b/spec/models/service_spec.rb
@@ -36,7 +36,7 @@ describe Service do
end
describe "Testable" do
- let (:project) { create :project }
+ let(:project) { create :project }
before do
allow(@service).to receive(:project).and_return(project)
@@ -49,7 +49,7 @@ describe Service do
end
describe "With commits" do
- let (:project) { create :project }
+ let(:project) { create :project }
before do
allow(@service).to receive(:project).and_return(project)
@@ -64,9 +64,16 @@ describe Service do
describe "Template" do
describe "for pushover service" do
- let(:service_template) {
- PushoverService.create(template: true, properties: {device: 'MyDevice', sound: 'mic', priority: 4, api_key: '123456789'})
- }
+ let(:service_template) do
+ PushoverService.create(
+ template: true,
+ properties: {
+ device: 'MyDevice',
+ sound: 'mic',
+ priority: 4,
+ api_key: '123456789'
+ })
+ end
let(:project) { create(:project) }
describe 'should be prefilled for projects pushover service' do
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 9f7c83f3476..b80273c053d 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -50,12 +50,12 @@
# bitbucket_access_token :string(255)
# bitbucket_access_token_secret :string(255)
# location :string(255)
-# public_email :string(255) default(""), not null
# encrypted_otp_secret :string(255)
# encrypted_otp_secret_iv :string(255)
# encrypted_otp_secret_salt :string(255)
-# otp_required_for_login :boolean
+# otp_required_for_login :boolean default(FALSE), not null
# otp_backup_codes :text
+# public_email :string(255) default(""), not null
# dashboard :integer default(0)
#
@@ -210,30 +210,6 @@ describe User do
end
end
- describe '#two_factor_enabled' do
- it 'returns two-factor authentication status' do
- enabled = build_stubbed(:user, two_factor_enabled: true)
- disabled = build_stubbed(:user)
-
- expect(enabled).to be_two_factor_enabled
- expect(disabled).not_to be_two_factor_enabled
- end
- end
-
- describe '#two_factor_enabled=' do
- it 'enables two-factor authentication' do
- user = build_stubbed(:user, two_factor_enabled: false)
- expect { user.two_factor_enabled = true }.
- to change { user.two_factor_enabled? }.to(true)
- end
-
- it 'disables two-factor authentication' do
- user = build_stubbed(:user, two_factor_enabled: true)
- expect { user.two_factor_enabled = false }.
- to change { user.two_factor_enabled? }.to(false)
- end
- end
-
describe 'authentication token' do
it "should have authentication token" do
user = create(:user)
@@ -308,18 +284,44 @@ describe User do
end
end
- describe 'filter' do
- before do
- User.delete_all
- @user = create :user
- @admin = create :user, admin: true
- @blocked = create :user, state: :blocked
+ describe '.filter' do
+ let(:user) { double }
+
+ it 'filters by active users by default' do
+ expect(User).to receive(:active).and_return([user])
+
+ expect(User.filter(nil)).to include user
+ end
+
+ it 'filters by admins' do
+ expect(User).to receive(:admins).and_return([user])
+
+ expect(User.filter('admins')).to include user
end
- it { expect(User.filter("admins")).to eq([@admin]) }
- it { expect(User.filter("blocked")).to eq([@blocked]) }
- it { expect(User.filter("wop")).to include(@user, @admin, @blocked) }
- it { expect(User.filter(nil)).to include(@user, @admin) }
+ it 'filters by blocked' do
+ expect(User).to receive(:blocked).and_return([user])
+
+ expect(User.filter('blocked')).to include user
+ end
+
+ it 'filters by two_factor_disabled' do
+ expect(User).to receive(:without_two_factor).and_return([user])
+
+ expect(User.filter('two_factor_disabled')).to include user
+ end
+
+ it 'filters by two_factor_enabled' do
+ expect(User).to receive(:with_two_factor).and_return([user])
+
+ expect(User.filter('two_factor_enabled')).to include user
+ end
+
+ it 'filters by wop' do
+ expect(User).to receive(:without_projects).and_return([user])
+
+ expect(User.filter('wop')).to include user
+ end
end
describe :not_in_project do
diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb
index fceb7668cac..dc84a14bb40 100644
--- a/spec/models/wiki_page_spec.rb
+++ b/spec/models/wiki_page_spec.rb
@@ -43,7 +43,7 @@ describe WikiPage do
describe "validations" do
before do
- subject.attributes = {title: 'title', content: 'content'}
+ subject.attributes = { title: 'title', content: 'content' }
end
it "validates presence of title" do
@@ -58,7 +58,7 @@ describe WikiPage do
end
before do
- @wiki_attr = {title: "Index", content: "Home Page", format: "markdown"}
+ @wiki_attr = { title: "Index", content: "Home Page", format: "markdown" }
end
describe "#create" do
@@ -82,7 +82,7 @@ describe WikiPage do
let(:title) { 'Index v1.2.3' }
before do
- @wiki_attr = {title: title, content: "Home Page", format: "markdown"}
+ @wiki_attr = { title: title, content: "Home Page", format: "markdown" }
end
describe "#create" do
@@ -196,7 +196,7 @@ describe WikiPage do
end
def commit_details
- commit = {name: user.name, email: user.email, message: "test commit"}
+ commit = { name: user.name, email: user.email, message: "test commit" }
end
def create_page(name, content)
diff --git a/spec/requests/api/doorkeeper_access_spec.rb b/spec/requests/api/doorkeeper_access_spec.rb
index 39949a90422..0afc3e79339 100644
--- a/spec/requests/api/doorkeeper_access_spec.rb
+++ b/spec/requests/api/doorkeeper_access_spec.rb
@@ -4,20 +4,20 @@ describe API::API, api: true do
include ApiHelpers
let!(:user) { create(:user) }
- let!(:application) { Doorkeeper::Application.create!(:name => "MyApp", :redirect_uri => "https://app.com", :owner => user) }
- let!(:token) { Doorkeeper::AccessToken.create! :application_id => application.id, :resource_owner_id => user.id }
+ let!(:application) { Doorkeeper::Application.create!(name: "MyApp", redirect_uri: "https://app.com", owner: user) }
+ let!(:token) { Doorkeeper::AccessToken.create! application_id: application.id, resource_owner_id: user.id }
+
-
describe "when unauthenticated" do
it "returns authentication success" do
- get api("/user"), :access_token => token.token
+ get api("/user"), access_token: token.token
expect(response.status).to eq(200)
end
end
describe "when token invalid" do
it "returns authentication error" do
- get api("/user"), :access_token => "123a"
+ get api("/user"), access_token: "123a"
expect(response.status).to eq(401)
end
end
diff --git a/spec/requests/api/files_spec.rb b/spec/requests/api/files_spec.rb
index 8a6b4b8a170..6c7860511e8 100644
--- a/spec/requests/api/files_spec.rb
+++ b/spec/requests/api/files_spec.rb
@@ -39,14 +39,14 @@ describe API::API, api: true do
end
describe "POST /projects/:id/repository/files" do
- let(:valid_params) {
+ let(:valid_params) do
{
file_path: 'newfile.rb',
branch_name: 'master',
content: 'puts 8',
commit_message: 'Added newfile'
}
- }
+ end
it "should create a new file in project repo" do
post api("/projects/#{project.id}/repository/files", user), valid_params
@@ -69,14 +69,14 @@ describe API::API, api: true do
end
describe "PUT /projects/:id/repository/files" do
- let(:valid_params) {
+ let(:valid_params) do
{
file_path: file_path,
branch_name: 'master',
content: 'puts 8',
commit_message: 'Changed file'
}
- }
+ end
it "should update existing file in project repo" do
put api("/projects/#{project.id}/repository/files", user), valid_params
@@ -91,13 +91,13 @@ describe API::API, api: true do
end
describe "DELETE /projects/:id/repository/files" do
- let(:valid_params) {
+ let(:valid_params) do
{
file_path: file_path,
branch_name: 'master',
commit_message: 'Changed file'
}
- }
+ end
it "should delete existing file in project repo" do
delete api("/projects/#{project.id}/repository/files", user), valid_params
diff --git a/spec/requests/api/fork_spec.rb b/spec/requests/api/fork_spec.rb
index 7a784796031..3fe7efff5ba 100644
--- a/spec/requests/api/fork_spec.rb
+++ b/spec/requests/api/fork_spec.rb
@@ -6,15 +6,14 @@ describe API::API, api: true do
let(:user2) { create(:user) }
let(:user3) { create(:user) }
let(:admin) { create(:admin) }
- let(:project) {
- create(:project, creator_id: user.id,
- namespace: user.namespace)
- }
- let(:project_user2) {
- create(:project_member, user: user2,
- project: project,
- access_level: ProjectMember::GUEST)
- }
+
+ let(:project) do
+ create(:project, creator_id: user.id, namespace: user.namespace)
+ end
+
+ let(:project_user2) do
+ create(:project_member, user: user2, project: project, access_level: ProjectMember::GUEST)
+ end
describe 'POST /projects/fork/:id' do
before { project_user2 }
diff --git a/spec/requests/api/group_members_spec.rb b/spec/requests/api/group_members_spec.rb
index 8ba6876a95b..dd5baa44cb2 100644
--- a/spec/requests/api/group_members_spec.rb
+++ b/spec/requests/api/group_members_spec.rb
@@ -61,10 +61,9 @@ describe API::API, api: true do
it "should return ok and add new member" do
new_user = create(:user)
- expect {
- post api("/groups/#{group_no_members.id}/members", owner),
- user_id: new_user.id, access_level: GroupMember::MASTER
- }.to change { group_no_members.members.count }.by(1)
+ expect do
+ post api("/groups/#{group_no_members.id}/members", owner), user_id: new_user.id, access_level: GroupMember::MASTER
+ end.to change { group_no_members.members.count }.by(1)
expect(response.status).to eq(201)
expect(json_response['name']).to eq(new_user.name)
@@ -74,10 +73,9 @@ describe API::API, api: true do
it "should not allow guest to modify group members" do
new_user = create(:user)
- expect {
- post api("/groups/#{group_with_members.id}/members", guest),
- user_id: new_user.id, access_level: GroupMember::MASTER
- }.not_to change { group_with_members.members.count }
+ expect do
+ post api("/groups/#{group_with_members.id}/members", guest), user_id: new_user.id, access_level: GroupMember::MASTER
+ end.not_to change { group_with_members.members.count }
expect(response.status).to eq(403)
end
@@ -178,9 +176,9 @@ describe API::API, api: true do
context "when a member of the group" do
it "should delete guest's membership of group" do
- expect {
+ expect do
delete api("/groups/#{group_with_members.id}/members/#{guest.id}", owner)
- }.to change { group_with_members.members.count }.by(-1)
+ end.to change { group_with_members.members.count }.by(-1)
expect(response.status).to eq(200)
end
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index 56aa97adcc3..c5a4ac7e4c4 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -109,18 +109,18 @@ describe API::API, api: true do
end
it "should not create group, duplicate" do
- post api("/groups", user3), {name: 'Duplicate Test', path: group2.path}
+ post api("/groups", user3), { name: 'Duplicate Test', path: group2.path }
expect(response.status).to eq(400)
expect(response.message).to eq("Bad Request")
end
it "should return 400 bad request error if name not given" do
- post api("/groups", user3), {path: group2.path}
+ post api("/groups", user3), { path: group2.path }
expect(response.status).to eq(400)
end
it "should return 400 bad request error if path not given" do
- post api("/groups", user3), {name: 'test'}
+ post api("/groups", user3), { name: 'test' }
expect(response.status).to eq(400)
end
end
diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb
index 2887221fb46..7030c105b58 100644
--- a/spec/requests/api/merge_requests_spec.rb
+++ b/spec/requests/api/merge_requests_spec.rb
@@ -8,9 +8,10 @@ describe API::API, api: true do
let!(:merge_request_closed) { create(:merge_request, state: "closed", author: user, assignee: user, source_project: project, target_project: project, title: "Closed test") }
let!(:merge_request_merged) { create(:merge_request, state: "merged", author: user, assignee: user, source_project: project, target_project: project, title: "Merged test") }
let!(:note) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "a comment on a MR") }
- before {
+
+ before do
project.team << [user, :reporters]
- }
+ end
describe "GET /projects/:id/merge_requests" do
context "when unauthenticated" do
diff --git a/spec/requests/api/project_hooks_spec.rb b/spec/requests/api/project_hooks_spec.rb
index 81fe68de662..5037575d355 100644
--- a/spec/requests/api/project_hooks_spec.rb
+++ b/spec/requests/api/project_hooks_spec.rb
@@ -61,10 +61,9 @@ describe API::API, 'ProjectHooks', api: true do
describe "POST /projects/:id/hooks" do
it "should add hook to project" do
- expect {
- post api("/projects/#{project.id}/hooks", user),
- url: "http://example.com", issues_events: true
- }.to change {project.hooks.count}.by(1)
+ expect do
+ post api("/projects/#{project.id}/hooks", user), url: "http://example.com", issues_events: true
+ end.to change {project.hooks.count}.by(1)
expect(response.status).to eq(201)
end
@@ -105,9 +104,9 @@ describe API::API, 'ProjectHooks', api: true do
describe "DELETE /projects/:id/hooks/:hook_id" do
it "should delete hook from project" do
- expect {
+ expect do
delete api("/projects/#{project.id}/hooks/#{hook.id}", user)
- }.to change {project.hooks.count}.by(-1)
+ end.to change {project.hooks.count}.by(-1)
expect(response.status).to eq(200)
end
diff --git a/spec/requests/api/project_members_spec.rb b/spec/requests/api/project_members_spec.rb
index 4aeaa02f958..6358f6a2a4a 100644
--- a/spec/requests/api/project_members_spec.rb
+++ b/spec/requests/api/project_members_spec.rb
@@ -53,10 +53,9 @@ describe API::API, api: true do
describe "POST /projects/:id/members" do
it "should add user to project team" do
- expect {
- post api("/projects/#{project.id}/members", user), user_id: user2.id,
- access_level: ProjectMember::DEVELOPER
- }.to change { ProjectMember.count }.by(1)
+ expect do
+ post api("/projects/#{project.id}/members", user), user_id: user2.id, access_level: ProjectMember::DEVELOPER
+ end.to change { ProjectMember.count }.by(1)
expect(response.status).to eq(201)
expect(json_response['username']).to eq(user2.username)
@@ -64,12 +63,12 @@ describe API::API, api: true do
end
it "should return a 201 status if user is already project member" do
- post api("/projects/#{project.id}/members", user), user_id: user2.id,
- access_level: ProjectMember::DEVELOPER
- expect {
- post api("/projects/#{project.id}/members", user), user_id: user2.id,
- access_level: ProjectMember::DEVELOPER
- }.not_to change { ProjectMember.count }
+ post api("/projects/#{project.id}/members", user),
+ user_id: user2.id,
+ access_level: ProjectMember::DEVELOPER
+ expect do
+ post api("/projects/#{project.id}/members", user), user_id: user2.id, access_level: ProjectMember::DEVELOPER
+ end.not_to change { ProjectMember.count }
expect(response.status).to eq(201)
expect(json_response['username']).to eq(user2.username)
@@ -123,16 +122,16 @@ describe API::API, api: true do
before { project_member2 }
it "should remove user from project team" do
- expect {
+ expect do
delete api("/projects/#{project.id}/members/#{user3.id}", user)
- }.to change { ProjectMember.count }.by(-1)
+ end.to change { ProjectMember.count }.by(-1)
end
it "should return 200 if team member is not part of a project" do
delete api("/projects/#{project.id}/members/#{user3.id}", user)
- expect {
+ expect do
delete api("/projects/#{project.id}/members/#{user3.id}", user)
- }.not_to change { ProjectMember.count }
+ end.to_not change { ProjectMember.count }
end
it "should return 200 if team member already removed" do
@@ -142,9 +141,9 @@ describe API::API, api: true do
end
it "should return 200 OK when the user was not member" do
- expect {
+ expect do
delete api("/projects/#{project.id}/members/1000000", user)
- }.to change { ProjectMember.count }.by(0)
+ end.to change { ProjectMember.count }.by(0)
expect(response.status).to eq(200)
expect(json_response['message']).to eq("Access revoked")
expect(json_response['id']).to eq(1000000)
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index 1386c03cb21..e9ff832603f 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -81,7 +81,7 @@ describe API::API, api: true do
end
it 'should return the correct order when sorted by id' do
- get api('/projects', user), { order_by: 'id', sort: 'desc'}
+ get api('/projects', user), { order_by: 'id', sort: 'desc' }
expect(response.status).to eq(200)
expect(json_response).to be_an Array
expect(json_response.first['id']).to eq(project3.id)
@@ -90,7 +90,7 @@ describe API::API, api: true do
it 'returns projects in the correct order when ci_enabled_first parameter is passed' do
[project, project2, project3].each{ |project| project.build_missing_services }
project2.gitlab_ci_service.update(active: true, token: "token", project_url: "url")
- get api('/projects', user), { ci_enabled_first: 'true'}
+ get api('/projects', user), { ci_enabled_first: 'true' }
expect(response.status).to eq(200)
expect(json_response).to be_an Array
expect(json_response.first['id']).to eq(project2.id)
@@ -125,7 +125,7 @@ describe API::API, api: true do
expect(json_response).to satisfy do |response|
response.one? do |entry|
entry['name'] == project.name &&
- entry['owner']['username'] == user.username
+ entry['owner']['username'] == user.username
end
end
end
@@ -471,9 +471,9 @@ describe API::API, api: true do
before { snippet }
it 'should delete existing project snippet' do
- expect {
+ expect do
delete api("/projects/#{project.id}/snippets/#{snippet.id}", user)
- }.to change { Snippet.count }.by(-1)
+ end.to change { Snippet.count }.by(-1)
expect(response.status).to eq(200)
end
@@ -545,9 +545,9 @@ describe API::API, api: true do
it 'should create new ssh key' do
key_attrs = attributes_for :key
- expect {
+ expect do
post api("/projects/#{project.id}/keys", user), key_attrs
- }.to change{ project.deploy_keys.count }.by(1)
+ end.to change{ project.deploy_keys.count }.by(1)
end
end
@@ -555,9 +555,9 @@ describe API::API, api: true do
before { deploy_key }
it 'should delete existing key' do
- expect {
+ expect do
delete api("/projects/#{project.id}/keys/#{deploy_key.id}", user)
- }.to change{ project.deploy_keys.count }.by(-1)
+ end.to change{ project.deploy_keys.count }.by(-1)
end
it 'should return 404 Not Found with invalid ID' do
diff --git a/spec/requests/api/system_hooks_spec.rb b/spec/requests/api/system_hooks_spec.rb
index 2c691f72f15..3e676515488 100644
--- a/spec/requests/api/system_hooks_spec.rb
+++ b/spec/requests/api/system_hooks_spec.rb
@@ -36,9 +36,9 @@ describe API::API, api: true do
describe "POST /hooks" do
it "should create new hook" do
- expect {
+ expect do
post api("/hooks", admin), url: 'http://example.com'
- }.to change { SystemHook.count }.by(1)
+ end.to change { SystemHook.count }.by(1)
end
it "should respond with 400 if url not given" do
@@ -47,9 +47,9 @@ describe API::API, api: true do
end
it "should not create new hook without url" do
- expect {
+ expect do
post api("/hooks", admin)
- }.not_to change { SystemHook.count }
+ end.to_not change { SystemHook.count }
end
end
@@ -68,9 +68,9 @@ describe API::API, api: true do
describe "DELETE /hooks/:id" do
it "should delete a hook" do
- expect {
+ expect do
delete api("/hooks/#{hook.id}", admin)
- }.to change { SystemHook.count }.by(-1)
+ end.to change { SystemHook.count }.by(-1)
end
it "should return success if hook id not found" do
diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb
index 327f3e6d23c..c10998e171f 100644
--- a/spec/requests/api/users_spec.rb
+++ b/spec/requests/api/users_spec.rb
@@ -21,9 +21,9 @@ describe API::API, api: true do
expect(response.status).to eq(200)
expect(json_response).to be_an Array
username = user.username
- expect(json_response.detect {
- |user| user['username'] == username
- }['username']).to eq(username)
+ expect(json_response.detect do |user|
+ user['username'] == username
+ end['username']).to eq(username)
end
end
@@ -62,9 +62,9 @@ describe API::API, api: true do
before{ admin }
it "should create user" do
- expect {
+ expect do
post api("/users", admin), attributes_for(:user, projects_limit: 3)
- }.to change { User.count }.by(1)
+ end.to change { User.count }.by(1)
end
it "should create user with correct attributes" do
@@ -103,9 +103,9 @@ describe API::API, api: true do
it "should not create user with invalid email" do
post api('/users', admin),
- email: 'invalid email',
- password: 'password',
- name: 'test'
+ email: 'invalid email',
+ password: 'password',
+ name: 'test'
expect(response.status).to eq(400)
end
@@ -131,21 +131,21 @@ describe API::API, api: true do
it 'should return 400 error if user does not validate' do
post api('/users', admin),
- password: 'pass',
- email: 'test@example.com',
- username: 'test!',
- name: 'test',
- bio: 'g' * 256,
- projects_limit: -1
+ password: 'pass',
+ email: 'test@example.com',
+ username: 'test!',
+ name: 'test',
+ bio: 'g' * 256,
+ projects_limit: -1
expect(response.status).to eq(400)
expect(json_response['message']['password']).
- to eq(['is too short (minimum is 8 characters)'])
+ to eq(['is too short (minimum is 8 characters)'])
expect(json_response['message']['bio']).
- to eq(['is too long (maximum is 255 characters)'])
+ to eq(['is too long (maximum is 255 characters)'])
expect(json_response['message']['projects_limit']).
- to eq(['must be greater than or equal to 0'])
+ to eq(['must be greater than or equal to 0'])
expect(json_response['message']['username']).
- to eq([Gitlab::Regex.send(:namespace_regex_message)])
+ to eq([Gitlab::Regex.send(:namespace_regex_message)])
end
it "shouldn't available for non admin users" do
@@ -156,20 +156,20 @@ describe API::API, api: true do
context 'with existing user' do
before do
post api('/users', admin),
- email: 'test@example.com',
- password: 'password',
- username: 'test',
- name: 'foo'
+ email: 'test@example.com',
+ password: 'password',
+ username: 'test',
+ name: 'foo'
end
it 'should return 409 conflict error if user with same email exists' do
- expect {
+ expect do
post api('/users', admin),
- name: 'foo',
- email: 'test@example.com',
- password: 'password',
- username: 'foo'
- }.to change { User.count }.by(0)
+ name: 'foo',
+ email: 'test@example.com',
+ password: 'password',
+ username: 'foo'
+ end.to change { User.count }.by(0)
expect(response.status).to eq(409)
expect(json_response['message']).to eq('Email has already been taken')
end
@@ -177,10 +177,10 @@ describe API::API, api: true do
it 'should return 409 conflict error if same username exists' do
expect do
post api('/users', admin),
- name: 'foo',
- email: 'foo@example.com',
- password: 'password',
- username: 'test'
+ name: 'foo',
+ email: 'foo@example.com',
+ password: 'password',
+ username: 'test'
end.to change { User.count }.by(0)
expect(response.status).to eq(409)
expect(json_response['message']).to eq('Username has already been taken')
@@ -203,7 +203,7 @@ describe API::API, api: true do
before { admin }
it "should update user with new bio" do
- put api("/users/#{user.id}", admin), {bio: 'new test bio'}
+ put api("/users/#{user.id}", admin), { bio: 'new test bio' }
expect(response.status).to eq(200)
expect(json_response['bio']).to eq('new test bio')
expect(user.reload.bio).to eq('new test bio')
@@ -224,14 +224,14 @@ describe API::API, api: true do
end
it "should update admin status" do
- put api("/users/#{user.id}", admin), {admin: true}
+ put api("/users/#{user.id}", admin), { admin: true }
expect(response.status).to eq(200)
expect(json_response['is_admin']).to eq(true)
expect(user.reload.admin).to eq(true)
end
it "should not update admin status" do
- put api("/users/#{admin_user.id}", admin), {can_create_group: false}
+ put api("/users/#{admin_user.id}", admin), { can_create_group: false }
expect(response.status).to eq(200)
expect(json_response['is_admin']).to eq(true)
expect(admin_user.reload.admin).to eq(true)
@@ -239,7 +239,7 @@ describe API::API, api: true do
end
it "should not allow invalid update" do
- put api("/users/#{user.id}", admin), {email: 'invalid email'}
+ put api("/users/#{user.id}", admin), { email: 'invalid email' }
expect(response.status).to eq(400)
expect(user.reload.email).not_to eq('invalid email')
end
@@ -250,36 +250,36 @@ describe API::API, api: true do
end
it "should return 404 for non-existing user" do
- put api("/users/999999", admin), {bio: 'update should fail'}
+ put api("/users/999999", admin), { bio: 'update should fail' }
expect(response.status).to eq(404)
expect(json_response['message']).to eq('404 Not found')
end
it 'should return 400 error if user does not validate' do
put api("/users/#{user.id}", admin),
- password: 'pass',
- email: 'test@example.com',
- username: 'test!',
- name: 'test',
- bio: 'g' * 256,
- projects_limit: -1
+ password: 'pass',
+ email: 'test@example.com',
+ username: 'test!',
+ name: 'test',
+ bio: 'g' * 256,
+ projects_limit: -1
expect(response.status).to eq(400)
expect(json_response['message']['password']).
- to eq(['is too short (minimum is 8 characters)'])
+ to eq(['is too short (minimum is 8 characters)'])
expect(json_response['message']['bio']).
- to eq(['is too long (maximum is 255 characters)'])
+ to eq(['is too long (maximum is 255 characters)'])
expect(json_response['message']['projects_limit']).
- to eq(['must be greater than or equal to 0'])
+ to eq(['must be greater than or equal to 0'])
expect(json_response['message']['username']).
- to eq([Gitlab::Regex.send(:namespace_regex_message)])
+ to eq([Gitlab::Regex.send(:namespace_regex_message)])
end
context "with existing user" do
- before {
+ before do
post api("/users", admin), { email: 'test@example.com', password: 'password', username: 'test', name: 'test' }
post api("/users", admin), { email: 'foo@bar.com', password: 'password', username: 'john', name: 'john' }
@user = User.all.last
- }
+ end
it 'should return 409 conflict error if email address exists' do
put api("/users/#{@user.id}", admin), email: 'test@example.com'
@@ -313,9 +313,9 @@ describe API::API, api: true do
it "should create ssh key" do
key_attrs = attributes_for :key
- expect {
+ expect do
post api("/users/#{user.id}/keys", admin), key_attrs
- }.to change{ user.keys.count }.by(1)
+ end.to change{ user.keys.count }.by(1)
end
end
@@ -361,9 +361,9 @@ describe API::API, api: true do
it 'should delete existing key' do
user.keys << key
user.save
- expect {
+ expect do
delete api("/users/#{user.id}/keys/#{key.id}", admin)
- }.to change { user.keys.count }.by(-1)
+ end.to change { user.keys.count }.by(-1)
expect(response.status).to eq(200)
end
@@ -475,9 +475,9 @@ describe API::API, api: true do
describe "POST /user/keys" do
it "should create ssh key" do
key_attrs = attributes_for :key
- expect {
+ expect do
post api("/user/keys", user), key_attrs
- }.to change{ user.keys.count }.by(1)
+ end.to change{ user.keys.count }.by(1)
expect(response.status).to eq(201)
end
@@ -508,9 +508,9 @@ describe API::API, api: true do
it "should delete existed key" do
user.keys << key
user.save
- expect {
+ expect do
delete api("/user/keys/#{key.id}", user)
- }.to change{user.keys.count}.by(-1)
+ end.to change{user.keys.count}.by(-1)
expect(response.status).to eq(200)
end
diff --git a/spec/routing/admin_routing_spec.rb b/spec/routing/admin_routing_spec.rb
index bf8abcfb00f..cd16a8e6322 100644
--- a/spec/routing/admin_routing_spec.rb
+++ b/spec/routing/admin_routing_spec.rb
@@ -118,4 +118,3 @@ describe Admin::DashboardController, "routing" do
expect(get("/admin")).to route_to('admin/dashboard#index')
end
end
-
diff --git a/spec/routing/routing_spec.rb b/spec/routing/routing_spec.rb
index f268e4755d1..0fda6202a11 100644
--- a/spec/routing/routing_spec.rb
+++ b/spec/routing/routing_spec.rb
@@ -248,4 +248,3 @@ describe "Groups", "routing" do
expect(get('/1')).to route_to('namespaces#show', id: '1')
end
end
-
diff --git a/spec/services/archive_repository_service_spec.rb b/spec/services/archive_repository_service_spec.rb
index c22426fccdb..0ec70c51b3a 100644
--- a/spec/services/archive_repository_service_spec.rb
+++ b/spec/services/archive_repository_service_spec.rb
@@ -17,9 +17,7 @@ describe ArchiveRepositoryService do
end
it "raises an error" do
- expect {
- subject.execute(timeout: 0.0)
- }.to raise_error(RuntimeError)
+ expect { subject.execute(timeout: 0.0) }.to raise_error(RuntimeError)
end
end
@@ -90,4 +88,3 @@ describe ArchiveRepositoryService do
end
end
end
-
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index 435b14eb245..3373b97bfd4 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -3,9 +3,9 @@ require 'spec_helper'
describe GitPushService do
include RepoHelpers
- let (:user) { create :user }
- let (:project) { create :project }
- let (:service) { GitPushService.new }
+ let(:user) { create :user }
+ let(:project) { create :project }
+ let(:service) { GitPushService.new }
before do
@blankrev = Gitlab::Git::BLANK_SHA
@@ -226,18 +226,18 @@ describe GitPushService do
end
it "doesn't create cross-reference notes for a closing reference" do
- expect {
+ expect do
service.execute(project, user, @oldrev, @newrev, @ref)
- }.not_to change { Note.where(project_id: project.id, system: true, commit_id: closing_commit.id).count }
+ end.not_to change { Note.where(project_id: project.id, system: true, commit_id: closing_commit.id).count }
end
it "doesn't close issues when pushed to non-default branches" do
allow(project).to receive(:default_branch).and_return('durf')
# The push still shouldn't create cross-reference notes.
- expect {
+ expect do
service.execute(project, user, @oldrev, @newrev, 'refs/heads/hurf')
- }.not_to change { Note.where(project_id: project.id, system: true).count }
+ end.not_to change { Note.where(project_id: project.id, system: true).count }
expect(Issue.find(issue.id)).to be_opened
end
@@ -246,9 +246,9 @@ describe GitPushService do
allow(project).to receive(:default_issues_tracker?).and_return(false)
# The push still shouldn't create cross-reference notes.
- expect {
+ expect do
service.execute(project, user, @oldrev, @newrev, 'refs/heads/hurf')
- }.not_to change { Note.where(project_id: project.id, system: true).count }
+ end.not_to change { Note.where(project_id: project.id, system: true).count }
end
end
diff --git a/spec/services/git_tag_push_service_spec.rb b/spec/services/git_tag_push_service_spec.rb
index 76f69b396e0..eed50c7ebac 100644
--- a/spec/services/git_tag_push_service_spec.rb
+++ b/spec/services/git_tag_push_service_spec.rb
@@ -3,9 +3,9 @@ require 'spec_helper'
describe GitTagPushService do
include RepoHelpers
- let (:user) { create :user }
- let (:project) { create :project }
- let (:service) { GitTagPushService.new }
+ let(:user) { create :user }
+ let(:project) { create :project }
+ let(:service) { GitTagPushService.new }
before do
@oldrev = Gitlab::Git::BLANK_SHA
diff --git a/spec/services/issues/bulk_update_service_spec.rb b/spec/services/issues/bulk_update_service_spec.rb
index a97c55011c9..4c62fbafd73 100644
--- a/spec/services/issues/bulk_update_service_spec.rb
+++ b/spec/services/issues/bulk_update_service_spec.rb
@@ -1,9 +1,7 @@
require 'spec_helper'
describe Issues::BulkUpdateService do
- let(:issue) {
- create(:issue, project: @project)
- }
+ let(:issue) { create(:issue, project: @project) }
before do
@user = create :user
@@ -26,14 +24,14 @@ describe Issues::BulkUpdateService do
}
end
- it {
+ it do
result = Issues::BulkUpdateService.new(@project, @user, @params).execute
expect(result[:success]).to be_truthy
expect(result[:count]).to eq(@issues.count)
expect(@project.issues.opened).to be_empty
expect(@project.issues.closed).not_to be_empty
- }
+ end
end
@@ -49,14 +47,14 @@ describe Issues::BulkUpdateService do
}
end
- it {
+ it do
result = Issues::BulkUpdateService.new(@project, @user, @params).execute
expect(result[:success]).to be_truthy
expect(result[:count]).to eq(@issues.count)
expect(@project.issues.closed).to be_empty
expect(@project.issues.opened).not_to be_empty
- }
+ end
end
@@ -70,13 +68,13 @@ describe Issues::BulkUpdateService do
}
end
- it {
+ it do
result = Issues::BulkUpdateService.new(@project, @user, @params).execute
expect(result[:success]).to be_truthy
expect(result[:count]).to eq(1)
expect(@project.issues.first.assignee).to eq(@new_assignee)
- }
+ end
it 'allows mass-unassigning' do
@project.issues.first.update_attribute(:assignee, @new_assignee)
@@ -109,13 +107,13 @@ describe Issues::BulkUpdateService do
}
end
- it {
+ it do
result = Issues::BulkUpdateService.new(@project, @user, @params).execute
expect(result[:success]).to be_truthy
expect(result[:count]).to eq(1)
expect(@project.issues.first.milestone).to eq(@milestone)
- }
+ end
end
end
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 0f9b65678df..9516e7936d8 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -13,12 +13,14 @@ describe MergeRequests::RefreshService do
@project = create(:project, namespace: group)
@fork_project = Projects::ForkService.new(@project, @user).execute
- @merge_request = create(:merge_request, source_project: @project,
+ @merge_request = create(:merge_request,
+ source_project: @project,
source_branch: 'master',
target_branch: 'feature',
target_project: @project)
- @fork_merge_request = create(:merge_request, source_project: @fork_project,
+ @fork_merge_request = create(:merge_request,
+ source_project: @fork_project,
source_branch: 'master',
target_branch: 'feature',
target_project: @project)
diff --git a/spec/services/notes/create_service_spec.rb b/spec/services/notes/create_service_spec.rb
index 0dc3b412783..f2ea0805b2f 100644
--- a/spec/services/notes/create_service_spec.rb
+++ b/spec/services/notes/create_service_spec.rb
@@ -25,4 +25,3 @@ describe Notes::CreateService do
end
end
end
-
diff --git a/spec/services/projects/fork_service_spec.rb b/spec/services/projects/fork_service_spec.rb
index f158ac87e2b..439a492cea9 100644
--- a/spec/services/projects/fork_service_spec.rb
+++ b/spec/services/projects/fork_service_spec.rb
@@ -5,8 +5,10 @@ describe Projects::ForkService do
before do
@from_namespace = create(:namespace)
@from_user = create(:user, namespace: @from_namespace )
- @from_project = create(:project, creator_id: @from_user.id,
- namespace: @from_namespace, star_count: 107,
+ @from_project = create(:project,
+ creator_id: @from_user.id,
+ namespace: @from_namespace,
+ star_count: 107,
description: 'wow such project')
@to_namespace = create(:namespace)
@to_user = create(:user, namespace: @to_namespace)
diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb
index ea5b8813105..0dd6980a44f 100644
--- a/spec/services/projects/update_service_spec.rb
+++ b/spec/services/projects/update_service_spec.rb
@@ -11,7 +11,7 @@ describe Projects::UpdateService do
context 'should be private when updated to private' do
before do
- @created_private = @project.private?
+ @created_private = @project.private?
@opts.merge!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
update_project(@project, @user, @opts)
diff --git a/spec/services/projects/upload_service_spec.rb b/spec/services/projects/upload_service_spec.rb
index e5c47015a03..7aa26857649 100644
--- a/spec/services/projects/upload_service_spec.rb
+++ b/spec/services/projects/upload_service_spec.rb
@@ -22,7 +22,7 @@ describe Projects::UploadService do
it { expect(@link_to_file['url']).to match('banana_sample.gif') }
end
- context 'for valid png file' do
+ context 'for valid png file' do
before do
png = fixture_file_upload(Rails.root + 'spec/fixtures/dk.png',
'image/png')
@@ -38,7 +38,7 @@ describe Projects::UploadService do
it { expect(@link_to_file['url']).to match('dk.png') }
end
- context 'for valid jpg file' do
+ context 'for valid jpg file' do
before do
jpg = fixture_file_upload(Rails.root + 'spec/fixtures/rails_sample.jpg', 'image/jpg')
@link_to_file = upload_file(@project.repository, jpg)
diff --git a/spec/services/system_hooks_service_spec.rb b/spec/services/system_hooks_service_spec.rb
index 199ac996608..48c49e2f717 100644
--- a/spec/services/system_hooks_service_spec.rb
+++ b/spec/services/system_hooks_service_spec.rb
@@ -1,12 +1,12 @@
require 'spec_helper'
describe SystemHooksService do
- let (:user) { create :user }
- let (:project) { create :project }
- let (:project_member) { create :project_member }
- let (:key) { create(:key, user: user) }
- let (:group) { create(:group) }
- let (:group_member) { create(:group_member) }
+ let(:user) { create :user }
+ let(:project) { create :project }
+ let(:project_member) { create :project_member }
+ let(:key) { create(:key, user: user) }
+ let(:group) { create(:group) }
+ let(:group_member) { create(:group_member) }
context 'event data' do
it { expect(event_data(user, :create)).to include(:event_name, :name, :created_at, :email, :user_id) }
diff --git a/spec/services/test_hook_service_spec.rb b/spec/services/test_hook_service_spec.rb
index d2b505f55a2..226196eedae 100644
--- a/spec/services/test_hook_service_spec.rb
+++ b/spec/services/test_hook_service_spec.rb
@@ -1,9 +1,9 @@
require 'spec_helper'
describe TestHookService do
- let (:user) { create :user }
- let (:project) { create :project }
- let (:hook) { create :project_hook, project: project }
+ let(:user) { create :user }
+ let(:project) { create :project }
+ let(:hook) { create :project_hook, project: project }
describe :execute do
it "should execute successfully" do
diff --git a/spec/support/db_cleaner.rb b/spec/support/db_cleaner.rb
index 65d31433dab..e0dbc9aa84c 100644
--- a/spec/support/db_cleaner.rb
+++ b/spec/support/db_cleaner.rb
@@ -7,7 +7,7 @@ RSpec.configure do |config|
DatabaseCleaner.strategy = :transaction
end
- config.before(:each, :js => true) do
+ config.before(:each, js: true) do
DatabaseCleaner.strategy = :truncation
end
diff --git a/spec/support/matchers.rb b/spec/support/matchers.rb
index e5ebc6e7ec8..a2f853e3e70 100644
--- a/spec/support/matchers.rb
+++ b/spec/support/matchers.rb
@@ -9,11 +9,11 @@ end
def emulate_user(user)
user = case user
- when :user then create(:user)
- when :visitor then nil
- when :admin then create(:admin)
- else user
- end
+ when :user then create(:user)
+ when :visitor then nil
+ when :admin then create(:admin)
+ else user
+ end
login_with(user) if user
end
diff --git a/spec/support/select2_helper.rb b/spec/support/select2_helper.rb
index 691f84f39d4..04d25b5e9e9 100644
--- a/spec/support/select2_helper.rb
+++ b/spec/support/select2_helper.rb
@@ -12,9 +12,9 @@
module Select2Helper
def select2(value, options={})
- raise "Must pass a hash containing 'from'" if not options.is_a?(Hash) or not options.has_key?(:from)
+ raise ArgumentError, 'options must be a Hash' unless options.kind_of?(Hash)
- selector = options[:from]
+ selector = options.fetch(:from)
if options[:multiple]
execute_script("$('#{selector}').select2('val', ['#{value}'], true);")
diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb
index 2f90b67aef1..cdcfeba8d1f 100644
--- a/spec/tasks/gitlab/backup_rake_spec.rb
+++ b/spec/tasks/gitlab/backup_rake_spec.rb
@@ -37,7 +37,7 @@ describe 'gitlab:app namespace rake task' do
it 'should fail on mismatch' do
allow(YAML).to receive(:load_file).
- and_return({gitlab_version: "not #{gitlab_version}" })
+ and_return({ gitlab_version: "not #{gitlab_version}" })
expect { run_rake_task('gitlab:backup:restore') }.
to raise_error(SystemExit)
@@ -45,7 +45,7 @@ describe 'gitlab:app namespace rake task' do
it 'should invoke restoration on mach' do
allow(YAML).to receive(:load_file).
- and_return({gitlab_version: gitlab_version})
+ and_return({ gitlab_version: gitlab_version })
expect(Rake::Task["gitlab:backup:db:restore"]).to receive(:invoke)
expect(Rake::Task["gitlab:backup:repo:restore"]).to receive(:invoke)
expect(Rake::Task["gitlab:shell:setup"]).to receive(:invoke)
diff --git a/spec/workers/repository_archive_worker_spec.rb b/spec/workers/repository_archive_worker_spec.rb
index c2362058cfd..a914d0ac8dc 100644
--- a/spec/workers/repository_archive_worker_spec.rb
+++ b/spec/workers/repository_archive_worker_spec.rb
@@ -77,4 +77,3 @@ describe RepositoryArchiveWorker do
end
end
end
-