summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/blob_controller_spec.rb5
-rw-r--r--spec/controllers/groups/group_members_controller_spec.rb198
-rw-r--r--spec/controllers/projects/commit_controller_spec.rb12
-rw-r--r--spec/controllers/projects/issues_controller_spec.rb19
-rw-r--r--spec/controllers/projects/project_members_controller_spec.rb249
-rw-r--r--spec/factories/deployments.rb13
-rw-r--r--spec/factories/environments.rb7
-rw-r--r--spec/factories/projects.rb6
-rw-r--r--spec/features/admin/admin_hooks_spec.rb4
-rw-r--r--spec/features/atom/dashboard_issues_spec.rb51
-rw-r--r--spec/features/builds_spec.rb36
-rw-r--r--spec/features/environments_spec.rb160
-rw-r--r--spec/features/groups/members/owner_manages_access_requests_spec.rb48
-rw-r--r--spec/features/groups/members/user_requests_access_spec.rb48
-rw-r--r--spec/features/issues/bulk_assigment_labels_spec.rb17
-rw-r--r--spec/features/issues/filter_by_labels_spec.rb20
-rw-r--r--spec/features/issues/filter_issues_spec.rb23
-rw-r--r--spec/features/issues/move_spec.rb16
-rw-r--r--spec/features/issues/todo_spec.rb33
-rw-r--r--spec/features/issues_spec.rb45
-rw-r--r--spec/features/projects/commits/cherry_pick_spec.rb1
-rw-r--r--spec/features/projects/members/master_manages_access_requests_spec.rb47
-rw-r--r--spec/features/projects/members/user_requests_access_spec.rb54
-rw-r--r--spec/features/search_spec.rb79
-rw-r--r--spec/features/security/project/public_access_spec.rb43
-rw-r--r--spec/features/u2f_spec.rb57
-rw-r--r--spec/finders/notes_finder_spec.rb16
-rw-r--r--spec/fixtures/container_registry/tag_manifest_1.json32
-rw-r--r--spec/helpers/gitlab_routing_helper_spec.rb79
-rw-r--r--spec/helpers/issues_helper_spec.rb16
-rw-r--r--spec/helpers/members_helper_spec.rb56
-rw-r--r--spec/helpers/projects_helper_spec.rb10
-rw-r--r--spec/javascripts/application_spec.js.coffee30
-rw-r--r--spec/javascripts/fixtures/application.html.haml2
-rw-r--r--spec/javascripts/fixtures/search_autocomplete.html.haml10
-rw-r--r--spec/javascripts/fixtures/u2f/register.html.haml3
-rw-r--r--spec/javascripts/notes_spec.js.coffee2
-rw-r--r--spec/javascripts/project_title_spec.js.coffee2
-rw-r--r--spec/javascripts/search_autocomplete_spec.js.coffee149
-rw-r--r--spec/lib/banzai/filter/redactor_filter_spec.rb12
-rw-r--r--spec/lib/ci/gitlab_ci_yaml_processor_spec.rb115
-rw-r--r--spec/lib/container_registry/tag_spec.rb89
-rw-r--r--spec/lib/gitlab/auth_spec.rb26
-rw-r--r--spec/lib/gitlab/ci/config/node/configurable_spec.rb35
-rw-r--r--spec/lib/gitlab/ci/config/node/factory_spec.rb49
-rw-r--r--spec/lib/gitlab/ci/config/node/global_spec.rb104
-rw-r--r--spec/lib/gitlab/ci/config/node/null_spec.rb23
-rw-r--r--spec/lib/gitlab/ci/config/node/script_spec.rb48
-rw-r--r--spec/lib/gitlab/ci/config_spec.rb42
-rw-r--r--spec/lib/gitlab/database/migration_helpers_spec.rb13
-rw-r--r--spec/lib/gitlab/metrics/instrumentation_spec.rb60
-rw-r--r--spec/lib/gitlab/metrics/rack_middleware_spec.rb29
-rw-r--r--spec/lib/gitlab/metrics/sampler_spec.rb25
-rw-r--r--spec/lib/gitlab/project_search_results_spec.rb12
-rw-r--r--spec/lib/gitlab/search_results_spec.rb16
-rw-r--r--spec/mailers/notify_spec.rb264
-rw-r--r--spec/models/build_spec.rb70
-rw-r--r--spec/models/concerns/access_requestable_spec.rb40
-rw-r--r--spec/models/concerns/milestoneish_spec.rb14
-rw-r--r--spec/models/deployment_spec.rb17
-rw-r--r--spec/models/environment_spec.rb14
-rw-r--r--spec/models/event_spec.rb6
-rw-r--r--spec/models/group_spec.rb60
-rw-r--r--spec/models/member_spec.rb124
-rw-r--r--spec/models/members/group_member_spec.rb28
-rw-r--r--spec/models/members/project_member_spec.rb28
-rw-r--r--spec/models/note_spec.rb15
-rw-r--r--spec/models/notification_setting_spec.rb1
-rw-r--r--spec/models/project_services/bamboo_service_spec.rb12
-rw-r--r--spec/models/project_services/teamcity_service_spec.rb10
-rw-r--r--spec/models/project_spec.rb32
-rw-r--r--spec/models/project_team_spec.rb144
-rw-r--r--spec/requests/api/builds_spec.rb26
-rw-r--r--spec/requests/api/issues_spec.rb25
-rw-r--r--spec/requests/api/milestones_spec.rb13
-rw-r--r--spec/requests/ci/api/builds_spec.rb36
-rw-r--r--spec/requests/git_http_spec.rb2
-rw-r--r--spec/requests/jwt_controller_spec.rb2
-rw-r--r--spec/services/ci/register_build_service_spec.rb62
-rw-r--r--spec/services/create_deployment_service_spec.rb119
-rw-r--r--spec/services/notification_service_spec.rb312
-rw-r--r--spec/services/projects/autocomplete_service_spec.rb12
-rw-r--r--spec/services/todo_service_spec.rb34
-rw-r--r--spec/support/test_env.rb1
-rw-r--r--spec/workers/expire_build_artifacts_worker_spec.rb57
-rw-r--r--spec/workers/stuck_ci_builds_worker_spec.rb19
86 files changed, 309 insertions, 3686 deletions
diff --git a/spec/controllers/blob_controller_spec.rb b/spec/controllers/blob_controller_spec.rb
index 465013231f9..eb91e577b87 100644
--- a/spec/controllers/blob_controller_spec.rb
+++ b/spec/controllers/blob_controller_spec.rb
@@ -38,11 +38,6 @@ describe Projects::BlobController do
let(:id) { 'invalid-branch/README.md' }
it { is_expected.to respond_with(:not_found) }
end
-
- context "binary file" do
- let(:id) { 'binary-encoding/encoding/binary-1.bin' }
- it { is_expected.to respond_with(:success) }
- end
end
describe 'GET show with tree path' do
diff --git a/spec/controllers/groups/group_members_controller_spec.rb b/spec/controllers/groups/group_members_controller_spec.rb
index 89c2c26a367..a5986598715 100644
--- a/spec/controllers/groups/group_members_controller_spec.rb
+++ b/spec/controllers/groups/group_members_controller_spec.rb
@@ -4,211 +4,17 @@ describe Groups::GroupMembersController do
let(:user) { create(:user) }
let(:group) { create(:group) }
- describe '#index' do
+ context "index" do
before do
group.add_owner(user)
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
end
it 'renders index with group members' do
- get :index, group_id: group
+ get :index, group_id: group.path
expect(response.status).to eq(200)
expect(response).to render_template(:index)
end
end
-
- describe '#destroy' do
- let(:group) { create(:group, :public) }
-
- context 'when member is not found' do
- it 'returns 403' do
- delete :destroy, group_id: group,
- id: 42
-
- expect(response.status).to eq(403)
- end
- end
-
- context 'when member is found' do
- let(:user) { create(:user) }
- let(:group_user) { create(:user) }
- let(:member) do
- group.add_developer(group_user)
- group.members.find_by(user_id: group_user)
- end
-
- context 'when user does not have enough rights' do
- before do
- group.add_developer(user)
- sign_in(user)
- end
-
- it 'returns 403' do
- delete :destroy, group_id: group,
- id: member
-
- expect(response.status).to eq(403)
- expect(group.users).to include group_user
- end
- end
-
- context 'when user has enough rights' do
- before do
- group.add_owner(user)
- sign_in(user)
- end
-
- it '[HTML] removes user from members' do
- delete :destroy, group_id: group,
- id: member
-
- expect(response).to set_flash.to 'User was successfully removed from group.'
- expect(response).to redirect_to(group_group_members_path(group))
- expect(group.users).not_to include group_user
- end
-
- it '[JS] removes user from members' do
- xhr :delete, :destroy, group_id: group,
- id: member
-
- expect(response).to be_success
- expect(group.users).not_to include group_user
- end
- end
- end
- end
-
- describe '#leave' do
- let(:group) { create(:group, :public) }
- let(:user) { create(:user) }
-
- context 'when member is not found' do
- before { sign_in(user) }
-
- it 'returns 403' do
- delete :leave, group_id: group
-
- expect(response.status).to eq(403)
- end
- end
-
- context 'when member is found' do
- context 'and is not an owner' do
- before do
- group.add_developer(user)
- sign_in(user)
- end
-
- it 'removes user from members' do
- delete :leave, group_id: group
-
- expect(response).to set_flash.to "You left the \"#{group.name}\" group."
- expect(response).to redirect_to(dashboard_groups_path)
- expect(group.users).not_to include user
- end
- end
-
- context 'and is an owner' do
- before do
- group.add_owner(user)
- sign_in(user)
- end
-
- it 'cannot removes himself from the group' do
- delete :leave, group_id: group
-
- expect(response).to redirect_to(group_path(group))
- expect(response).to set_flash[:alert].to "You can not leave the \"#{group.name}\" group. Transfer or delete the group."
- expect(group.users).to include user
- end
- end
-
- context 'and is a requester' do
- before do
- group.request_access(user)
- sign_in(user)
- end
-
- it 'removes user from members' do
- delete :leave, group_id: group
-
- expect(response).to set_flash.to 'Your access request to the group has been withdrawn.'
- expect(response).to redirect_to(dashboard_groups_path)
- expect(group.members.request).to be_empty
- expect(group.users).not_to include user
- end
- end
- end
- end
-
- describe '#request_access' do
- let(:group) { create(:group, :public) }
- let(:user) { create(:user) }
-
- before do
- sign_in(user)
- end
-
- it 'creates a new GroupMember that is not a team member' do
- post :request_access, group_id: group
-
- expect(response).to set_flash.to 'Your request for access has been queued for review.'
- expect(response).to redirect_to(group_path(group))
- expect(group.members.request.exists?(user_id: user)).to be_truthy
- expect(group.users).not_to include user
- end
- end
-
- describe '#approve_access_request' do
- let(:group) { create(:group, :public) }
-
- context 'when member is not found' do
- it 'returns 403' do
- post :approve_access_request, group_id: group,
- id: 42
-
- expect(response.status).to eq(403)
- end
- end
-
- context 'when member is found' do
- let(:user) { create(:user) }
- let(:group_requester) { create(:user) }
- let(:member) do
- group.request_access(group_requester)
- group.members.request.find_by(user_id: group_requester)
- end
-
- context 'when user does not have enough rights' do
- before do
- group.add_developer(user)
- sign_in(user)
- end
-
- it 'returns 403' do
- post :approve_access_request, group_id: group,
- id: member
-
- expect(response.status).to eq(403)
- expect(group.users).not_to include group_requester
- end
- end
-
- context 'when user has enough rights' do
- before do
- group.add_owner(user)
- sign_in(user)
- end
-
- it 'adds user to members' do
- post :approve_access_request, group_id: group,
- id: member
-
- expect(response).to redirect_to(group_group_members_path(group))
- expect(group.users).to include group_requester
- end
- end
- end
- end
end
diff --git a/spec/controllers/projects/commit_controller_spec.rb b/spec/controllers/projects/commit_controller_spec.rb
index 6e3db10e451..438e776ec4b 100644
--- a/spec/controllers/projects/commit_controller_spec.rb
+++ b/spec/controllers/projects/commit_controller_spec.rb
@@ -2,8 +2,6 @@ require 'rails_helper'
describe Projects::CommitController do
describe 'GET show' do
- render_views
-
let(:project) { create(:project) }
before do
@@ -29,16 +27,6 @@ describe Projects::CommitController do
end
end
- it 'handles binary files' do
- get(:show,
- namespace_id: project.namespace.to_param,
- project_id: project.to_param,
- id: TestEnv::BRANCH_SHA['binary-encoding'],
- format: "html")
-
- expect(response).to be_success
- end
-
def go(id:)
get :show,
namespace_id: project.namespace.to_param,
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index cbaa3e0b7b2..78be7e3dc35 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -105,15 +105,6 @@ describe Projects::IssuesController do
expect(assigns(:issues)).to eq [issue]
end
- it 'should not list confidential issues for project members with guest role' do
- sign_in(member)
- project.team << [member, :guest]
-
- get_issues
-
- expect(assigns(:issues)).to eq [issue]
- end
-
it 'should list confidential issues for author' do
sign_in(author)
get_issues
@@ -157,7 +148,7 @@ describe Projects::IssuesController do
shared_examples_for 'restricted action' do |http_status|
it 'returns 404 for guests' do
- sign_out(:user)
+ sign_out :user
go(id: unescaped_parameter_value.to_param)
expect(response).to have_http_status :not_found
@@ -170,14 +161,6 @@ describe Projects::IssuesController do
expect(response).to have_http_status :not_found
end
- it 'returns 404 for project members with guest role' do
- sign_in(member)
- project.team << [member, :guest]
- go(id: unescaped_parameter_value.to_param)
-
- expect(response).to have_http_status :not_found
- end
-
it "returns #{http_status[:success]} for author" do
sign_in(author)
go(id: unescaped_parameter_value.to_param)
diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/spec/controllers/projects/project_members_controller_spec.rb
index fc5f458e795..750fbecdd07 100644
--- a/spec/controllers/projects/project_members_controller_spec.rb
+++ b/spec/controllers/projects/project_members_controller_spec.rb
@@ -1,22 +1,22 @@
require('spec_helper')
describe Projects::ProjectMembersController do
- describe '#apply_import' do
- let(:project) { create(:project) }
- let(:another_project) { create(:project, :private) }
- let(:user) { create(:user) }
- let(:member) { create(:user) }
-
- before do
- project.team << [user, :master]
- another_project.team << [member, :guest]
- sign_in(user)
- end
+ let(:project) { create(:project) }
+ let(:another_project) { create(:project, :private) }
+ let(:user) { create(:user) }
+ let(:member) { create(:user) }
+
+ before do
+ project.team << [user, :master]
+ another_project.team << [member, :guest]
+ sign_in(user)
+ end
+ describe '#apply_import' do
shared_context 'import applied' do
before do
- post(:apply_import, namespace_id: project.namespace,
- project_id: project,
+ post(:apply_import, namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
source_project_id: another_project.id)
end
end
@@ -48,231 +48,18 @@ describe Projects::ProjectMembersController do
end
describe '#index' do
+ let(:project) { create(:project, :private) }
+
context 'when user is member' do
+ let(:member) { create(:user) }
+
before do
- project = create(:project, :private)
- member = create(:user)
project.team << [member, :guest]
sign_in(member)
-
- get :index, namespace_id: project.namespace, project_id: project
+ get :index, namespace_id: project.namespace.to_param, project_id: project.to_param
end
it { expect(response.status).to eq(200) }
end
end
-
- describe '#destroy' do
- let(:project) { create(:project, :public) }
-
- context 'when member is not found' do
- it 'returns 404' do
- delete :destroy, namespace_id: project.namespace,
- project_id: project,
- id: 42
-
- expect(response.status).to eq(404)
- end
- end
-
- context 'when member is found' do
- let(:user) { create(:user) }
- let(:team_user) { create(:user) }
- let(:member) do
- project.team << [team_user, :developer]
- project.members.find_by(user_id: team_user.id)
- end
-
- context 'when user does not have enough rights' do
- before do
- project.team << [user, :developer]
- sign_in(user)
- end
-
- it 'returns 404' do
- delete :destroy, namespace_id: project.namespace,
- project_id: project,
- id: member
-
- expect(response.status).to eq(404)
- expect(project.users).to include team_user
- end
- end
-
- context 'when user has enough rights' do
- before do
- project.team << [user, :master]
- sign_in(user)
- end
-
- it '[HTML] removes user from members' do
- delete :destroy, namespace_id: project.namespace,
- project_id: project,
- id: member
-
- expect(response).to redirect_to(
- namespace_project_project_members_path(project.namespace, project)
- )
- expect(project.users).not_to include team_user
- end
-
- it '[JS] removes user from members' do
- xhr :delete, :destroy, namespace_id: project.namespace,
- project_id: project,
- id: member
-
- expect(response).to be_success
- expect(project.users).not_to include team_user
- end
- end
- end
- end
-
- describe '#leave' do
- let(:project) { create(:project, :public) }
- let(:user) { create(:user) }
-
- context 'when member is not found' do
- before { sign_in(user) }
-
- it 'returns 403' do
- delete :leave, namespace_id: project.namespace,
- project_id: project
-
- expect(response.status).to eq(403)
- end
- end
-
- context 'when member is found' do
- context 'and is not an owner' do
- before do
- project.team << [user, :developer]
- sign_in(user)
- end
-
- it 'removes user from members' do
- delete :leave, namespace_id: project.namespace,
- project_id: project
-
- expect(response).to set_flash.to "You left the \"#{project.human_name}\" project."
- expect(response).to redirect_to(dashboard_projects_path)
- expect(project.users).not_to include user
- end
- end
-
- context 'and is an owner' do
- before do
- project.update(namespace_id: user.namespace_id)
- project.team << [user, :master, user]
- sign_in(user)
- end
-
- it 'cannot remove himself from the project' do
- delete :leave, namespace_id: project.namespace,
- project_id: project
-
- expect(response).to redirect_to(
- namespace_project_path(project.namespace, project)
- )
- expect(response).to set_flash[:alert].to "You can not leave the \"#{project.human_name}\" project. Transfer or delete the project."
- expect(project.users).to include user
- end
- end
-
- context 'and is a requester' do
- before do
- project.request_access(user)
- sign_in(user)
- end
-
- it 'removes user from members' do
- delete :leave, namespace_id: project.namespace,
- project_id: project
-
- expect(response).to set_flash.to 'Your access request to the project has been withdrawn.'
- expect(response).to redirect_to(dashboard_projects_path)
- expect(project.members.request).to be_empty
- expect(project.users).not_to include user
- end
- end
- end
- end
-
- describe '#request_access' do
- let(:project) { create(:project, :public) }
- let(:user) { create(:user) }
-
- before do
- sign_in(user)
- end
-
- it 'creates a new ProjectMember that is not a team member' do
- post :request_access, namespace_id: project.namespace,
- project_id: project
-
- expect(response).to set_flash.to 'Your request for access has been queued for review.'
- expect(response).to redirect_to(
- namespace_project_path(project.namespace, project)
- )
- expect(project.members.request.exists?(user_id: user)).to be_truthy
- expect(project.users).not_to include user
- end
- end
-
- describe '#approve' do
- let(:project) { create(:project, :public) }
-
- context 'when member is not found' do
- it 'returns 404' do
- post :approve_access_request, namespace_id: project.namespace,
- project_id: project,
- id: 42
-
- expect(response.status).to eq(404)
- end
- end
-
- context 'when member is found' do
- let(:user) { create(:user) }
- let(:team_requester) { create(:user) }
- let(:member) do
- project.request_access(team_requester)
- project.members.request.find_by(user_id: team_requester.id)
- end
-
- context 'when user does not have enough rights' do
- before do
- project.team << [user, :developer]
- sign_in(user)
- end
-
- it 'returns 404' do
- post :approve_access_request, namespace_id: project.namespace,
- project_id: project,
- id: member
-
- expect(response.status).to eq(404)
- expect(project.users).not_to include team_requester
- end
- end
-
- context 'when user has enough rights' do
- before do
- project.team << [user, :master]
- sign_in(user)
- end
-
- it 'adds user to members' do
- post :approve_access_request, namespace_id: project.namespace,
- project_id: project,
- id: member
-
- expect(response).to redirect_to(
- namespace_project_project_members_path(project.namespace, project)
- )
- expect(project.users).to include team_requester
- end
- end
- end
- end
end
diff --git a/spec/factories/deployments.rb b/spec/factories/deployments.rb
deleted file mode 100644
index 82591604fcb..00000000000
--- a/spec/factories/deployments.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-FactoryGirl.define do
- factory :deployment, class: Deployment do
- sha '97de212e80737a608d939f648d959671fb0a0142'
- ref 'master'
- tag false
-
- environment factory: :environment
-
- after(:build) do |deployment, evaluator|
- deployment.project = deployment.environment.project
- end
- end
-end
diff --git a/spec/factories/environments.rb b/spec/factories/environments.rb
deleted file mode 100644
index 07265c26ca3..00000000000
--- a/spec/factories/environments.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-FactoryGirl.define do
- factory :environment, class: Environment do
- sequence(:name) { |n| "environment#{n}" }
-
- project factory: :empty_project
- end
-end
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index 5c8ddbebf0d..da8d97c9f82 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -67,6 +67,9 @@ FactoryGirl.define do
'new_issue_url' => 'http://redmine/projects/project_name_in_redmine/issues/new'
}
)
+
+ project.issues_tracker = 'redmine'
+ project.issues_tracker_id = 'project_name_in_redmine'
end
end
@@ -81,6 +84,9 @@ FactoryGirl.define do
'new_issue_url' => 'http://jira.example/secure/CreateIssue.jspa'
}
)
+
+ project.issues_tracker = 'jira'
+ project.issues_tracker_id = 'project_name_in_jira'
end
end
end
diff --git a/spec/features/admin/admin_hooks_spec.rb b/spec/features/admin/admin_hooks_spec.rb
index 31633817d53..7265cdac7a7 100644
--- a/spec/features/admin/admin_hooks_spec.rb
+++ b/spec/features/admin/admin_hooks_spec.rb
@@ -12,11 +12,9 @@ describe "Admin::Hooks", feature: true do
describe "GET /admin/hooks" do
it "should be ok" do
visit admin_root_path
-
- page.within ".layout-nav" do
+ page.within ".sidebar-wrapper" do
click_on "Hooks"
end
-
expect(current_path).to eq(admin_hooks_path)
end
diff --git a/spec/features/atom/dashboard_issues_spec.rb b/spec/features/atom/dashboard_issues_spec.rb
index 4dd9548cfc5..b710cb3c72f 100644
--- a/spec/features/atom/dashboard_issues_spec.rb
+++ b/spec/features/atom/dashboard_issues_spec.rb
@@ -5,6 +5,8 @@ describe "Dashboard Issues Feed", feature: true do
let!(:user) { create(:user) }
let!(:project1) { create(:project) }
let!(:project2) { create(:project) }
+ let!(:issue1) { create(:issue, author: user, assignee: user, project: project1) }
+ let!(:issue2) { create(:issue, author: user, assignee: user, project: project2) }
before do
project1.team << [user, :master]
@@ -12,51 +14,16 @@ describe "Dashboard Issues Feed", feature: true do
end
describe "atom feed" do
- it "renders atom feed via private token" do
+ it "should render atom feed via private token" do
visit issues_dashboard_path(:atom, private_token: user.private_token)
- expect(response_headers['Content-Type']).to have_content('application/atom+xml')
+ expect(response_headers['Content-Type']).
+ to have_content('application/atom+xml')
expect(body).to have_selector('title', text: "#{user.name} issues")
- end
-
- context "issue with basic fields" do
- let!(:issue2) { create(:issue, author: user, assignee: user, project: project2, description: 'test desc') }
-
- it "renders issue fields" do
- visit issues_dashboard_path(:atom, private_token: user.private_token)
-
- entry = find(:xpath, "//feed/entry[contains(summary/text(),'#{issue2.title}')]")
-
- expect(entry).to be_present
- expect(entry).to have_selector('author email', text: issue2.author_email)
- expect(entry).to have_selector('assignee email', text: issue2.author_email)
- expect(entry).not_to have_selector('labels')
- expect(entry).not_to have_selector('milestone')
- expect(entry).to have_selector('description', text: issue2.description)
- end
- end
-
- context "issue with label and milestone" do
- let!(:milestone1) { create(:milestone, project: project1, title: 'v1') }
- let!(:label1) { create(:label, project: project1, title: 'label1') }
- let!(:issue1) { create(:issue, author: user, assignee: user, project: project1, milestone: milestone1) }
-
- before do
- issue1.labels << label1
- end
-
- it "renders issue label and milestone info" do
- visit issues_dashboard_path(:atom, private_token: user.private_token)
-
- entry = find(:xpath, "//feed/entry[contains(summary/text(),'#{issue1.title}')]")
-
- expect(entry).to be_present
- expect(entry).to have_selector('author email', text: issue1.author_email)
- expect(entry).to have_selector('assignee email', text: issue1.author_email)
- expect(entry).to have_selector('labels label', text: label1.title)
- expect(entry).to have_selector('milestone', text: milestone1.title)
- expect(entry).not_to have_selector('description')
- end
+ expect(body).to have_selector('author email', text: issue1.author_email)
+ expect(body).to have_selector('entry summary', text: issue1.title)
+ expect(body).to have_selector('author email', text: issue2.author_email)
+ expect(body).to have_selector('entry summary', text: issue2.title)
end
end
end
diff --git a/spec/features/builds_spec.rb b/spec/features/builds_spec.rb
index 16832c297ac..b8ecc356b4d 100644
--- a/spec/features/builds_spec.rb
+++ b/spec/features/builds_spec.rb
@@ -97,42 +97,6 @@ describe "Builds" do
end
end
- context 'Artifacts expire date' do
- before do
- @build.update_attributes(artifacts_file: artifacts_file, artifacts_expire_at: expire_at)
- visit namespace_project_build_path(@project.namespace, @project, @build)
- end
-
- context 'no expire date defined' do
- let(:expire_at) { nil }
-
- it 'does not have the Keep button' do
- expect(page).not_to have_content 'Keep'
- end
- end
-
- context 'when expire date is defined' do
- let(:expire_at) { Time.now + 7.days }
-
- it 'keeps artifacts when Keep button is clicked' do
- expect(page).to have_content 'The artifacts will be removed'
- click_link 'Keep'
-
- expect(page).not_to have_link 'Keep'
- expect(page).not_to have_content 'The artifacts will be removed'
- end
- end
-
- context 'when artifacts expired' do
- let(:expire_at) { Time.now - 7.days }
-
- it 'does not have the Keep button' do
- expect(page).to have_content 'The artifacts were removed'
- expect(page).not_to have_link 'Keep'
- end
- end
- end
-
context 'Build raw trace' do
before do
@build.run!
diff --git a/spec/features/environments_spec.rb b/spec/features/environments_spec.rb
deleted file mode 100644
index 40fea5211e9..00000000000
--- a/spec/features/environments_spec.rb
+++ /dev/null
@@ -1,160 +0,0 @@
-require 'spec_helper'
-
-feature 'Environments', feature: true do
- given(:project) { create(:empty_project) }
- given(:user) { create(:user) }
- given(:role) { :developer }
-
- background do
- login_as(user)
- project.team << [user, role]
- end
-
- describe 'when showing environments' do
- given!(:environment) { }
- given!(:deployment) { }
-
- before do
- visit namespace_project_environments_path(project.namespace, project)
- end
-
- context 'without environments' do
- scenario 'does show no environments' do
- expect(page).to have_content('No environments to show')
- end
- end
-
- context 'with environments' do
- given(:environment) { create(:environment, project: project) }
-
- scenario 'does show environment name' do
- expect(page).to have_link(environment.name)
- end
-
- context 'without deployments' do
- scenario 'does show no deployments' do
- expect(page).to have_content('No deployments yet')
- end
- end
-
- context 'with deployments' do
- given(:deployment) { create(:deployment, environment: environment) }
-
- scenario 'does show deployment SHA' do
- expect(page).to have_link(deployment.short_sha)
- end
- end
- end
-
- scenario 'does have a New environment button' do
- expect(page).to have_link('New environment')
- end
- end
-
- describe 'when showing the environment' do
- given(:environment) { create(:environment, project: project) }
- given!(:deployment) { }
-
- before do
- visit namespace_project_environment_path(project.namespace, project, environment)
- end
-
- context 'without deployments' do
- scenario 'does show no deployments' do
- expect(page).to have_content('No deployments for')
- end
- end
-
- context 'with deployments' do
- given(:deployment) { create(:deployment, environment: environment) }
-
- scenario 'does show deployment SHA' do
- expect(page).to have_link(deployment.short_sha)
- end
-
- scenario 'does not show a retry button for deployment without build' do
- expect(page).not_to have_link('Retry')
- end
-
- context 'with build' do
- given(:build) { create(:ci_build, project: project) }
- given(:deployment) { create(:deployment, environment: environment, deployable: build) }
-
- scenario 'does show build name' do
- expect(page).to have_link("#{build.name} (##{build.id})")
- end
-
- scenario 'does show retry button' do
- expect(page).to have_link('Retry')
- end
- end
- end
- end
-
- describe 'when creating a new environment' do
- before do
- visit namespace_project_environments_path(project.namespace, project)
- end
-
- context 'when logged as developer' do
- before do
- click_link 'New environment'
- end
-
- context 'for valid name' do
- before do
- fill_in('Name', with: 'production')
- click_on 'Create environment'
- end
-
- scenario 'does create a new pipeline' do
- expect(page).to have_content('production')
- end
- end
-
- context 'for invalid name' do
- before do
- fill_in('Name', with: 'name with spaces')
- click_on 'Create environment'
- end
-
- scenario 'does show errors' do
- expect(page).to have_content('Name can contain only letters')
- end
- end
- end
-
- context 'when logged as reporter' do
- given(:role) { :reporter }
-
- scenario 'does not have a New environment link' do
- expect(page).not_to have_link('New environment')
- end
- end
- end
-
- describe 'when deleting existing environment' do
- given(:environment) { create(:environment, project: project) }
-
- before do
- visit namespace_project_environment_path(project.namespace, project, environment)
- end
-
- context 'when logged as master' do
- given(:role) { :master }
-
- scenario 'does delete environment' do
- click_link 'Destroy'
- expect(page).not_to have_link(environment.name)
- end
- end
-
- context 'when logged as developer' do
- given(:role) { :developer }
-
- scenario 'does not have a Destroy link' do
- expect(page).not_to have_link('Destroy')
- end
- end
- end
-end
diff --git a/spec/features/groups/members/owner_manages_access_requests_spec.rb b/spec/features/groups/members/owner_manages_access_requests_spec.rb
deleted file mode 100644
index 22525ce530b..00000000000
--- a/spec/features/groups/members/owner_manages_access_requests_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require 'spec_helper'
-
-feature 'Groups > Members > Owner manages access requests', feature: true do
- let(:user) { create(:user) }
- let(:owner) { create(:user) }
- let(:group) { create(:group, :public) }
-
- background do
- group.request_access(user)
- group.add_owner(owner)
- login_as(owner)
- end
-
- scenario 'owner can see access requests' do
- visit group_group_members_path(group)
-
- expect_visible_access_request(group, user)
- end
-
- scenario 'master can grant access' do
- visit group_group_members_path(group)
-
- expect_visible_access_request(group, user)
-
- perform_enqueued_jobs { click_on 'Grant access' }
-
- expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email]
- expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{group.name} group was granted"
- end
-
- scenario 'master can deny access' do
- visit group_group_members_path(group)
-
- expect_visible_access_request(group, user)
-
- perform_enqueued_jobs { click_on 'Deny access' }
-
- expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email]
- expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{group.name} group was denied"
- end
-
-
- def expect_visible_access_request(group, user)
- expect(group.members.request.exists?(user_id: user)).to be_truthy
- expect(page).to have_content "#{group.name} access requests (1)"
- expect(page).to have_content user.name
- end
-end
diff --git a/spec/features/groups/members/user_requests_access_spec.rb b/spec/features/groups/members/user_requests_access_spec.rb
deleted file mode 100644
index a878a96b6ee..00000000000
--- a/spec/features/groups/members/user_requests_access_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require 'spec_helper'
-
-feature 'Groups > Members > User requests access', feature: true do
- let(:user) { create(:user) }
- let(:owner) { create(:user) }
- let(:group) { create(:group, :public) }
-
- background do
- group.add_owner(owner)
- login_as(user)
- visit group_path(group)
- end
-
- scenario 'user can request access to a group' do
- perform_enqueued_jobs { click_link 'Request Access' }
-
- expect(ActionMailer::Base.deliveries.last.to).to eq [owner.notification_email]
- expect(ActionMailer::Base.deliveries.last.subject).to match "Request to join the #{group.name} group"
-
- expect(group.members.request.exists?(user_id: user)).to be_truthy
- expect(page).to have_content 'Your request for access has been queued for review.'
-
- expect(page).to have_content 'Withdraw Access Request'
- end
-
- scenario 'user is not listed in the group members page' do
- click_link 'Request Access'
-
- expect(group.members.request.exists?(user_id: user)).to be_truthy
-
- click_link 'Members'
-
- page.within('.content') do
- expect(page).not_to have_content(user.name)
- end
- end
-
- scenario 'user can withdraw its request for access' do
- click_link 'Request Access'
-
- expect(group.members.request.exists?(user_id: user)).to be_truthy
-
- click_link 'Withdraw Access Request'
-
- expect(group.members.request.exists?(user_id: user)).to be_falsey
- expect(page).to have_content 'Your access request to the group has been withdrawn.'
- end
-end
diff --git a/spec/features/issues/bulk_assigment_labels_spec.rb b/spec/features/issues/bulk_assigment_labels_spec.rb
index 0fbc2062e39..c58b87281a3 100644
--- a/spec/features/issues/bulk_assigment_labels_spec.rb
+++ b/spec/features/issues/bulk_assigment_labels_spec.rb
@@ -83,23 +83,6 @@ feature 'Issues > Labels bulk assignment', feature: true do
end
end
- context 'can assign a label to all issues when label is present' do
- before do
- issue2.labels << bug
- issue2.labels << feature
- visit namespace_project_issues_path(project.namespace, project)
-
- check 'check_all_issues'
- open_labels_dropdown ['bug']
- update_issues
- end
-
- it do
- expect(find("#issue_#{issue1.id}")).to have_content 'bug'
- expect(find("#issue_#{issue2.id}")).to have_content 'bug'
- end
- end
-
context 'can bulk un-assign' do
context 'all labels to all issues' do
before do
diff --git a/spec/features/issues/filter_by_labels_spec.rb b/spec/features/issues/filter_by_labels_spec.rb
index 5ea02b8d39c..16c619c9288 100644
--- a/spec/features/issues/filter_by_labels_spec.rb
+++ b/spec/features/issues/filter_by_labels_spec.rb
@@ -56,9 +56,8 @@ feature 'Issue filtering by Labels', feature: true do
end
it 'should remove label "bug"' do
- find('.js-label-filter-remove').click
- wait_for_ajax
- expect(find('.filtered-labels', visible: false)).to have_no_content "bug"
+ first('.js-label-filter-remove').click
+ expect(find('.filtered-labels')).to have_no_content "bug"
end
end
@@ -143,8 +142,7 @@ feature 'Issue filtering by Labels', feature: true do
end
it 'should remove label "enhancement"' do
- find('.js-label-filter-remove', match: :first).click
- wait_for_ajax
+ first('.js-label-filter-remove').click
expect(find('.filtered-labels')).to have_no_content "enhancement"
end
end
@@ -181,7 +179,6 @@ feature 'Issue filtering by Labels', feature: true do
before do
page.within '.labels-filter' do
click_button 'Label'
- wait_for_ajax
click_link 'bug'
find('.dropdown-menu-close').click
end
@@ -192,11 +189,14 @@ feature 'Issue filtering by Labels', feature: true do
end
it 'should allow user to remove filtered labels' do
- first('.js-label-filter-remove').click
- wait_for_ajax
+ page.within '.filtered-labels' do
+ first('.js-label-filter-remove').click
+ expect(page).not_to have_content 'bug'
+ end
- expect(find('.filtered-labels', visible: false)).not_to have_content 'bug'
- expect(find('.labels-filter')).not_to have_content 'bug'
+ page.within '.labels-filter' do
+ expect(page).not_to have_content 'bug'
+ end
end
end
diff --git a/spec/features/issues/filter_issues_spec.rb b/spec/features/issues/filter_issues_spec.rb
index 4bcb105b17d..1f0594e6b02 100644
--- a/spec/features/issues/filter_issues_spec.rb
+++ b/spec/features/issues/filter_issues_spec.rb
@@ -1,7 +1,6 @@
require 'rails_helper'
describe 'Filter issues', feature: true do
- include WaitForAjax
let!(:project) { create(:project) }
let!(:user) { create(:user)}
@@ -22,7 +21,7 @@ describe 'Filter issues', feature: true do
find('.dropdown-menu-user-link', text: user.username).click
- wait_for_ajax
+ sleep 2
end
context 'assignee', js: true do
@@ -54,7 +53,7 @@ describe 'Filter issues', feature: true do
find('.milestone-filter .dropdown-content a', text: milestone.title).click
- wait_for_ajax
+ sleep 2
end
context 'milestone', js: true do
@@ -81,21 +80,23 @@ describe 'Filter issues', feature: true do
before do
visit namespace_project_issues_path(project.namespace, project)
find('.js-label-select').click
- wait_for_ajax
end
it 'should filter by any label' do
find('.dropdown-menu-labels a', text: 'Any Label').click
page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
- wait_for_ajax
+ sleep 2
- expect(find('.labels-filter')).to have_content 'Label'
+ page.within '.labels-filter' do
+ expect(page).to have_content 'Any Label'
+ end
+ expect(find('.js-label-select .dropdown-toggle-text')).to have_content('Any Label')
end
it 'should filter by no label' do
find('.dropdown-menu-labels a', text: 'No Label').click
page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
- wait_for_ajax
+ sleep 2
page.within '.labels-filter' do
expect(page).to have_content 'No Label'
@@ -121,14 +122,14 @@ describe 'Filter issues', feature: true do
find('.dropdown-menu-user-link', text: user.username).click
- wait_for_ajax
+ sleep 2
find('.js-label-select').click
find('.dropdown-menu-labels .dropdown-content a', text: label.title).click
page.first('.labels-filter .dropdown-title .dropdown-menu-close-icon').click
- wait_for_ajax
+ sleep 2
end
context 'assignee and label', js: true do
@@ -275,12 +276,9 @@ describe 'Filter issues', feature: true do
it 'should be able to filter and sort issues' do
click_button 'Label'
- wait_for_ajax
page.within '.labels-filter' do
click_link 'bug'
end
- find('.dropdown-menu-close-icon').click
- wait_for_ajax
page.within '.issues-list' do
expect(page).to have_selector('.issue', count: 2)
@@ -290,7 +288,6 @@ describe 'Filter issues', feature: true do
page.within '.dropdown-menu-sort' do
click_link 'Oldest created'
end
- wait_for_ajax
page.within '.issues-list' do
expect(first('.issue')).to have_content('Frontend')
diff --git a/spec/features/issues/move_spec.rb b/spec/features/issues/move_spec.rb
index 7773c486b4e..c7019c5aea1 100644
--- a/spec/features/issues/move_spec.rb
+++ b/spec/features/issues/move_spec.rb
@@ -26,7 +26,6 @@ feature 'issue move to another project' do
context 'user has permission to move issue' do
let!(:mr) { create(:merge_request, source_project: old_project) }
let(:new_project) { create(:project) }
- let(:new_project_search) { create(:project) }
let(:text) { 'Text with !1' }
let(:cross_reference) { old_project.to_reference }
@@ -48,21 +47,6 @@ feature 'issue move to another project' do
expect(page).to have_content(issue.title)
end
- scenario 'searching project dropdown', js: true do
- new_project_search.team << [user, :reporter]
-
- page.within '.js-move-dropdown' do
- first('.select2-choice').click
- end
-
- fill_in('s2id_autogen2_search', with: new_project_search.name)
-
- page.within '.select2-drop' do
- expect(page).to have_content(new_project_search.name)
- expect(page).not_to have_content(new_project.name)
- end
- end
-
context 'user does not have permission to move the issue to a project', js: true do
let!(:private_project) { create(:project, :private) }
let(:another_project) { create(:project) }
diff --git a/spec/features/issues/todo_spec.rb b/spec/features/issues/todo_spec.rb
deleted file mode 100644
index b69cce3e7d7..00000000000
--- a/spec/features/issues/todo_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require 'rails_helper'
-
-feature 'Manually create a todo item from issue', feature: true, js: true do
- let!(:project) { create(:project) }
- let!(:issue) { create(:issue, project: project) }
- let!(:user) { create(:user)}
-
- before do
- project.team << [user, :master]
- login_as(user)
- visit namespace_project_issue_path(project.namespace, project, issue)
- end
-
- it 'should create todo when clicking button' do
- page.within '.issuable-sidebar' do
- click_button 'Add Todo'
- expect(page).to have_content 'Mark Done'
- end
-
- page.within '.header-content .todos-pending-count' do
- expect(page).to have_content '1'
- end
- end
-
- it 'should mark a todo as done' do
- page.within '.issuable-sidebar' do
- click_button 'Add Todo'
- click_button 'Mark Done'
- end
-
- expect(page).to have_selector('.todos-pending-count', visible: false)
- end
-end
diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb
index c3cb3379440..f6fb6a72d22 100644
--- a/spec/features/issues_spec.rb
+++ b/spec/features/issues_spec.rb
@@ -396,27 +396,6 @@ describe 'Issues', feature: true do
expect(page).to have_content @user.name
end
end
-
- it 'allows user to unselect themselves', js: true do
- issue2 = create(:issue, project: project, author: @user)
- visit namespace_project_issue_path(project.namespace, project, issue2)
-
- page.within '.assignee' do
- click_link 'Edit'
- click_link @user.name
-
- page.within '.value' do
- expect(page).to have_content @user.name
- end
-
- click_link 'Edit'
- click_link @user.name
-
- page.within '.value' do
- expect(page).to have_content "No assignee"
- end
- end
- end
end
context 'by unauthorized user' do
@@ -461,26 +440,6 @@ describe 'Issues', feature: true do
expect(issue.reload.milestone).to be_nil
end
-
- it 'allows user to de-select milestone', js: true do
- visit namespace_project_issue_path(project.namespace, project, issue)
-
- page.within('.milestone') do
- click_link 'Edit'
- click_link milestone.title
-
- page.within '.value' do
- expect(page).to have_content milestone.title
- end
-
- click_link 'Edit'
- click_link milestone.title
-
- page.within '.value' do
- expect(page).to have_content 'None'
- end
- end
- end
end
context 'by unauthorized user' do
@@ -556,10 +515,10 @@ describe 'Issues', feature: true do
first('.ui-state-default').click
end
- expect(page).to have_no_content 'No due date'
+ expect(page).to have_no_content 'None'
click_link 'remove due date'
- expect(page).to have_content 'No due date'
+ expect(page).to have_content 'None'
end
end
end
diff --git a/spec/features/projects/commits/cherry_pick_spec.rb b/spec/features/projects/commits/cherry_pick_spec.rb
index f88c0616b52..0559b02f321 100644
--- a/spec/features/projects/commits/cherry_pick_spec.rb
+++ b/spec/features/projects/commits/cherry_pick_spec.rb
@@ -16,7 +16,6 @@ describe 'Cherry-pick Commits' do
it do
visit namespace_project_commit_path(project.namespace, project, master_pickable_commit.id)
find("a[href='#modal-cherry-pick-commit']").click
- expect(page).not_to have_content('v1.0.0') # Only branches, not tags
page.within('#modal-cherry-pick-commit') do
uncheck 'create_merge_request'
click_button 'Cherry-pick'
diff --git a/spec/features/projects/members/master_manages_access_requests_spec.rb b/spec/features/projects/members/master_manages_access_requests_spec.rb
deleted file mode 100644
index 5fe4caa12f0..00000000000
--- a/spec/features/projects/members/master_manages_access_requests_spec.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-require 'spec_helper'
-
-feature 'Projects > Members > Master manages access requests', feature: true do
- let(:user) { create(:user) }
- let(:master) { create(:user) }
- let(:project) { create(:project, :public) }
-
- background do
- project.request_access(user)
- project.team << [master, :master]
- login_as(master)
- end
-
- scenario 'master can see access requests' do
- visit namespace_project_project_members_path(project.namespace, project)
-
- expect_visible_access_request(project, user)
- end
-
- scenario 'master can grant access' do
- visit namespace_project_project_members_path(project.namespace, project)
-
- expect_visible_access_request(project, user)
-
- perform_enqueued_jobs { click_on 'Grant access' }
-
- expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email]
- expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{project.name_with_namespace} project was granted"
- end
-
- scenario 'master can deny access' do
- visit namespace_project_project_members_path(project.namespace, project)
-
- expect_visible_access_request(project, user)
-
- perform_enqueued_jobs { click_on 'Deny access' }
-
- expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email]
- expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{project.name_with_namespace} project was denied"
- end
-
- def expect_visible_access_request(project, user)
- expect(project.members.request.exists?(user_id: user)).to be_truthy
- expect(page).to have_content "#{project.name} access requests (1)"
- expect(page).to have_content user.name
- end
-end
diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb
deleted file mode 100644
index fd92a3a2f0c..00000000000
--- a/spec/features/projects/members/user_requests_access_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require 'spec_helper'
-
-feature 'Projects > Members > User requests access', feature: true do
- let(:user) { create(:user) }
- let(:master) { create(:user) }
- let(:project) { create(:project, :public) }
-
- background do
- project.team << [master, :master]
- login_as(user)
- visit namespace_project_path(project.namespace, project)
- end
-
- scenario 'user can request access to a project' do
- perform_enqueued_jobs { click_link 'Request Access' }
-
- expect(ActionMailer::Base.deliveries.last.to).to eq [master.notification_email]
- expect(ActionMailer::Base.deliveries.last.subject).to eq "Request to join the #{project.name_with_namespace} project"
-
- expect(project.members.request.exists?(user_id: user)).to be_truthy
- expect(page).to have_content 'Your request for access has been queued for review.'
-
- expect(page).to have_content 'Withdraw Access Request'
- end
-
- scenario 'user is not listed in the project members page' do
- click_link 'Request Access'
-
- expect(project.members.request.exists?(user_id: user)).to be_truthy
-
- open_project_settings_menu
- click_link 'Members'
-
- visit namespace_project_project_members_path(project.namespace, project)
- page.within('.content') do
- expect(page).not_to have_content(user.name)
- end
- end
-
- scenario 'user can withdraw its request for access' do
- click_link 'Request Access'
-
- expect(project.members.request.exists?(user_id: user)).to be_truthy
-
- click_link 'Withdraw Access Request'
-
- expect(project.members.request.exists?(user_id: user)).to be_falsey
- expect(page).to have_content 'Your access request to the project has been withdrawn.'
- end
-
- def open_project_settings_menu
- find('#project-settings-button').click
- end
-end
diff --git a/spec/features/search_spec.rb b/spec/features/search_spec.rb
index b9e63a7152c..029a11ea43c 100644
--- a/spec/features/search_spec.rb
+++ b/spec/features/search_spec.rb
@@ -47,83 +47,4 @@ describe "Search", feature: true do
expect(page).to have_link(snippet.title)
end
end
-
-
- describe 'Right header search field', feature: true do
-
- describe 'Search in project page' do
- before do
- visit namespace_project_path(project.namespace, project)
- end
-
- it 'top right search form is present' do
- expect(page).to have_selector('#search')
- end
-
- it 'top right search form contains location badge' do
- expect(page).to have_selector('.has-location-badge')
- end
-
- context 'clicking the search field', js: true do
- it 'should show category search dropdown' do
- page.find('#search').click
-
- expect(page).to have_selector('.dropdown-header', text: /#{project.name}/i)
- end
- end
-
- context 'click the links in the category search dropdown', js: true do
-
- before do
- page.find('#search').click
- end
-
- it 'should take user to her issues page when issues assigned is clicked' do
- find('.dropdown-menu').click_link 'Issues assigned to me'
- sleep 2
-
- expect(page).to have_selector('.issues-holder')
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
- end
-
- it 'should take user to her issues page when issues authored is clicked' do
- find('.dropdown-menu').click_link "Issues I've created"
- sleep 2
-
- expect(page).to have_selector('.issues-holder')
- expect(find('.js-author-search .dropdown-toggle-text')).to have_content(user.name)
- end
-
- it 'should take user to her MR page when MR assigned is clicked' do
- find('.dropdown-menu').click_link 'Merge requests assigned to me'
- sleep 2
-
- expect(page).to have_selector('.merge-requests-holder')
- expect(find('.js-assignee-search .dropdown-toggle-text')).to have_content(user.name)
- end
-
- it 'should take user to her MR page when MR authored is clicked' do
- find('.dropdown-menu').click_link "Merge requests I've created"
- sleep 2
-
- expect(page).to have_selector('.merge-requests-holder')
- expect(find('.js-author-search .dropdown-toggle-text')).to have_content(user.name)
- end
- end
-
- context 'entering text into the search field', js: true do
- before do
- page.within '.search-input-wrap' do
- fill_in "search", with: project.name[0..3]
- end
- end
-
- it 'should not display the category search dropdown' do
- expect(page).not_to have_selector('.dropdown-header', text: /#{project.name}/i)
- end
- end
- end
- end
-
-
end
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index f6c6687e162..c5f741709ad 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -175,49 +175,6 @@ describe "Public Project Access", feature: true do
end
end
- describe "GET /:project_path/environments" do
- subject { namespace_project_environments_path(project.namespace, project) }
-
- it { is_expected.to be_allowed_for :admin }
- it { is_expected.to be_allowed_for owner }
- it { is_expected.to be_allowed_for master }
- it { is_expected.to be_allowed_for developer }
- it { is_expected.to be_allowed_for reporter }
- it { is_expected.to be_denied_for guest }
- it { is_expected.to be_denied_for :user }
- it { is_expected.to be_denied_for :external }
- it { is_expected.to be_denied_for :visitor }
- end
-
- describe "GET /:project_path/environments/:id" do
- let(:environment) { create(:environment, project: project) }
- subject { namespace_project_environments_path(project.namespace, project, environment) }
-
- it { is_expected.to be_allowed_for :admin }
- it { is_expected.to be_allowed_for owner }
- it { is_expected.to be_allowed_for master }
- it { is_expected.to be_allowed_for developer }
- it { is_expected.to be_allowed_for reporter }
- it { is_expected.to be_denied_for guest }
- it { is_expected.to be_denied_for :user }
- it { is_expected.to be_denied_for :external }
- it { is_expected.to be_denied_for :visitor }
- end
-
- describe "GET /:project_path/environments/new" do
- subject { new_namespace_project_environment_path(project.namespace, project) }
-
- it { is_expected.to be_allowed_for :admin }
- it { is_expected.to be_allowed_for owner }
- it { is_expected.to be_allowed_for master }
- it { is_expected.to be_allowed_for developer }
- it { is_expected.to be_denied_for reporter }
- it { is_expected.to be_denied_for guest }
- it { is_expected.to be_denied_for :user }
- it { is_expected.to be_denied_for :external }
- it { is_expected.to be_denied_for :visitor }
- end
-
describe "GET /:project_path/blob" do
let(:commit) { project.repository.commit }
diff --git a/spec/features/u2f_spec.rb b/spec/features/u2f_spec.rb
index 14613754f74..366a90228b1 100644
--- a/spec/features/u2f_spec.rb
+++ b/spec/features/u2f_spec.rb
@@ -12,24 +12,39 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
describe "registration" do
let(:user) { create(:user) }
-
- before do
- login_as(user)
- user.update_attribute(:otp_required_for_login, true)
- end
+ before { login_as(user) }
describe 'when 2FA via OTP is disabled' do
- before { user.update_attribute(:otp_required_for_login, false) }
+ it 'allows registering a new device' do
+ visit profile_account_path
+ click_on 'Enable Two-Factor Authentication'
- it 'does not allow registering a new device' do
+ register_u2f_device
+
+ expect(page.body).to match('Your U2F device was registered')
+ end
+
+ it 'allows registering more than one device' do
visit profile_account_path
+
+ # First device
click_on 'Enable Two-Factor Authentication'
+ register_u2f_device
+ expect(page.body).to match('Your U2F device was registered')
+
+ # Second device
+ click_on 'Manage Two-Factor Authentication'
+ register_u2f_device
+ expect(page.body).to match('Your U2F device was registered')
+ click_on 'Manage Two-Factor Authentication'
- expect(page).to have_button('Setup New U2F Device', disabled: true)
+ expect(page.body).to match('You have 2 U2F devices registered')
end
end
describe 'when 2FA via OTP is enabled' do
+ before { user.update_attributes(otp_required_for_login: true) }
+
it 'allows registering a new device' do
visit profile_account_path
click_on 'Manage Two-Factor Authentication'
@@ -52,6 +67,7 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
click_on 'Manage Two-Factor Authentication'
register_u2f_device
expect(page.body).to match('Your U2F device was registered')
+
click_on 'Manage Two-Factor Authentication'
expect(page.body).to match('You have 2 U2F devices registered')
end
@@ -60,16 +76,15 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
it 'allows the same device to be registered for multiple users' do
# First user
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
u2f_device = register_u2f_device
expect(page.body).to match('Your U2F device was registered')
logout
# Second user
- user = login_as(:user)
- user.update_attribute(:otp_required_for_login, true)
+ login_as(:user)
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
register_u2f_device(u2f_device)
expect(page.body).to match('Your U2F device was registered')
@@ -79,7 +94,7 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
context "when there are form errors" do
it "doesn't register the device if there are errors" do
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
# Have the "u2f device" respond with bad data
page.execute_script("u2f.register = function(_,_,_,callback) { callback('bad response'); };")
@@ -94,7 +109,7 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
it "allows retrying registration" do
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
# Failed registration
page.execute_script("u2f.register = function(_,_,_,callback) { callback('bad response'); };")
@@ -118,9 +133,8 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
before do
# Register and logout
login_as(user)
- user.update_attribute(:otp_required_for_login, true)
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
@u2f_device = register_u2f_device
logout
end
@@ -140,7 +154,7 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
describe "when 2FA via OTP is enabled" do
it "allows logging in with the U2F device" do
- user.update_attribute(:otp_required_for_login, true)
+ user.update_attributes(otp_required_for_login: true)
login_with(user)
@u2f_device.respond_to_u2f_authentication
@@ -157,9 +171,8 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
it "does not allow logging in with that particular device" do
# Register current user with the different U2F device
current_user = login_as(:user)
- current_user.update_attribute(:otp_required_for_login, true)
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
register_u2f_device
logout
@@ -178,9 +191,8 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
it "allows logging in with that particular device" do
# Register current user with the same U2F device
current_user = login_as(:user)
- current_user.update_attribute(:otp_required_for_login, true)
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
register_u2f_device(@u2f_device)
logout
@@ -215,9 +227,8 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
before do
login_as(user)
- user.update_attribute(:otp_required_for_login, true)
visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
+ click_on 'Enable Two-Factor Authentication'
register_u2f_device
end
diff --git a/spec/finders/notes_finder_spec.rb b/spec/finders/notes_finder_spec.rb
index 639b28d49ee..c83824b900d 100644
--- a/spec/finders/notes_finder_spec.rb
+++ b/spec/finders/notes_finder_spec.rb
@@ -34,21 +34,5 @@ describe NotesFinder do
notes = NotesFinder.new.execute(project, user, params)
expect(notes).to eq([note1])
end
-
- context 'confidential issue notes' do
- let(:confidential_issue) { create(:issue, :confidential, project: project, author: user) }
- let!(:confidential_note) { create(:note, noteable: confidential_issue, project: confidential_issue.project) }
-
- let(:params) { { target_id: confidential_issue.id, target_type: 'issue', last_fetched_at: 1.hour.ago.to_i } }
-
- it 'returns notes if user can see the issue' do
- expect(NotesFinder.new.execute(project, user, params)).to eq([confidential_note])
- end
-
- it 'raises an error if user can not see the issue' do
- user = create(:user)
- expect { NotesFinder.new.execute(project, user, params) }.to raise_error(ActiveRecord::RecordNotFound)
- end
- end
end
end
diff --git a/spec/fixtures/container_registry/tag_manifest_1.json b/spec/fixtures/container_registry/tag_manifest_1.json
deleted file mode 100644
index d09ede5bea7..00000000000
--- a/spec/fixtures/container_registry/tag_manifest_1.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "schemaVersion": 1,
- "name": "library/alpine",
- "tag": "2.6",
- "architecture": "amd64",
- "fsLayers": [
- {
- "blobSum": "sha256:2a3ebcb7fbcc29bf40c4f62863008bb573acdea963454834d9483b3e5300c45d"
- }
- ],
- "history": [
- {
- "v1Compatibility": "{\"id\":\"dd807873c9a21bcc82e30317c283e6601d7e19f5cf7867eec34cdd1aeb3f099e\",\"created\":\"2016-01-18T18:32:39.162138276Z\",\"container\":\"556a728876db7b0e621adc029c87c649d32520804f8f15defd67bb070dc1a88d\",\"container_config\":{\"Hostname\":\"556a728876db\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) ADD file:7dee8a455bcc39013aa168d27ece9227aad155adbaacbd153d94ca60113f59fc in /\"],\"Image\":\"\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":null},\"docker_version\":\"1.8.3\",\"config\":{\"Hostname\":\"556a728876db\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":null,\"Image\":\"\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":null},\"architecture\":\"amd64\",\"os\":\"linux\",\"Size\":4501436}"
- }
- ],
- "signatures": [
- {
- "header": {
- "jwk": {
- "crv": "P-256",
- "kid": "4MZL:Z5ZP:2RPA:Q3TD:QOHA:743L:EM2G:QY6Q:ZJCX:BSD7:CRYC:LQ6T",
- "kty": "EC",
- "x": "qmWOaxPUk7QsE5iTPdeG1e9yNE-wranvQEnWzz9FhWM",
- "y": "WeeBpjTOYnTNrfCIxtFY5qMrJNNk9C1vc5ryxbbMD_M"
- },
- "alg": "ES256"
- },
- "signature": "0zmjTJ4m21yVwAeteLc3SsQ0miScViCDktFPR67W-ozGjjI3iBjlDjwOl6o2sds5ZI9U6bSIKOeLDinGOhHoOQ",
- "protected": "eyJmb3JtYXRMZW5ndGgiOjEzNzIsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAxNi0wNi0xNVQxMDo0NDoxNFoifQ"
- }
- ]
-}
diff --git a/spec/helpers/gitlab_routing_helper_spec.rb b/spec/helpers/gitlab_routing_helper_spec.rb
deleted file mode 100644
index 14847d0a49e..00000000000
--- a/spec/helpers/gitlab_routing_helper_spec.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-require 'spec_helper'
-
-describe GitlabRoutingHelper do
- describe 'Project URL helpers' do
- describe '#project_members_url' do
- let(:project) { build_stubbed(:empty_project) }
-
- it { expect(project_members_url(project)).to eq namespace_project_project_members_url(project.namespace, project) }
- end
-
- describe '#project_member_path' do
- let(:project_member) { create(:project_member) }
-
- it { expect(project_member_path(project_member)).to eq namespace_project_project_member_path(project_member.source.namespace, project_member.source, project_member) }
- end
-
- describe '#request_access_project_members_path' do
- let(:project) { build_stubbed(:empty_project) }
-
- it { expect(request_access_project_members_path(project)).to eq request_access_namespace_project_project_members_path(project.namespace, project) }
- end
-
- describe '#leave_project_members_path' do
- let(:project) { build_stubbed(:empty_project) }
-
- it { expect(leave_project_members_path(project)).to eq leave_namespace_project_project_members_path(project.namespace, project) }
- end
-
- describe '#approve_access_request_project_member_path' do
- let(:project_member) { create(:project_member) }
-
- it { expect(approve_access_request_project_member_path(project_member)).to eq approve_access_request_namespace_project_project_member_path(project_member.source.namespace, project_member.source, project_member) }
- end
-
- describe '#resend_invite_project_member_path' do
- let(:project_member) { create(:project_member) }
-
- it { expect(resend_invite_project_member_path(project_member)).to eq resend_invite_namespace_project_project_member_path(project_member.source.namespace, project_member.source, project_member) }
- end
- end
-
- describe 'Group URL helpers' do
- describe '#group_members_url' do
- let(:group) { build_stubbed(:group) }
-
- it { expect(group_members_url(group)).to eq group_group_members_url(group) }
- end
-
- describe '#group_member_path' do
- let(:group_member) { create(:group_member) }
-
- it { expect(group_member_path(group_member)).to eq group_group_member_path(group_member.source, group_member) }
- end
-
- describe '#request_access_group_members_path' do
- let(:group) { build_stubbed(:group) }
-
- it { expect(request_access_group_members_path(group)).to eq request_access_group_group_members_path(group) }
- end
-
- describe '#leave_group_members_path' do
- let(:group) { build_stubbed(:group) }
-
- it { expect(leave_group_members_path(group)).to eq leave_group_group_members_path(group) }
- end
-
- describe '#approve_access_request_group_member_path' do
- let(:group_member) { create(:group_member) }
-
- it { expect(approve_access_request_group_member_path(group_member)).to eq approve_access_request_group_group_member_path(group_member.source, group_member) }
- end
-
- describe '#resend_invite_group_member_path' do
- let(:group_member) { create(:group_member) }
-
- it { expect(resend_invite_group_member_path(group_member)).to eq resend_invite_group_group_member_path(group_member.source, group_member) }
- end
- end
-end
diff --git a/spec/helpers/issues_helper_spec.rb b/spec/helpers/issues_helper_spec.rb
index 831ae7fb69c..eae61a54dfc 100644
--- a/spec/helpers/issues_helper_spec.rb
+++ b/spec/helpers/issues_helper_spec.rb
@@ -7,7 +7,10 @@ describe IssuesHelper do
describe "url_for_project_issues" do
let(:project_url) { ext_project.external_issue_tracker.project_url }
- let(:ext_expected) { project_url.gsub(':project_id', ext_project.id.to_s) }
+ let(:ext_expected) do
+ project_url.gsub(':project_id', ext_project.id.to_s)
+ .gsub(':issues_tracker_id', ext_project.issues_tracker_id.to_s)
+ end
let(:int_expected) { polymorphic_path([@project.namespace, project]) }
it "should return internal path if used internal tracker" do
@@ -53,7 +56,11 @@ describe IssuesHelper do
describe "url_for_issue" do
let(:issues_url) { ext_project.external_issue_tracker.issues_url}
- let(:ext_expected) { issues_url.gsub(':id', issue.iid.to_s).gsub(':project_id', ext_project.id.to_s) }
+ let(:ext_expected) do
+ issues_url.gsub(':id', issue.iid.to_s)
+ .gsub(':project_id', ext_project.id.to_s)
+ .gsub(':issues_tracker_id', ext_project.issues_tracker_id.to_s)
+ end
let(:int_expected) { polymorphic_path([@project.namespace, project, issue]) }
it "should return internal path if used internal tracker" do
@@ -99,7 +106,10 @@ describe IssuesHelper do
describe 'url_for_new_issue' do
let(:issues_url) { ext_project.external_issue_tracker.new_issue_url }
- let(:ext_expected) { issues_url.gsub(':project_id', ext_project.id.to_s) }
+ let(:ext_expected) do
+ issues_url.gsub(':project_id', ext_project.id.to_s)
+ .gsub(':issues_tracker_id', ext_project.issues_tracker_id.to_s)
+ end
let(:int_expected) { new_namespace_project_issue_path(project.namespace, project) }
it "should return internal path if used internal tracker" do
diff --git a/spec/helpers/members_helper_spec.rb b/spec/helpers/members_helper_spec.rb
deleted file mode 100644
index 7998209b7b0..00000000000
--- a/spec/helpers/members_helper_spec.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'spec_helper'
-
-describe MembersHelper do
- describe '#action_member_permission' do
- let(:project_member) { build(:project_member) }
- let(:group_member) { build(:group_member) }
-
- it { expect(action_member_permission(:admin, project_member)).to eq :admin_project_member }
- it { expect(action_member_permission(:admin, group_member)).to eq :admin_group_member }
- end
-
- describe '#remove_member_message' do
- let(:requester) { build(:user) }
- let(:project) { create(:project) }
- let(:project_member) { build(:project_member, project: project) }
- let(:project_member_invite) { build(:project_member, project: project).tap { |m| m.generate_invite_token! } }
- let(:project_member_request) { project.request_access(requester) }
- let(:group) { create(:group) }
- let(:group_member) { build(:group_member, group: group) }
- let(:group_member_invite) { build(:group_member, group: group).tap { |m| m.generate_invite_token! } }
- let(:group_member_request) { group.request_access(requester) }
-
- it { expect(remove_member_message(project_member)).to eq "Are you sure you want to remove #{project_member.user.name} from the #{project.name_with_namespace} project?" }
- it { expect(remove_member_message(project_member_invite)).to eq "Are you sure you want to revoke the invitation for #{project_member_invite.invite_email} to join the #{project.name_with_namespace} project?" }
- it { expect(remove_member_message(project_member_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{project.name_with_namespace} project?" }
- it { expect(remove_member_message(project_member_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{project.name_with_namespace} project?" }
- it { expect(remove_member_message(group_member)).to eq "Are you sure you want to remove #{group_member.user.name} from the #{group.name} group?" }
- it { expect(remove_member_message(group_member_invite)).to eq "Are you sure you want to revoke the invitation for #{group_member_invite.invite_email} to join the #{group.name} group?" }
- it { expect(remove_member_message(group_member_request)).to eq "Are you sure you want to deny #{requester.name}'s request to join the #{group.name} group?" }
- it { expect(remove_member_message(group_member_request, user: requester)).to eq "Are you sure you want to withdraw your access request for the #{group.name} group?" }
- end
-
- describe '#remove_member_title' do
- let(:requester) { build(:user) }
- let(:project) { create(:project) }
- let(:project_member) { build(:project_member, project: project) }
- let(:project_member_request) { project.request_access(requester) }
- let(:group) { create(:group) }
- let(:group_member) { build(:group_member, group: group) }
- let(:group_member_request) { group.request_access(requester) }
-
- it { expect(remove_member_title(project_member)).to eq 'Remove user from project' }
- it { expect(remove_member_title(project_member_request)).to eq 'Deny access request from project' }
- it { expect(remove_member_title(group_member)).to eq 'Remove user from group' }
- it { expect(remove_member_title(group_member_request)).to eq 'Deny access request from group' }
- end
-
- describe '#leave_confirmation_message' do
- let(:project) { build_stubbed(:project) }
- let(:group) { build_stubbed(:group) }
- let(:user) { build_stubbed(:user) }
-
- it { expect(leave_confirmation_message(project)).to eq "Are you sure you want to leave the \"#{project.name_with_namespace}\" project?" }
- it { expect(leave_confirmation_message(group)).to eq "Are you sure you want to leave the \"#{group.name}\" group?" }
- end
-end
diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb
index 09e0bbfd00b..ac5af8740dc 100644
--- a/spec/helpers/projects_helper_spec.rb
+++ b/spec/helpers/projects_helper_spec.rb
@@ -45,6 +45,16 @@ describe ProjectsHelper do
end
end
+ describe 'user_max_access_in_project' do
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+ before do
+ project.team.add_user(user, Gitlab::Access::MASTER)
+ end
+
+ it { expect(helper.user_max_access_in_project(user.id, project)).to eq('Master') }
+ end
+
describe "readme_cache_key" do
let(:project) { create(:project) }
diff --git a/spec/javascripts/application_spec.js.coffee b/spec/javascripts/application_spec.js.coffee
deleted file mode 100644
index 8af39c41f2f..00000000000
--- a/spec/javascripts/application_spec.js.coffee
+++ /dev/null
@@ -1,30 +0,0 @@
-#= require lib/common_utils
-
-describe 'Application', ->
- describe 'disable buttons', ->
- fixture.preload('application.html')
-
- beforeEach ->
- fixture.load('application.html')
-
- it 'should prevent default action for disabled buttons', ->
-
- gl.utils.preventDisabledButtons()
-
- isClicked = false
- $button = $ '#test-button'
-
- $button.click -> isClicked = true
- $button.trigger 'click'
-
- expect(isClicked).toBe false
-
-
- it 'should be on the same page if a disabled link clicked', ->
-
- locationBeforeLinkClick = window.location.href
- gl.utils.preventDisabledButtons()
-
- $('#test-link').click()
-
- expect(window.location.href).toBe locationBeforeLinkClick
diff --git a/spec/javascripts/fixtures/application.html.haml b/spec/javascripts/fixtures/application.html.haml
deleted file mode 100644
index 3fc6114407d..00000000000
--- a/spec/javascripts/fixtures/application.html.haml
+++ /dev/null
@@ -1,2 +0,0 @@
-%a#test-link.btn.disabled{:href => "/foo"} Test link
-%button#test-button.btn.disabled Test Button
diff --git a/spec/javascripts/fixtures/search_autocomplete.html.haml b/spec/javascripts/fixtures/search_autocomplete.html.haml
deleted file mode 100644
index 7785120da5b..00000000000
--- a/spec/javascripts/fixtures/search_autocomplete.html.haml
+++ /dev/null
@@ -1,10 +0,0 @@
-.search.search-form.has-location-badge
- %form.navbar-form
- .search-input-container
- %div.location-badge
- This project
- .search-input-wrap
- .dropdown
- %input#search.search-input.dropdown-menu-toggle
- .dropdown-menu.dropdown-select
- .dropdown-content
diff --git a/spec/javascripts/fixtures/u2f/register.html.haml b/spec/javascripts/fixtures/u2f/register.html.haml
index 5ed51be689c..393c0613fd3 100644
--- a/spec/javascripts/fixtures/u2f/register.html.haml
+++ b/spec/javascripts/fixtures/u2f/register.html.haml
@@ -1,2 +1 @@
-- user = FactoryGirl.build(:user, :two_factor_via_otp)
-= render partial: "u2f/register", locals: { create_u2f_profile_two_factor_auth_path: '/profile/two_factor_auth/create_u2f', current_user: user }
+= render partial: "u2f/register", locals: { create_u2f_profile_two_factor_auth_path: '/profile/two_factor_auth/create_u2f' }
diff --git a/spec/javascripts/notes_spec.js.coffee b/spec/javascripts/notes_spec.js.coffee
index 3a3c8d63e82..dd160e821b3 100644
--- a/spec/javascripts/notes_spec.js.coffee
+++ b/spec/javascripts/notes_spec.js.coffee
@@ -1,7 +1,7 @@
#= require notes
#= require gl_form
-window.gon or= {}
+window.gon = {}
window.disableButtonIfEmptyField = -> null
describe 'Notes', ->
diff --git a/spec/javascripts/project_title_spec.js.coffee b/spec/javascripts/project_title_spec.js.coffee
index 9be29097f4c..1cf34d4d2d3 100644
--- a/spec/javascripts/project_title_spec.js.coffee
+++ b/spec/javascripts/project_title_spec.js.coffee
@@ -6,7 +6,7 @@
#= require project_select
#= require project
-window.gon or= {}
+window.gon = {}
window.gon.api_version = 'v3'
describe 'Project Title', ->
diff --git a/spec/javascripts/search_autocomplete_spec.js.coffee b/spec/javascripts/search_autocomplete_spec.js.coffee
deleted file mode 100644
index e77177783a7..00000000000
--- a/spec/javascripts/search_autocomplete_spec.js.coffee
+++ /dev/null
@@ -1,149 +0,0 @@
-#= require gl_dropdown
-#= require search_autocomplete
-#= require jquery
-#= require lib/common_utils
-#= require lib/type_utility
-#= require fuzzaldrin-plus
-
-
-widget = null
-userId = 1
-window.gon or= {}
-window.gon.current_user_id = userId
-
-dashboardIssuesPath = '/dashboard/issues'
-dashboardMRsPath = '/dashboard/merge_requests'
-projectIssuesPath = '/gitlab-org/gitlab-ce/issues'
-projectMRsPath = '/gitlab-org/gitlab-ce/merge_requests'
-groupIssuesPath = '/groups/gitlab-org/issues'
-groupMRsPath = '/groups/gitlab-org/merge_requests'
-projectName = 'GitLab Community Edition'
-groupName = 'Gitlab Org'
-
-
-# Add required attributes to body before starting the test.
-# section would be dashboard|group|project
-addBodyAttributes = (section = 'dashboard') ->
-
- $body = $ 'body'
-
- $body.removeAttr 'data-page'
- $body.removeAttr 'data-project'
- $body.removeAttr 'data-group'
-
- switch section
- when 'dashboard'
- $body.data 'page', 'root:index'
- when 'group'
- $body.data 'page', 'groups:show'
- $body.data 'group', 'gitlab-org'
- when 'project'
- $body.data 'page', 'projects:show'
- $body.data 'project', 'gitlab-ce'
-
-
-# Mock `gl` object in window for dashboard specific page. App code will need it.
-mockDashboardOptions = ->
-
- window.gl or= {}
- window.gl.dashboardOptions =
- issuesPath: dashboardIssuesPath
- mrPath : dashboardMRsPath
-
-
-# Mock `gl` object in window for project specific page. App code will need it.
-mockProjectOptions = ->
-
- window.gl or= {}
- window.gl.projectOptions =
- 'gitlab-ce' :
- issuesPath : projectIssuesPath
- mrPath : projectMRsPath
- projectName : projectName
-
-
-mockGroupOptions = ->
-
- window.gl or= {}
- window.gl.groupOptions =
- 'gitlab-org' :
- issuesPath : groupIssuesPath
- mrPath : groupMRsPath
- projectName : groupName
-
-
-assertLinks = (list, issuesPath, mrsPath) ->
-
- issuesAssignedToMeLink = "#{issuesPath}/?assignee_id=#{userId}"
- issuesIHaveCreatedLink = "#{issuesPath}/?author_id=#{userId}"
- mrsAssignedToMeLink = "#{mrsPath}/?assignee_id=#{userId}"
- mrsIHaveCreatedLink = "#{mrsPath}/?author_id=#{userId}"
-
- a1 = "a[href='#{issuesAssignedToMeLink}']"
- a2 = "a[href='#{issuesIHaveCreatedLink}']"
- a3 = "a[href='#{mrsAssignedToMeLink}']"
- a4 = "a[href='#{mrsIHaveCreatedLink}']"
-
- expect(list.find(a1).length).toBe 1
- expect(list.find(a1).text()).toBe ' Issues assigned to me '
-
- expect(list.find(a2).length).toBe 1
- expect(list.find(a2).text()).toBe " Issues I've created "
-
- expect(list.find(a3).length).toBe 1
- expect(list.find(a3).text()).toBe ' Merge requests assigned to me '
-
- expect(list.find(a4).length).toBe 1
- expect(list.find(a4).text()).toBe " Merge requests I've created "
-
-
-describe 'Search autocomplete dropdown', ->
-
- fixture.preload 'search_autocomplete.html'
-
- beforeEach ->
-
- fixture.load 'search_autocomplete.html'
- widget = new SearchAutocomplete
-
-
- it 'should show Dashboard specific dropdown menu', ->
-
- addBodyAttributes()
- mockDashboardOptions()
- widget.searchInput.focus()
-
- list = widget.wrap.find('.dropdown-menu').find 'ul'
- assertLinks list, dashboardIssuesPath, dashboardMRsPath
-
-
- it 'should show Group specific dropdown menu', ->
-
- addBodyAttributes 'group'
- mockGroupOptions()
- widget.searchInput.focus()
-
- list = widget.wrap.find('.dropdown-menu').find 'ul'
- assertLinks list, groupIssuesPath, groupMRsPath
-
-
- it 'should show Project specific dropdown menu', ->
-
- addBodyAttributes 'project'
- mockProjectOptions()
- widget.searchInput.focus()
-
- list = widget.wrap.find('.dropdown-menu').find 'ul'
- assertLinks list, projectIssuesPath, projectMRsPath
-
-
- it 'should not show category related menu if there is text in the input', ->
-
- addBodyAttributes 'project'
- mockProjectOptions()
- widget.searchInput.val 'help'
- widget.searchInput.focus()
-
- list = widget.wrap.find('.dropdown-menu').find 'ul'
- link = "a[href='#{projectIssuesPath}/?assignee_id=#{userId}']"
- expect(list.find(link).length).toBe 0
diff --git a/spec/lib/banzai/filter/redactor_filter_spec.rb b/spec/lib/banzai/filter/redactor_filter_spec.rb
index f181125156b..697d10bbf70 100644
--- a/spec/lib/banzai/filter/redactor_filter_spec.rb
+++ b/spec/lib/banzai/filter/redactor_filter_spec.rb
@@ -69,18 +69,6 @@ describe Banzai::Filter::RedactorFilter, lib: true do
expect(doc.css('a').length).to eq 0
end
- it 'removes references for project members with guest role' do
- member = create(:user)
- project = create(:empty_project, :public)
- project.team << [member, :guest]
- issue = create(:issue, :confidential, project: project)
-
- link = reference_link(project: project.id, issue: issue.id, reference_type: 'issue')
- doc = filter(link, current_user: member)
-
- expect(doc.css('a').length).to eq 0
- end
-
it 'allows references for author' do
author = create(:user)
project = create(:empty_project, :public)
diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
index 143e2e6d238..7375539cf17 100644
--- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
@@ -26,8 +26,7 @@ module Ci
tag_list: [],
options: {},
allow_failure: false,
- when: "on_success",
- environment: nil,
+ when: "on_success"
})
end
@@ -388,8 +387,7 @@ module Ci
services: ["mysql"]
},
allow_failure: false,
- when: "on_success",
- environment: nil,
+ when: "on_success"
})
end
@@ -417,8 +415,7 @@ module Ci
services: ["postgresql"]
},
allow_failure: false,
- when: "on_success",
- environment: nil,
+ when: "on_success"
})
end
end
@@ -504,7 +501,6 @@ module Ci
})
config_processor = GitlabCiYamlProcessor.new(config, path)
-
builds = config_processor.builds_for_stage_and_ref("test", "master")
expect(builds.size).to eq(1)
expect(builds.first[:when]).to eq(when_state)
@@ -576,12 +572,7 @@ module Ci
services: ["mysql"],
before_script: ["pwd"],
rspec: {
- artifacts: {
- paths: ["logs/", "binaries/"],
- untracked: true,
- name: "custom_name",
- expire_in: "7d"
- },
+ artifacts: { paths: ["logs/", "binaries/"], untracked: true, name: "custom_name" },
script: "rspec"
}
})
@@ -603,77 +594,13 @@ module Ci
artifacts: {
name: "custom_name",
paths: ["logs/", "binaries/"],
- untracked: true,
- expire_in: "7d"
+ untracked: true
}
},
when: "on_success",
- allow_failure: false,
- environment: nil,
+ allow_failure: false
})
end
-
- %w[on_success on_failure always].each do |when_state|
- it "returns artifacts for when #{when_state} defined" do
- config = YAML.dump({
- rspec: {
- script: "rspec",
- artifacts: { paths: ["logs/", "binaries/"], when: when_state }
- }
- })
-
- config_processor = GitlabCiYamlProcessor.new(config, path)
-
- builds = config_processor.builds_for_stage_and_ref("test", "master")
- expect(builds.size).to eq(1)
- expect(builds.first[:options][:artifacts][:when]).to eq(when_state)
- end
- end
- end
-
- describe '#environment' do
- let(:config) do
- {
- deploy_to_production: { stage: 'deploy', script: 'test', environment: environment }
- }
- end
-
- let(:processor) { GitlabCiYamlProcessor.new(YAML.dump(config)) }
- let(:builds) { processor.builds_for_stage_and_ref('deploy', 'master') }
-
- context 'when a production environment is specified' do
- let(:environment) { 'production' }
-
- it 'does return production' do
- expect(builds.size).to eq(1)
- expect(builds.first[:environment]).to eq(environment)
- end
- end
-
- context 'when no environment is specified' do
- let(:environment) { nil }
-
- it 'does return nil environment' do
- expect(builds.size).to eq(1)
- expect(builds.first[:environment]).to be_nil
- end
- end
-
- context 'is not a string' do
- let(:environment) { 1 }
-
- it 'raises error' do
- expect { builds }.to raise_error("deploy_to_production job: environment parameter #{Gitlab::Regex.environment_name_regex_message}")
- end
- end
-
- context 'is not a valid string' do
- let(:environment) { 'production staging' }
-
- it 'raises error' do
- expect { builds }.to raise_error("deploy_to_production job: environment parameter #{Gitlab::Regex.environment_name_regex_message}")
- end
- end
end
describe "Dependencies" do
@@ -737,8 +664,7 @@ module Ci
tag_list: [],
options: {},
when: "on_success",
- allow_failure: false,
- environment: nil,
+ allow_failure: false
})
end
end
@@ -783,8 +709,7 @@ module Ci
tag_list: [],
options: {},
when: "on_success",
- allow_failure: false,
- environment: nil,
+ allow_failure: false
})
expect(subject.second).to eq({
except: nil,
@@ -796,8 +721,7 @@ module Ci
tag_list: [],
options: {},
when: "on_success",
- allow_failure: false,
- environment: nil,
+ allow_failure: false
})
end
end
@@ -1043,27 +967,6 @@ EOT
end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: artifacts:name parameter should be a string")
end
- it "returns errors if job artifacts:when is not an a predefined value" do
- config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", artifacts: { when: 1 } } })
- expect do
- GitlabCiYamlProcessor.new(config)
- end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: artifacts:when parameter should be on_success, on_failure or always")
- end
-
- it "returns errors if job artifacts:expire_in is not an a string" do
- config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", artifacts: { expire_in: 1 } } })
- expect do
- GitlabCiYamlProcessor.new(config)
- end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: artifacts:expire_in parameter should be a duration")
- end
-
- it "returns errors if job artifacts:expire_in is not an a valid duration" do
- config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", artifacts: { expire_in: "7 elephants" } } })
- expect do
- GitlabCiYamlProcessor.new(config)
- end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: artifacts:expire_in parameter should be a duration")
- end
-
it "returns errors if job artifacts:untracked is not an array of strings" do
config = YAML.dump({ types: ["build", "test"], rspec: { script: "test", artifacts: { untracked: "string" } } })
expect do
diff --git a/spec/lib/container_registry/tag_spec.rb b/spec/lib/container_registry/tag_spec.rb
index c7324c2bf77..858cb0bb134 100644
--- a/spec/lib/container_registry/tag_spec.rb
+++ b/spec/lib/container_registry/tag_spec.rb
@@ -17,85 +17,46 @@ describe ContainerRegistry::Tag do
end
context 'manifest processing' do
- context 'schema v1' do
- before do
- stub_request(:get, 'http://example.com/v2/group/test/manifests/tag').
- with(headers: headers).
- to_return(
- status: 200,
- body: File.read(Rails.root + 'spec/fixtures/container_registry/tag_manifest_1.json'),
- headers: { 'Content-Type' => 'application/vnd.docker.distribution.manifest.v1+prettyjws' })
- end
-
- context '#layers' do
- subject { tag.layers }
-
- it { expect(subject.length).to eq(1) }
- end
-
- context '#total_size' do
- subject { tag.total_size }
-
- it { is_expected.to be_nil }
- end
+ before do
+ stub_request(:get, 'http://example.com/v2/group/test/manifests/tag').
+ with(headers: headers).
+ to_return(
+ status: 200,
+ body: File.read(Rails.root + 'spec/fixtures/container_registry/tag_manifest.json'),
+ headers: { 'Content-Type' => 'application/vnd.docker.distribution.manifest.v2+json' })
+ end
- context 'config processing' do
- context '#config' do
- subject { tag.config }
+ context '#layers' do
+ subject { tag.layers }
- it { is_expected.to be_nil }
- end
+ it { expect(subject.length).to eq(1) }
+ end
- context '#created_at' do
- subject { tag.created_at }
+ context '#total_size' do
+ subject { tag.total_size }
- it { is_expected.to be_nil }
- end
- end
+ it { is_expected.to eq(2319870) }
end
- context 'schema v2' do
+ context 'config processing' do
before do
- stub_request(:get, 'http://example.com/v2/group/test/manifests/tag').
- with(headers: headers).
+ stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
+ with(headers: { 'Accept' => 'application/octet-stream' }).
to_return(
status: 200,
- body: File.read(Rails.root + 'spec/fixtures/container_registry/tag_manifest.json'),
- headers: { 'Content-Type' => 'application/vnd.docker.distribution.manifest.v2+json' })
+ body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
end
- context '#layers' do
- subject { tag.layers }
+ context '#config' do
+ subject { tag.config }
- it { expect(subject.length).to eq(1) }
+ it { is_expected.not_to be_nil }
end
- context '#total_size' do
- subject { tag.total_size }
-
- it { is_expected.to eq(2319870) }
- end
-
- context 'config processing' do
- before do
- stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
- with(headers: { 'Accept' => 'application/octet-stream' }).
- to_return(
- status: 200,
- body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
- end
-
- context '#config' do
- subject { tag.config }
-
- it { is_expected.not_to be_nil }
- end
-
- context '#created_at' do
- subject { tag.created_at }
+ context '#created_at' do
+ subject { tag.created_at }
- it { is_expected.not_to be_nil }
- end
+ it { is_expected.not_to be_nil }
end
end
end
diff --git a/spec/lib/gitlab/auth_spec.rb b/spec/lib/gitlab/auth_spec.rb
index 7bec1367156..a814ad2a4e7 100644
--- a/spec/lib/gitlab/auth_spec.rb
+++ b/spec/lib/gitlab/auth_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe Gitlab::Auth, lib: true do
let(:gl_auth) { described_class }
- describe 'find_for_git_client' do
+ describe 'find' do
it 'recognizes CI' do
token = '123'
project = create(:empty_project)
@@ -11,7 +11,7 @@ describe Gitlab::Auth, lib: true do
ip = 'ip'
expect(gl_auth).to receive(:rate_limit!).with(ip, success: true, login: 'gitlab-ci-token')
- expect(gl_auth.find_for_git_client('gitlab-ci-token', token, project: project, ip: ip)).to eq(Gitlab::Auth::Result.new(nil, :ci))
+ expect(gl_auth.find('gitlab-ci-token', token, project: project, ip: ip)).to eq(Gitlab::Auth::Result.new(nil, :ci))
end
it 'recognizes master passwords' do
@@ -19,7 +19,7 @@ describe Gitlab::Auth, lib: true do
ip = 'ip'
expect(gl_auth).to receive(:rate_limit!).with(ip, success: true, login: user.username)
- expect(gl_auth.find_for_git_client(user.username, 'password', project: nil, ip: ip)).to eq(Gitlab::Auth::Result.new(user, :gitlab_or_ldap))
+ expect(gl_auth.find(user.username, 'password', project: nil, ip: ip)).to eq(Gitlab::Auth::Result.new(user, :gitlab_or_ldap))
end
it 'recognizes OAuth tokens' do
@@ -29,7 +29,7 @@ describe Gitlab::Auth, lib: true do
ip = 'ip'
expect(gl_auth).to receive(:rate_limit!).with(ip, success: true, login: 'oauth2')
- expect(gl_auth.find_for_git_client("oauth2", token.token, project: nil, ip: ip)).to eq(Gitlab::Auth::Result.new(user, :oauth))
+ expect(gl_auth.find("oauth2", token.token, project: nil, ip: ip)).to eq(Gitlab::Auth::Result.new(user, :oauth))
end
it 'returns double nil for invalid credentials' do
@@ -37,11 +37,11 @@ describe Gitlab::Auth, lib: true do
ip = 'ip'
expect(gl_auth).to receive(:rate_limit!).with(ip, success: false, login: login)
- expect(gl_auth.find_for_git_client(login, 'bar', project: nil, ip: ip)).to eq(Gitlab::Auth::Result.new)
+ expect(gl_auth.find(login, 'bar', project: nil, ip: ip)).to eq(Gitlab::Auth::Result.new)
end
end
- describe 'find_with_user_password' do
+ describe 'find_in_gitlab_or_ldap' do
let!(:user) do
create(:user,
username: username,
@@ -52,25 +52,25 @@ describe Gitlab::Auth, lib: true do
let(:password) { 'my-secret' }
it "should find user by valid login/password" do
- expect( gl_auth.find_with_user_password(username, password) ).to eql user
+ expect( gl_auth.find_in_gitlab_or_ldap(username, password) ).to eql user
end
it 'should find user by valid email/password with case-insensitive email' do
- expect(gl_auth.find_with_user_password(user.email.upcase, password)).to eql user
+ expect(gl_auth.find_in_gitlab_or_ldap(user.email.upcase, password)).to eql user
end
it 'should find user by valid username/password with case-insensitive username' do
- expect(gl_auth.find_with_user_password(username.upcase, password)).to eql user
+ expect(gl_auth.find_in_gitlab_or_ldap(username.upcase, password)).to eql user
end
it "should not find user with invalid password" do
password = 'wrong'
- expect( gl_auth.find_with_user_password(username, password) ).not_to eql user
+ expect( gl_auth.find_in_gitlab_or_ldap(username, password) ).not_to eql user
end
it "should not find user with invalid login" do
user = 'wrong'
- expect( gl_auth.find_with_user_password(username, password) ).not_to eql user
+ expect( gl_auth.find_in_gitlab_or_ldap(username, password) ).not_to eql user
end
context "with ldap enabled" do
@@ -81,13 +81,13 @@ describe Gitlab::Auth, lib: true do
it "tries to autheticate with db before ldap" do
expect(Gitlab::LDAP::Authentication).not_to receive(:login)
- gl_auth.find_with_user_password(username, password)
+ gl_auth.find_in_gitlab_or_ldap(username, password)
end
it "uses ldap as fallback to for authentication" do
expect(Gitlab::LDAP::Authentication).to receive(:login)
- gl_auth.find_with_user_password('ldap_user', 'password')
+ gl_auth.find_in_gitlab_or_ldap('ldap_user', 'password')
end
end
end
diff --git a/spec/lib/gitlab/ci/config/node/configurable_spec.rb b/spec/lib/gitlab/ci/config/node/configurable_spec.rb
deleted file mode 100644
index 47c68f96dc8..00000000000
--- a/spec/lib/gitlab/ci/config/node/configurable_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Ci::Config::Node::Configurable do
- let(:node) { Class.new }
-
- before do
- node.include(described_class)
- end
-
- describe 'allowed nodes' do
- before do
- node.class_eval do
- allow_node :object, Object, description: 'test object'
- end
- end
-
- describe '#allowed_nodes' do
- it 'has valid allowed nodes' do
- expect(node.allowed_nodes).to include :object
- end
-
- it 'creates a node factory' do
- expect(node.allowed_nodes[:object])
- .to be_an_instance_of Gitlab::Ci::Config::Node::Factory
- end
-
- it 'returns a duplicated factory object' do
- first_factory = node.allowed_nodes[:object]
- second_factory = node.allowed_nodes[:object]
-
- expect(first_factory).not_to be_equal(second_factory)
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/ci/config/node/factory_spec.rb b/spec/lib/gitlab/ci/config/node/factory_spec.rb
deleted file mode 100644
index d681aa32456..00000000000
--- a/spec/lib/gitlab/ci/config/node/factory_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Ci::Config::Node::Factory do
- describe '#create!' do
- let(:factory) { described_class.new(entry_class) }
- let(:entry_class) { Gitlab::Ci::Config::Node::Script }
-
- context 'when value setting value' do
- it 'creates entry with valid value' do
- entry = factory
- .with(value: ['ls', 'pwd'])
- .create!
-
- expect(entry.value).to eq "ls\npwd"
- end
-
- context 'when setting description' do
- it 'creates entry with description' do
- entry = factory
- .with(value: ['ls', 'pwd'])
- .with(description: 'test description')
- .create!
-
- expect(entry.value).to eq "ls\npwd"
- expect(entry.description).to eq 'test description'
- end
- end
- end
-
- context 'when not setting value' do
- it 'raises error' do
- expect { factory.create! }.to raise_error(
- Gitlab::Ci::Config::Node::Factory::InvalidFactory
- )
- end
- end
-
- context 'when creating a null entry' do
- it 'creates a null entry' do
- entry = factory
- .with(value: nil)
- .nullify!
- .create!
-
- expect(entry).to be_an_instance_of Gitlab::Ci::Config::Node::Null
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/ci/config/node/global_spec.rb b/spec/lib/gitlab/ci/config/node/global_spec.rb
deleted file mode 100644
index b1972172435..00000000000
--- a/spec/lib/gitlab/ci/config/node/global_spec.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Ci::Config::Node::Global do
- let(:global) { described_class.new(hash) }
-
- describe '#allowed_nodes' do
- it 'can contain global config keys' do
- expect(global.allowed_nodes).to include :before_script
- end
-
- it 'returns a hash' do
- expect(global.allowed_nodes).to be_a Hash
- end
- end
-
- context 'when hash is valid' do
- let(:hash) do
- { before_script: ['ls', 'pwd'] }
- end
-
- describe '#process!' do
- before { global.process! }
-
- it 'creates nodes hash' do
- expect(global.nodes).to be_an Array
- end
-
- it 'creates node object for each entry' do
- expect(global.nodes.count).to eq 1
- end
-
- it 'creates node object using valid class' do
- expect(global.nodes.first)
- .to be_an_instance_of Gitlab::Ci::Config::Node::Script
- end
-
- it 'sets correct description for nodes' do
- expect(global.nodes.first.description)
- .to eq 'Script that will be executed before each job.'
- end
- end
-
- describe '#leaf?' do
- it 'is not leaf' do
- expect(global).not_to be_leaf
- end
- end
-
- describe '#before_script' do
- context 'when processed' do
- before { global.process! }
-
- it 'returns correct script' do
- expect(global.before_script).to eq "ls\npwd"
- end
- end
-
- context 'when not processed' do
- it 'returns nil' do
- expect(global.before_script).to be nil
- end
- end
- end
- end
-
- context 'when hash is not valid' do
- before { global.process! }
-
- let(:hash) do
- { before_script: 'ls' }
- end
-
- describe '#valid?' do
- it 'is not valid' do
- expect(global).not_to be_valid
- end
- end
-
- describe '#errors' do
- it 'reports errors from child nodes' do
- expect(global.errors)
- .to include 'before_script should be an array of strings'
- end
- end
-
- describe '#before_script' do
- it 'raises error' do
- expect { global.before_script }.to raise_error(
- Gitlab::Ci::Config::Node::Entry::InvalidError
- )
- end
- end
- end
-
- context 'when value is not a hash' do
- let(:hash) { [] }
-
- describe '#valid?' do
- it 'is not valid' do
- expect(global).not_to be_valid
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/ci/config/node/null_spec.rb b/spec/lib/gitlab/ci/config/node/null_spec.rb
deleted file mode 100644
index 36101c62462..00000000000
--- a/spec/lib/gitlab/ci/config/node/null_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Ci::Config::Node::Null do
- let(:entry) { described_class.new(nil) }
-
- describe '#leaf?' do
- it 'is leaf node' do
- expect(entry).to be_leaf
- end
- end
-
- describe '#any_method' do
- it 'responds with nil' do
- expect(entry.any_method).to be nil
- end
- end
-
- describe '#value' do
- it 'returns nil' do
- expect(entry.value).to be nil
- end
- end
-end
diff --git a/spec/lib/gitlab/ci/config/node/script_spec.rb b/spec/lib/gitlab/ci/config/node/script_spec.rb
deleted file mode 100644
index e4d6481f8a5..00000000000
--- a/spec/lib/gitlab/ci/config/node/script_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Ci::Config::Node::Script do
- let(:entry) { described_class.new(value) }
-
- describe '#validate!' do
- before { entry.validate! }
-
- context 'when entry value is correct' do
- let(:value) { ['ls', 'pwd'] }
-
- describe '#value' do
- it 'returns concatenated command' do
- expect(entry.value).to eq "ls\npwd"
- end
- end
-
- describe '#errors' do
- it 'does not append errors' do
- expect(entry.errors).to be_empty
- end
- end
-
- describe '#valid?' do
- it 'is valid' do
- expect(entry).to be_valid
- end
- end
- end
-
- context 'when entry value is not correct' do
- let(:value) { 'ls' }
-
- describe '#errors' do
- it 'saves errors' do
- expect(entry.errors)
- .to include /should be an array of strings/
- end
- end
-
- describe '#valid?' do
- it 'is not valid' do
- expect(entry).not_to be_valid
- end
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/ci/config_spec.rb b/spec/lib/gitlab/ci/config_spec.rb
index 3871d939feb..4d46abe520f 100644
--- a/spec/lib/gitlab/ci/config_spec.rb
+++ b/spec/lib/gitlab/ci/config_spec.rb
@@ -29,43 +29,17 @@ describe Gitlab::Ci::Config do
expect(config.to_hash).to eq hash
end
-
- describe '#valid?' do
- it 'is valid' do
- expect(config).to be_valid
- end
-
- it 'has no errors' do
- expect(config.errors).to be_empty
- end
- end
end
context 'when config is invalid' do
- context 'when yml is incorrect' do
- let(:yml) { '// invalid' }
-
- describe '.new' do
- it 'raises error' do
- expect { config }.to raise_error(
- Gitlab::Ci::Config::Loader::FormatError,
- /Invalid configuration format/
- )
- end
- end
- end
-
- context 'when config logic is incorrect' do
- let(:yml) { 'before_script: "ls"' }
-
- describe '#valid?' do
- it 'is not valid' do
- expect(config).not_to be_valid
- end
-
- it 'has errors' do
- expect(config.errors).not_to be_empty
- end
+ let(:yml) { '// invalid' }
+
+ describe '.new' do
+ it 'raises error' do
+ expect { config }.to raise_error(
+ Gitlab::Ci::Config::Loader::FormatError,
+ /Invalid configuration format/
+ )
end
end
end
diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb
index 1ec539066a7..83ddabe6b0b 100644
--- a/spec/lib/gitlab/database/migration_helpers_spec.rb
+++ b/spec/lib/gitlab/database/migration_helpers_spec.rb
@@ -120,19 +120,6 @@ describe Gitlab::Database::MigrationHelpers, lib: true do
model.add_column_with_default(:projects, :foo, :integer, default: 10)
end.to raise_error(RuntimeError)
end
-
- it 'removes the added column whenever changing a column NULL constraint fails' do
- expect(model).to receive(:change_column_null).
- with(:projects, :foo, false).
- and_raise(RuntimeError)
-
- expect(model).to receive(:remove_column).
- with(:projects, :foo)
-
- expect do
- model.add_column_with_default(:projects, :foo, :integer, default: 10)
- end.to raise_error(RuntimeError)
- end
end
context 'inside a transaction' do
diff --git a/spec/lib/gitlab/metrics/instrumentation_spec.rb b/spec/lib/gitlab/metrics/instrumentation_spec.rb
index cdf641341cb..220e86924a2 100644
--- a/spec/lib/gitlab/metrics/instrumentation_spec.rb
+++ b/spec/lib/gitlab/metrics/instrumentation_spec.rb
@@ -9,31 +9,9 @@ describe Gitlab::Metrics::Instrumentation do
text
end
- class << self
- def buzz(text = 'buzz')
- text
- end
- private :buzz
-
- def flaky(text = 'flaky')
- text
- end
- protected :flaky
- end
-
def bar(text = 'bar')
text
end
-
- def wadus(text = 'wadus')
- text
- end
- private :wadus
-
- def chaf(text = 'chaf')
- text
- end
- protected :chaf
end
allow(@dummy).to receive(:name).and_return('Dummy')
@@ -79,7 +57,7 @@ describe Gitlab::Metrics::Instrumentation do
and_return(transaction)
expect(transaction).to receive(:add_metric).
- with(described_class::SERIES, hash_including(:duration, :cpu_duration),
+ with(described_class::SERIES, an_instance_of(Hash),
method: 'Dummy.foo')
@dummy.foo
@@ -159,7 +137,7 @@ describe Gitlab::Metrics::Instrumentation do
and_return(transaction)
expect(transaction).to receive(:add_metric).
- with(described_class::SERIES, hash_including(:duration, :cpu_duration),
+ with(described_class::SERIES, an_instance_of(Hash),
method: 'Dummy#bar')
@dummy.new.bar
@@ -230,21 +208,6 @@ describe Gitlab::Metrics::Instrumentation do
described_class.instrument_methods(@dummy)
expect(described_class.instrumented?(@dummy.singleton_class)).to eq(true)
- expect(@dummy.method(:foo).source_location.first).to match(/instrumentation\.rb/)
- end
-
- it 'instruments all protected class methods' do
- described_class.instrument_methods(@dummy)
-
- expect(described_class.instrumented?(@dummy.singleton_class)).to eq(true)
- expect(@dummy.method(:flaky).source_location.first).to match(/instrumentation\.rb/)
- end
-
- it 'instruments all private instance methods' do
- described_class.instrument_methods(@dummy)
-
- expect(described_class.instrumented?(@dummy.singleton_class)).to eq(true)
- expect(@dummy.method(:buzz).source_location.first).to match(/instrumentation\.rb/)
end
it 'only instruments methods directly defined in the module' do
@@ -278,21 +241,6 @@ describe Gitlab::Metrics::Instrumentation do
described_class.instrument_instance_methods(@dummy)
expect(described_class.instrumented?(@dummy)).to eq(true)
- expect(@dummy.new.method(:bar).source_location.first).to match(/instrumentation\.rb/)
- end
-
- it 'instruments all protected instance methods' do
- described_class.instrument_instance_methods(@dummy)
-
- expect(described_class.instrumented?(@dummy)).to eq(true)
- expect(@dummy.new.method(:chaf).source_location.first).to match(/instrumentation\.rb/)
- end
-
- it 'instruments all private instance methods' do
- described_class.instrument_instance_methods(@dummy)
-
- expect(described_class.instrumented?(@dummy)).to eq(true)
- expect(@dummy.new.method(:wadus).source_location.first).to match(/instrumentation\.rb/)
end
it 'only instruments methods directly defined in the module' do
@@ -305,7 +253,7 @@ describe Gitlab::Metrics::Instrumentation do
described_class.instrument_instance_methods(@dummy)
- expect(@dummy.new.method(:kittens).source_location.first).not_to match(/instrumentation\.rb/)
+ expect(@dummy.method_defined?(:_original_kittens)).to eq(false)
end
it 'can take a block to determine if a method should be instrumented' do
@@ -313,7 +261,7 @@ describe Gitlab::Metrics::Instrumentation do
false
end
- expect(@dummy.new.method(:bar).source_location.first).not_to match(/instrumentation\.rb/)
+ expect(@dummy.method_defined?(:_original_bar)).to eq(false)
end
end
end
diff --git a/spec/lib/gitlab/metrics/rack_middleware_spec.rb b/spec/lib/gitlab/metrics/rack_middleware_spec.rb
index 40289f8b972..b99be4e1060 100644
--- a/spec/lib/gitlab/metrics/rack_middleware_spec.rb
+++ b/spec/lib/gitlab/metrics/rack_middleware_spec.rb
@@ -31,20 +31,6 @@ describe Gitlab::Metrics::RackMiddleware do
middleware.call(env)
end
-
- it 'tags a transaction with the method andpath of the route in the grape endpoint' do
- route = double(:route, route_method: "GET", route_path: "/:version/projects/:id/archive(.:format)")
- endpoint = double(:endpoint, route: route)
-
- env['api.endpoint'] = endpoint
-
- allow(app).to receive(:call).with(env)
-
- expect(middleware).to receive(:tag_endpoint).
- with(an_instance_of(Gitlab::Metrics::Transaction), env)
-
- middleware.call(env)
- end
end
describe '#transaction_from_env' do
@@ -74,19 +60,4 @@ describe Gitlab::Metrics::RackMiddleware do
expect(transaction.action).to eq('TestController#show')
end
end
-
- describe '#tag_endpoint' do
- let(:transaction) { middleware.transaction_from_env(env) }
-
- it 'tags a transaction with the method and path of the route in the grape endpount' do
- route = double(:route, route_method: "GET", route_path: "/:version/projects/:id/archive(.:format)")
- endpoint = double(:endpoint, route: route)
-
- env['api.endpoint'] = endpoint
-
- middleware.tag_endpoint(transaction, env)
-
- expect(transaction.action).to eq('Grape#GET /projects/:id/archive')
- end
- end
end
diff --git a/spec/lib/gitlab/metrics/sampler_spec.rb b/spec/lib/gitlab/metrics/sampler_spec.rb
index 1ab923b58cf..59db127674a 100644
--- a/spec/lib/gitlab/metrics/sampler_spec.rb
+++ b/spec/lib/gitlab/metrics/sampler_spec.rb
@@ -72,25 +72,14 @@ describe Gitlab::Metrics::Sampler do
end
end
- if Gitlab::Metrics.mri?
- describe '#sample_objects' do
- it 'adds a metric containing the amount of allocated objects' do
- expect(sampler).to receive(:add_metric).
- with(/object_counts/, an_instance_of(Hash), an_instance_of(Hash)).
- at_least(:once).
- and_call_original
-
- sampler.sample_objects
- end
-
- it 'ignores classes without a name' do
- expect(Allocations).to receive(:to_hash).and_return({ Class.new => 4 })
-
- expect(sampler).not_to receive(:add_metric).
- with('object_counts', an_instance_of(Hash), type: nil)
+ describe '#sample_objects' do
+ it 'adds a metric containing the amount of allocated objects' do
+ expect(sampler).to receive(:add_metric).
+ with(/object_counts/, an_instance_of(Hash), an_instance_of(Hash)).
+ at_least(:once).
+ and_call_original
- sampler.sample_objects
- end
+ sampler.sample_objects
end
end
diff --git a/spec/lib/gitlab/project_search_results_spec.rb b/spec/lib/gitlab/project_search_results_spec.rb
index 270b89972d7..db0ff95b4f5 100644
--- a/spec/lib/gitlab/project_search_results_spec.rb
+++ b/spec/lib/gitlab/project_search_results_spec.rb
@@ -43,18 +43,6 @@ describe Gitlab::ProjectSearchResults, lib: true do
expect(results.issues_count).to eq 1
end
- it 'should not list project confidential issues for project members with guest role' do
- project.team << [member, :guest]
-
- results = described_class.new(member, project, query)
- issues = results.objects('issues')
-
- expect(issues).to include issue
- expect(issues).not_to include security_issue_1
- expect(issues).not_to include security_issue_2
- expect(results.issues_count).to eq 1
- end
-
it 'should list project confidential issues for author' do
results = described_class.new(author, project, query)
issues = results.objects('issues')
diff --git a/spec/lib/gitlab/search_results_spec.rb b/spec/lib/gitlab/search_results_spec.rb
index 1bb444bf34f..f4afe597e8d 100644
--- a/spec/lib/gitlab/search_results_spec.rb
+++ b/spec/lib/gitlab/search_results_spec.rb
@@ -86,22 +86,6 @@ describe Gitlab::SearchResults do
expect(results.issues_count).to eq 1
end
- it 'should not list confidential issues for project members with guest role' do
- project_1.team << [member, :guest]
- project_2.team << [member, :guest]
-
- results = described_class.new(member, limit_projects, query)
- issues = results.objects('issues')
-
- expect(issues).to include issue
- expect(issues).not_to include security_issue_1
- expect(issues).not_to include security_issue_2
- expect(issues).not_to include security_issue_3
- expect(issues).not_to include security_issue_4
- expect(issues).not_to include security_issue_5
- expect(results.issues_count).to eq 1
- end
-
it 'should list confidential issues for author' do
results = described_class.new(author, limit_projects, query)
issues = results.objects('issues')
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index 1e6eb20ab39..818825b1477 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -400,136 +400,26 @@ describe Notify do
end
end
- describe 'project access requested' do
- let(:project) { create(:project) }
- let(:user) { create(:user) }
- let(:project_member) do
- project.request_access(user)
- project.members.request.find_by(user_id: user.id)
- end
- subject { Notify.member_access_requested_email('project', project_member.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject "Request to join the #{project.name_with_namespace} project"
- is_expected.to have_body_text /#{project.name_with_namespace}/
- is_expected.to have_body_text /#{namespace_project_project_members_url(project.namespace, project)}/
- is_expected.to have_body_text /#{project_member.human_access}/
- end
- end
-
- describe 'project access denied' do
- let(:project) { create(:project) }
- let(:user) { create(:user) }
- let(:project_member) do
- project.request_access(user)
- project.members.request.find_by(user_id: user.id)
- end
- subject { Notify.member_access_denied_email('project', project.id, user.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject "Access to the #{project.name_with_namespace} project was denied"
- is_expected.to have_body_text /#{project.name_with_namespace}/
- is_expected.to have_body_text /#{project.web_url}/
- end
- end
-
describe 'project access changed' do
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:project_member) { create(:project_member, project: project, user: user) }
- subject { Notify.member_access_granted_email('project', project_member.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject "Access to the #{project.name_with_namespace} project was granted"
- is_expected.to have_body_text /#{project.name_with_namespace}/
- is_expected.to have_body_text /#{project.web_url}/
- is_expected.to have_body_text /#{project_member.human_access}/
- end
- end
-
- def invite_to_project(project:, email:, inviter:)
- ProjectMember.add_user(project.project_members, 'toto@example.com', Gitlab::Access::DEVELOPER, inviter)
-
- project.project_members.invite.last
- end
-
- describe 'project invitation' do
- let(:project) { create(:project) }
- let(:master) { create(:user).tap { |u| project.team << [u, :master] } }
- let(:project_member) { invite_to_project(project: project, email: 'toto@example.com', inviter: master) }
-
- subject { Notify.member_invited_email('project', project_member.id, project_member.invite_token) }
+ subject { Notify.project_access_granted_email(project_member.id) }
it_behaves_like 'an email sent from GitLab'
it_behaves_like 'it should not have Gmail Actions links'
it_behaves_like "a user cannot unsubscribe through footer link"
- it 'contains all the useful information' do
- is_expected.to have_subject "Invitation to join the #{project.name_with_namespace} project"
- is_expected.to have_body_text /#{project.name_with_namespace}/
- is_expected.to have_body_text /#{project.web_url}/
- is_expected.to have_body_text /#{project_member.human_access}/
- is_expected.to have_body_text /#{project_member.invite_token}/
- end
- end
-
- describe 'project invitation accepted' do
- let(:project) { create(:project) }
- let(:invited_user) { create(:user) }
- let(:master) { create(:user).tap { |u| project.team << [u, :master] } }
- let(:project_member) do
- invitee = invite_to_project(project: project, email: 'toto@example.com', inviter: master)
- invitee.accept_invite!(invited_user)
- invitee
- end
-
- subject { Notify.member_invite_accepted_email('project', project_member.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject 'Invitation accepted'
- is_expected.to have_body_text /#{project.name_with_namespace}/
- is_expected.to have_body_text /#{project.web_url}/
- is_expected.to have_body_text /#{project_member.invite_email}/
- is_expected.to have_body_text /#{invited_user.name}/
+ it 'has the correct subject' do
+ is_expected.to have_subject /Access to project was granted/
end
- end
- describe 'project invitation declined' do
- let(:project) { create(:project) }
- let(:master) { create(:user).tap { |u| project.team << [u, :master] } }
- let(:project_member) do
- invitee = invite_to_project(project: project, email: 'toto@example.com', inviter: master)
- invitee.decline_invite!
- invitee
+ it 'contains name of project' do
+ is_expected.to have_body_text /#{project.name}/
end
- subject { Notify.member_invite_declined_email('project', project.id, project_member.invite_email, master.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject 'Invitation declined'
- is_expected.to have_body_text /#{project.name_with_namespace}/
- is_expected.to have_body_text /#{project.web_url}/
- is_expected.to have_body_text /#{project_member.invite_email}/
+ it 'contains new user role' do
+ is_expected.to have_body_text /#{project_member.human_access}/
end
end
@@ -645,139 +535,27 @@ describe Notify do
end
end
- context 'for a group' do
- describe 'group access requested' do
- let(:group) { create(:group) }
- let(:user) { create(:user) }
- let(:group_member) do
- group.request_access(user)
- group.members.request.find_by(user_id: user.id)
- end
- subject { Notify.member_access_requested_email('group', group_member.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject "Request to join the #{group.name} group"
- is_expected.to have_body_text /#{group.name}/
- is_expected.to have_body_text /#{group_group_members_url(group)}/
- is_expected.to have_body_text /#{group_member.human_access}/
- end
- end
-
- describe 'group access denied' do
- let(:group) { create(:group) }
- let(:user) { create(:user) }
- let(:group_member) do
- group.request_access(user)
- group.members.request.find_by(user_id: user.id)
- end
- subject { Notify.member_access_denied_email('group', group.id, user.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject "Access to the #{group.name} group was denied"
- is_expected.to have_body_text /#{group.name}/
- is_expected.to have_body_text /#{group.web_url}/
- end
- end
-
- describe 'group access changed' do
- let(:group) { create(:group) }
- let(:user) { create(:user) }
- let(:group_member) { create(:group_member, group: group, user: user) }
-
- subject { Notify.member_access_granted_email('group', group_member.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject "Access to the #{group.name} group was granted"
- is_expected.to have_body_text /#{group.name}/
- is_expected.to have_body_text /#{group.web_url}/
- is_expected.to have_body_text /#{group_member.human_access}/
- end
- end
-
- def invite_to_group(group:, email:, inviter:)
- GroupMember.add_user(group.group_members, 'toto@example.com', Gitlab::Access::DEVELOPER, inviter)
-
- group.group_members.invite.last
- end
-
- describe 'group invitation' do
- let(:group) { create(:group) }
- let(:owner) { create(:user).tap { |u| group.add_user(u, Gitlab::Access::OWNER) } }
- let(:group_member) { invite_to_group(group: group, email: 'toto@example.com', inviter: owner) }
+ describe 'group access changed' do
+ let(:group) { create(:group) }
+ let(:user) { create(:user) }
+ let(:membership) { create(:group_member, group: group, user: user) }
- subject { Notify.member_invited_email('group', group_member.id, group_member.invite_token) }
+ subject { Notify.group_access_granted_email(membership.id) }
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
+ it_behaves_like 'an email sent from GitLab'
+ it_behaves_like 'it should not have Gmail Actions links'
+ it_behaves_like "a user cannot unsubscribe through footer link"
- it 'contains all the useful information' do
- is_expected.to have_subject "Invitation to join the #{group.name} group"
- is_expected.to have_body_text /#{group.name}/
- is_expected.to have_body_text /#{group.web_url}/
- is_expected.to have_body_text /#{group_member.human_access}/
- is_expected.to have_body_text /#{group_member.invite_token}/
- end
+ it 'has the correct subject' do
+ is_expected.to have_subject /Access to group was granted/
end
- describe 'group invitation accepted' do
- let(:group) { create(:group) }
- let(:invited_user) { create(:user) }
- let(:owner) { create(:user).tap { |u| group.add_user(u, Gitlab::Access::OWNER) } }
- let(:group_member) do
- invitee = invite_to_group(group: group, email: 'toto@example.com', inviter: owner)
- invitee.accept_invite!(invited_user)
- invitee
- end
-
- subject { Notify.member_invite_accepted_email('group', group_member.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject 'Invitation accepted'
- is_expected.to have_body_text /#{group.name}/
- is_expected.to have_body_text /#{group.web_url}/
- is_expected.to have_body_text /#{group_member.invite_email}/
- is_expected.to have_body_text /#{invited_user.name}/
- end
+ it 'contains name of project' do
+ is_expected.to have_body_text /#{group.name}/
end
- describe 'group invitation declined' do
- let(:group) { create(:group) }
- let(:owner) { create(:user).tap { |u| group.add_user(u, Gitlab::Access::OWNER) } }
- let(:group_member) do
- invitee = invite_to_group(group: group, email: 'toto@example.com', inviter: owner)
- invitee.decline_invite!
- invitee
- end
-
- subject { Notify.member_invite_declined_email('group', group.id, group_member.invite_email, owner.id) }
-
- it_behaves_like 'an email sent from GitLab'
- it_behaves_like 'it should not have Gmail Actions links'
- it_behaves_like "a user cannot unsubscribe through footer link"
-
- it 'contains all the useful information' do
- is_expected.to have_subject 'Invitation declined'
- is_expected.to have_body_text /#{group.name}/
- is_expected.to have_body_text /#{group.web_url}/
- is_expected.to have_body_text /#{group_member.invite_email}/
- end
+ it 'contains new user role' do
+ is_expected.to have_body_text /#{membership.human_access}/
end
end
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index 5d1fa8226e5..2beb6cc598d 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -397,34 +397,9 @@ describe Ci::Build, models: true do
context 'artifacts archive exists' do
let(:build) { create(:ci_build, :artifacts) }
it { is_expected.to be_truthy }
-
- context 'is expired' do
- before { build.update(artifacts_expire_at: Time.now - 7.days) }
- it { is_expected.to be_falsy }
- end
-
- context 'is not expired' do
- before { build.update(artifacts_expire_at: Time.now + 7.days) }
- it { is_expected.to be_truthy }
- end
end
end
- describe '#artifacts_expired?' do
- subject { build.artifacts_expired? }
-
- context 'is expired' do
- before { build.update(artifacts_expire_at: Time.now - 7.days) }
-
- it { is_expected.to be_truthy }
- end
-
- context 'is not expired' do
- before { build.update(artifacts_expire_at: Time.now + 7.days) }
-
- it { is_expected.to be_falsey }
- end
- end
describe '#artifacts_metadata?' do
subject { build.artifacts_metadata? }
@@ -437,6 +412,7 @@ describe Ci::Build, models: true do
it { is_expected.to be_truthy }
end
end
+
describe '#repo_url' do
let(:build) { create(:ci_build) }
let(:project) { build.project }
@@ -451,50 +427,6 @@ describe Ci::Build, models: true do
it { is_expected.to include(project.web_url[7..-1]) }
end
- describe '#artifacts_expire_in' do
- subject { build.artifacts_expire_in }
- it { is_expected.to be_nil }
-
- context 'when artifacts_expire_at is specified' do
- let(:expire_at) { Time.now + 7.days }
-
- before { build.artifacts_expire_at = expire_at }
-
- it { is_expected.to be_within(5).of(expire_at - Time.now) }
- end
- end
-
- describe '#artifacts_expire_in=' do
- subject { build.artifacts_expire_in }
-
- it 'when assigning valid duration' do
- build.artifacts_expire_in = '7 days'
-
- is_expected.to be_within(10).of(7.days.to_i)
- end
-
- it 'when assigning invalid duration' do
- expect { build.artifacts_expire_in = '7 elephants' }.to raise_error(ChronicDuration::DurationParseError)
- is_expected.to be_nil
- end
-
- it 'when resseting value' do
- build.artifacts_expire_in = nil
-
- is_expected.to be_nil
- end
- end
-
- describe '#keep_artifacts!' do
- let(:build) { create(:ci_build, artifacts_expire_at: Time.now + 7.days) }
-
- it 'to reset expire_at' do
- build.keep_artifacts!
-
- expect(build.artifacts_expire_at).to be_nil
- end
- end
-
describe '#depends_on_builds' do
let!(:build) { create(:ci_build, pipeline: pipeline, name: 'build', stage_idx: 0, stage: 'build') }
let!(:rspec_test) { create(:ci_build, pipeline: pipeline, name: 'rspec', stage_idx: 1, stage: 'test') }
diff --git a/spec/models/concerns/access_requestable_spec.rb b/spec/models/concerns/access_requestable_spec.rb
deleted file mode 100644
index 98307876962..00000000000
--- a/spec/models/concerns/access_requestable_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require 'spec_helper'
-
-describe AccessRequestable do
- describe 'Group' do
- describe '#request_access' do
- let(:group) { create(:group, :public) }
- let(:user) { create(:user) }
-
- it { expect(group.request_access(user)).to be_a(GroupMember) }
- it { expect(group.request_access(user).user).to eq(user) }
- end
-
- describe '#access_requested?' do
- let(:group) { create(:group, :public) }
- let(:user) { create(:user) }
-
- before { group.request_access(user) }
-
- it { expect(group.members.request.exists?(user_id: user)).to be_truthy }
- end
- end
-
- describe 'Project' do
- describe '#request_access' do
- let(:project) { create(:empty_project, :public) }
- let(:user) { create(:user) }
-
- it { expect(project.request_access(user)).to be_a(ProjectMember) }
- end
-
- describe '#access_requested?' do
- let(:project) { create(:empty_project, :public) }
- let(:user) { create(:user) }
-
- before { project.request_access(user) }
-
- it { expect(project.members.request.exists?(user_id: user)).to be_truthy }
- end
- end
-end
diff --git a/spec/models/concerns/milestoneish_spec.rb b/spec/models/concerns/milestoneish_spec.rb
index 7e9ab8940cf..47c3be673c5 100644
--- a/spec/models/concerns/milestoneish_spec.rb
+++ b/spec/models/concerns/milestoneish_spec.rb
@@ -5,7 +5,6 @@ describe Milestone, 'Milestoneish' do
let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
- let(:guest) { create(:user) }
let(:admin) { create(:admin) }
let(:project) { create(:project, :public) }
let(:milestone) { create(:milestone, project: project) }
@@ -22,7 +21,6 @@ describe Milestone, 'Milestoneish' do
before do
project.team << [member, :developer]
- project.team << [guest, :guest]
end
describe '#closed_items_count' do
@@ -30,10 +28,6 @@ describe Milestone, 'Milestoneish' do
expect(milestone.closed_items_count(non_member)).to eq 2
end
- it 'should not count confidential issues for project members with guest role' do
- expect(milestone.closed_items_count(guest)).to eq 2
- end
-
it 'should count confidential issues for author' do
expect(milestone.closed_items_count(author)).to eq 4
end
@@ -56,10 +50,6 @@ describe Milestone, 'Milestoneish' do
expect(milestone.total_items_count(non_member)).to eq 4
end
- it 'should not count confidential issues for project members with guest role' do
- expect(milestone.total_items_count(guest)).to eq 4
- end
-
it 'should count confidential issues for author' do
expect(milestone.total_items_count(author)).to eq 7
end
@@ -95,10 +85,6 @@ describe Milestone, 'Milestoneish' do
expect(milestone.percent_complete(non_member)).to eq 50
end
- it 'should not count confidential issues for project members with guest role' do
- expect(milestone.percent_complete(guest)).to eq 50
- end
-
it 'should count confidential issues for author' do
expect(milestone.percent_complete(author)).to eq 57
end
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb
deleted file mode 100644
index b273018707f..00000000000
--- a/spec/models/deployment_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require 'spec_helper'
-
-describe Deployment, models: true do
- subject { build(:deployment) }
-
- it { is_expected.to belong_to(:project) }
- it { is_expected.to belong_to(:environment) }
- it { is_expected.to belong_to(:user) }
- it { is_expected.to belong_to(:deployable) }
-
- it { is_expected.to delegate_method(:name).to(:environment).with_prefix }
- it { is_expected.to delegate_method(:commit).to(:project) }
- it { is_expected.to delegate_method(:commit_title).to(:commit).as(:try) }
-
- it { is_expected.to validate_presence_of(:ref) }
- it { is_expected.to validate_presence_of(:sha) }
-end
diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb
deleted file mode 100644
index 7629af6a570..00000000000
--- a/spec/models/environment_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require 'spec_helper'
-
-describe Environment, models: true do
- let(:environment) { create(:environment) }
-
- it { is_expected.to belong_to(:project) }
- it { is_expected.to have_many(:deployments) }
-
- it { is_expected.to delegate_method(:last_deployment).to(:deployments).as(:last) }
-
- it { is_expected.to validate_presence_of(:name) }
- it { is_expected.to validate_uniqueness_of(:name).scoped_to(:project_id) }
- it { is_expected.to validate_length_of(:name).is_within(0..255) }
-end
diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb
index 166a1dc4ddb..b0e76fec693 100644
--- a/spec/models/event_spec.rb
+++ b/spec/models/event_spec.rb
@@ -50,7 +50,6 @@ describe Event, models: true do
let(:project) { create(:empty_project, :public) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
- let(:guest) { create(:user) }
let(:author) { create(:author) }
let(:assignee) { create(:user) }
let(:admin) { create(:admin) }
@@ -62,7 +61,6 @@ describe Event, models: true do
before do
project.team << [member, :developer]
- project.team << [guest, :guest]
end
context 'issue event' do
@@ -73,7 +71,6 @@ describe Event, models: true do
it { expect(event.visible_to_user?(author)).to eq true }
it { expect(event.visible_to_user?(assignee)).to eq true }
it { expect(event.visible_to_user?(member)).to eq true }
- it { expect(event.visible_to_user?(guest)).to eq true }
it { expect(event.visible_to_user?(admin)).to eq true }
end
@@ -84,7 +81,6 @@ describe Event, models: true do
it { expect(event.visible_to_user?(author)).to eq true }
it { expect(event.visible_to_user?(assignee)).to eq true }
it { expect(event.visible_to_user?(member)).to eq true }
- it { expect(event.visible_to_user?(guest)).to eq false }
it { expect(event.visible_to_user?(admin)).to eq true }
end
end
@@ -97,7 +93,6 @@ describe Event, models: true do
it { expect(event.visible_to_user?(author)).to eq true }
it { expect(event.visible_to_user?(assignee)).to eq true }
it { expect(event.visible_to_user?(member)).to eq true }
- it { expect(event.visible_to_user?(guest)).to eq true }
it { expect(event.visible_to_user?(admin)).to eq true }
end
@@ -108,7 +103,6 @@ describe Event, models: true do
it { expect(event.visible_to_user?(author)).to eq true }
it { expect(event.visible_to_user?(assignee)).to eq true }
it { expect(event.visible_to_user?(member)).to eq true }
- it { expect(event.visible_to_user?(guest)).to eq false }
it { expect(event.visible_to_user?(admin)).to eq true }
end
end
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 2c19aa3f67f..6fa16be7f04 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -5,11 +5,7 @@ describe Group, models: true do
describe 'associations' do
it { is_expected.to have_many :projects }
- it { is_expected.to have_many(:group_members).dependent(:destroy) }
- it { is_expected.to have_many(:users).through(:group_members) }
- it { is_expected.to have_many(:project_group_links).dependent(:destroy) }
- it { is_expected.to have_many(:shared_projects).through(:project_group_links) }
- it { is_expected.to have_many(:notification_settings).dependent(:destroy) }
+ it { is_expected.to have_many :group_members }
end
describe 'modules' do
@@ -135,58 +131,4 @@ describe Group, models: true do
expect(described_class.search(group.path.upcase)).to eq([group])
end
end
-
- describe '#has_owner?' do
- before { @members = setup_group_members(group) }
-
- it { expect(group.has_owner?(@members[:owner])).to be_truthy }
- it { expect(group.has_owner?(@members[:master])).to be_falsey }
- it { expect(group.has_owner?(@members[:developer])).to be_falsey }
- it { expect(group.has_owner?(@members[:reporter])).to be_falsey }
- it { expect(group.has_owner?(@members[:guest])).to be_falsey }
- it { expect(group.has_owner?(@members[:requester])).to be_falsey }
- end
-
- describe '#has_master?' do
- before { @members = setup_group_members(group) }
-
- it { expect(group.has_master?(@members[:owner])).to be_falsey }
- it { expect(group.has_master?(@members[:master])).to be_truthy }
- it { expect(group.has_master?(@members[:developer])).to be_falsey }
- it { expect(group.has_master?(@members[:reporter])).to be_falsey }
- it { expect(group.has_master?(@members[:guest])).to be_falsey }
- it { expect(group.has_master?(@members[:requester])).to be_falsey }
- end
-
- describe '#owners' do
- let(:owner) { create(:user) }
- let(:developer) { create(:user) }
-
- it 'returns the owners of a Group' do
- group.add_owner(owner)
- group.add_developer(developer)
-
- expect(group.owners).to eq([owner])
- end
- end
-
- def setup_group_members(group)
- members = {
- owner: create(:user),
- master: create(:user),
- developer: create(:user),
- reporter: create(:user),
- guest: create(:user),
- requester: create(:user)
- }
-
- group.add_user(members[:owner], GroupMember::OWNER)
- group.add_user(members[:master], GroupMember::MASTER)
- group.add_user(members[:developer], GroupMember::DEVELOPER)
- group.add_user(members[:reporter], GroupMember::REPORTER)
- group.add_user(members[:guest], GroupMember::GUEST)
- group.request_access(members[:requester])
-
- members
- end
end
diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb
index 3ed3202ac6c..6e51730eecd 100644
--- a/spec/models/member_spec.rb
+++ b/spec/models/member_spec.rb
@@ -55,97 +55,11 @@ describe Member, models: true do
end
end
- describe 'Scopes & finders' do
- before do
- project = create(:project)
- group = create(:group)
- @owner_user = create(:user).tap { |u| group.add_owner(u) }
- @owner = group.members.find_by(user_id: @owner_user.id)
-
- @master_user = create(:user).tap { |u| project.team << [u, :master] }
- @master = project.members.find_by(user_id: @master_user.id)
-
- ProjectMember.add_user(project.members, 'toto1@example.com', Gitlab::Access::DEVELOPER, @master_user)
- @invited_member = project.members.invite.find_by_invite_email('toto1@example.com')
-
- accepted_invite_user = build(:user)
- ProjectMember.add_user(project.members, 'toto2@example.com', Gitlab::Access::DEVELOPER, @master_user)
- @accepted_invite_member = project.members.invite.find_by_invite_email('toto2@example.com').tap { |u| u.accept_invite!(accepted_invite_user) }
-
- requested_user = create(:user).tap { |u| project.request_access(u) }
- @requested_member = project.members.request.find_by(user_id: requested_user.id)
-
- accepted_request_user = create(:user).tap { |u| project.request_access(u) }
- @accepted_request_member = project.members.request.find_by(user_id: accepted_request_user.id).tap { |m| m.accept_request }
- end
-
- describe '.invite' do
- it { expect(described_class.invite).not_to include @master }
- it { expect(described_class.invite).to include @invited_member }
- it { expect(described_class.invite).not_to include @accepted_invite_member }
- it { expect(described_class.invite).not_to include @requested_member }
- it { expect(described_class.invite).not_to include @accepted_request_member }
- end
-
- describe '.non_invite' do
- it { expect(described_class.non_invite).to include @master }
- it { expect(described_class.non_invite).not_to include @invited_member }
- it { expect(described_class.non_invite).to include @accepted_invite_member }
- it { expect(described_class.non_invite).to include @requested_member }
- it { expect(described_class.non_invite).to include @accepted_request_member }
- end
-
- describe '.request' do
- it { expect(described_class.request).not_to include @master }
- it { expect(described_class.request).not_to include @invited_member }
- it { expect(described_class.request).not_to include @accepted_invite_member }
- it { expect(described_class.request).to include @requested_member }
- it { expect(described_class.request).not_to include @accepted_request_member }
- end
-
- describe '.non_request' do
- it { expect(described_class.non_request).to include @master }
- it { expect(described_class.non_request).to include @invited_member }
- it { expect(described_class.non_request).to include @accepted_invite_member }
- it { expect(described_class.non_request).not_to include @requested_member }
- it { expect(described_class.non_request).to include @accepted_request_member }
- end
-
- describe '.non_pending' do
- it { expect(described_class.non_pending).to include @master }
- it { expect(described_class.non_pending).not_to include @invited_member }
- it { expect(described_class.non_pending).to include @accepted_invite_member }
- it { expect(described_class.non_pending).not_to include @requested_member }
- it { expect(described_class.non_pending).to include @accepted_request_member }
- end
-
- describe '.owners_and_masters' do
- it { expect(described_class.owners_and_masters).to include @owner }
- it { expect(described_class.owners_and_masters).to include @master }
- it { expect(described_class.owners_and_masters).not_to include @invited_member }
- it { expect(described_class.owners_and_masters).not_to include @accepted_invite_member }
- it { expect(described_class.owners_and_masters).not_to include @requested_member }
- it { expect(described_class.owners_and_masters).not_to include @accepted_request_member }
- end
- end
-
describe "Delegate methods" do
it { is_expected.to respond_to(:user_name) }
it { is_expected.to respond_to(:user_email) }
end
- describe 'Callbacks' do
- describe 'after_destroy :post_decline_request, if: :request?' do
- let(:member) { create(:project_member, requested_at: Time.now.utc) }
-
- it 'calls #post_decline_request' do
- expect(member).to receive(:post_decline_request)
-
- member.destroy
- end
- end
- end
-
describe ".add_user" do
let!(:user) { create(:user) }
let(:project) { create(:project) }
@@ -183,44 +97,6 @@ describe Member, models: true do
end
end
- describe '#accept_request' do
- let(:member) { create(:project_member, requested_at: Time.now.utc) }
-
- it { expect(member.accept_request).to be_truthy }
-
- it 'clears requested_at' do
- member.accept_request
-
- expect(member.requested_at).to be_nil
- end
-
- it 'calls #after_accept_request' do
- expect(member).to receive(:after_accept_request)
-
- member.accept_request
- end
- end
-
- describe '#invite?' do
- subject { create(:project_member, invite_email: "user@example.com", user: nil) }
-
- it { is_expected.to be_invite }
- end
-
- describe '#request?' do
- subject { create(:project_member, requested_at: Time.now.utc) }
-
- it { is_expected.to be_request }
- end
-
- describe '#pending?' do
- let(:invited_member) { create(:project_member, invite_email: "user@example.com", user: nil) }
- let(:requester) { create(:project_member, requested_at: Time.now.utc) }
-
- it { expect(invited_member).to be_invite }
- it { expect(requester).to be_pending }
- end
-
describe "#accept_invite!" do
let!(:member) { create(:project_member, invite_email: "user@example.com", user: nil) }
let(:user) { create(:user) }
diff --git a/spec/models/members/group_member_spec.rb b/spec/models/members/group_member_spec.rb
index eeb74a462ac..5424c9b9cba 100644
--- a/spec/models/members/group_member_spec.rb
+++ b/spec/models/members/group_member_spec.rb
@@ -20,7 +20,7 @@
require 'spec_helper'
describe GroupMember, models: true do
- describe 'notifications' do
+ context 'notification' do
describe "#after_create" do
it "should send email to user" do
membership = build(:group_member)
@@ -50,31 +50,5 @@ describe GroupMember, models: true do
@group_member.update_attribute(:access_level, GroupMember::OWNER)
end
end
-
- describe '#after_accept_request' do
- it 'calls NotificationService.accept_group_access_request' do
- member = create(:group_member, user: build_stubbed(:user), requested_at: Time.now)
-
- expect_any_instance_of(NotificationService).to receive(:new_group_member)
-
- member.__send__(:after_accept_request)
- end
- end
-
- describe '#post_decline_request' do
- it 'calls NotificationService.decline_group_access_request' do
- member = create(:group_member, user: build_stubbed(:user), requested_at: Time.now)
-
- expect_any_instance_of(NotificationService).to receive(:decline_group_access_request)
-
- member.__send__(:post_decline_request)
- end
- end
-
- describe '#real_source_type' do
- subject { create(:group_member).real_source_type }
-
- it { is_expected.to eq 'Group' }
- end
end
end
diff --git a/spec/models/members/project_member_spec.rb b/spec/models/members/project_member_spec.rb
index 1e466f9c620..9f13874b532 100644
--- a/spec/models/members/project_member_spec.rb
+++ b/spec/models/members/project_member_spec.rb
@@ -33,12 +33,6 @@ describe ProjectMember, models: true do
it { is_expected.to include_module(Gitlab::ShellAdapter) }
end
- describe '#real_source_type' do
- subject { create(:project_member).real_source_type }
-
- it { is_expected.to eq 'Project' }
- end
-
describe "#destroy" do
let(:owner) { create(:project_member, access_level: ProjectMember::OWNER) }
let(:project) { owner.project }
@@ -141,26 +135,4 @@ describe ProjectMember, models: true do
it { expect(@project_1.users).to be_empty }
it { expect(@project_2.users).to be_empty }
end
-
- describe 'notifications' do
- describe '#after_accept_request' do
- it 'calls NotificationService.new_project_member' do
- member = create(:project_member, user: build_stubbed(:user), requested_at: Time.now)
-
- expect_any_instance_of(NotificationService).to receive(:new_project_member)
-
- member.__send__(:after_accept_request)
- end
- end
-
- describe '#post_decline_request' do
- it 'calls NotificationService.decline_project_access_request' do
- member = create(:project_member, user: build_stubbed(:user), requested_at: Time.now)
-
- expect_any_instance_of(NotificationService).to receive(:decline_project_access_request)
-
- member.__send__(:post_decline_request)
- end
- end
- end
end
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index 285ab19cfaf..f15e96714b2 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -162,23 +162,16 @@ describe Note, models: true do
end
context "confidential issues" do
- let(:user) { create(:user) }
- let(:project) { create(:project) }
- let(:confidential_issue) { create(:issue, :confidential, project: project, author: user) }
- let(:confidential_note) { create(:note, note: "Random", noteable: confidential_issue, project: confidential_issue.project) }
+ let(:user) { create :user }
+ let(:confidential_issue) { create(:issue, :confidential, author: user) }
+ let(:confidential_note) { create :note, note: "Random", noteable: confidential_issue, project: confidential_issue.project }
it "returns notes with matching content if user can see the issue" do
expect(described_class.search(confidential_note.note, as_user: user)).to eq([confidential_note])
end
it "does not return notes with matching content if user can not see the issue" do
- user = create(:user)
- expect(described_class.search(confidential_note.note, as_user: user)).to be_empty
- end
-
- it "does not return notes with matching content for project members with guest role" do
- user = create(:user)
- project.team << [user, :guest]
+ user = create :user
expect(described_class.search(confidential_note.note, as_user: user)).to be_empty
end
diff --git a/spec/models/notification_setting_spec.rb b/spec/models/notification_setting_spec.rb
index 4e24e89b008..295081e9da1 100644
--- a/spec/models/notification_setting_spec.rb
+++ b/spec/models/notification_setting_spec.rb
@@ -10,6 +10,7 @@ RSpec.describe NotificationSetting, type: :model do
subject { NotificationSetting.new(source_id: 1, source_type: 'Project') }
it { is_expected.to validate_presence_of(:user) }
+ it { is_expected.to validate_presence_of(:source) }
it { is_expected.to validate_presence_of(:level) }
it { is_expected.to validate_uniqueness_of(:user_id).scoped_to([:source_id, :source_type]).with_message(/already exists in source/) }
end
diff --git a/spec/models/project_services/bamboo_service_spec.rb b/spec/models/project_services/bamboo_service_spec.rb
index 9ae461f8c2d..ec81f05fc7a 100644
--- a/spec/models/project_services/bamboo_service_spec.rb
+++ b/spec/models/project_services/bamboo_service_spec.rb
@@ -126,25 +126,25 @@ describe BambooService, models: true do
it 'returns a specific URL when status is 500' do
stub_request(status: 500)
- expect(service.build_page('123', 'unused')).to eq('http://gitlab.com/bamboo/browse/foo')
+ expect(service.build_page('123', 'unused')).to eq('http://gitlab.com/browse/foo')
end
it 'returns a specific URL when response has no results' do
stub_request(body: %Q({"results":{"results":{"size":"0"}}}))
- expect(service.build_page('123', 'unused')).to eq('http://gitlab.com/bamboo/browse/foo')
+ expect(service.build_page('123', 'unused')).to eq('http://gitlab.com/browse/foo')
end
it 'returns a build URL when bamboo_url has no trailing slash' do
stub_request(body: %Q({"results":{"results":{"result":{"planResultKey":{"key":"42"}}}}}))
- expect(service(bamboo_url: 'http://gitlab.com/bamboo').build_page('123', 'unused')).to eq('http://gitlab.com/bamboo/browse/42')
+ expect(service(bamboo_url: 'http://gitlab.com').build_page('123', 'unused')).to eq('http://gitlab.com/browse/42')
end
it 'returns a build URL when bamboo_url has a trailing slash' do
stub_request(body: %Q({"results":{"results":{"result":{"planResultKey":{"key":"42"}}}}}))
- expect(service(bamboo_url: 'http://gitlab.com/bamboo/').build_page('123', 'unused')).to eq('http://gitlab.com/bamboo/browse/42')
+ expect(service(bamboo_url: 'http://gitlab.com/').build_page('123', 'unused')).to eq('http://gitlab.com/browse/42')
end
end
@@ -192,7 +192,7 @@ describe BambooService, models: true do
end
end
- def service(bamboo_url: 'http://gitlab.com/bamboo')
+ def service(bamboo_url: 'http://gitlab.com')
described_class.create(
project: create(:empty_project),
properties: {
@@ -205,7 +205,7 @@ describe BambooService, models: true do
end
def stub_request(status: 200, body: nil, build_state: 'success')
- bamboo_full_url = 'http://mic:password@gitlab.com/bamboo/rest/api/latest/result?label=123&os_authType=basic'
+ bamboo_full_url = 'http://mic:password@gitlab.com/rest/api/latest/result?label=123&os_authType=basic'
body ||= %Q({"results":{"results":{"result":{"buildState":"#{build_state}"}}}})
WebMock.stub_request(:get, bamboo_full_url).to_return(
diff --git a/spec/models/project_services/teamcity_service_spec.rb b/spec/models/project_services/teamcity_service_spec.rb
index 474715d24c3..24a708ca849 100644
--- a/spec/models/project_services/teamcity_service_spec.rb
+++ b/spec/models/project_services/teamcity_service_spec.rb
@@ -126,19 +126,19 @@ describe TeamcityService, models: true do
it 'returns a specific URL when status is 500' do
stub_request(status: 500)
- expect(service.build_page('123', 'unused')).to eq('http://gitlab.com/teamcity/viewLog.html?buildTypeId=foo')
+ expect(service.build_page('123', 'unused')).to eq('http://gitlab.com/viewLog.html?buildTypeId=foo')
end
it 'returns a build URL when teamcity_url has no trailing slash' do
stub_request(body: %Q({"build":{"id":"666"}}))
- expect(service(teamcity_url: 'http://gitlab.com/teamcity').build_page('123', 'unused')).to eq('http://gitlab.com/teamcity/viewLog.html?buildId=666&buildTypeId=foo')
+ expect(service(teamcity_url: 'http://gitlab.com').build_page('123', 'unused')).to eq('http://gitlab.com/viewLog.html?buildId=666&buildTypeId=foo')
end
it 'returns a build URL when teamcity_url has a trailing slash' do
stub_request(body: %Q({"build":{"id":"666"}}))
- expect(service(teamcity_url: 'http://gitlab.com/teamcity/').build_page('123', 'unused')).to eq('http://gitlab.com/teamcity/viewLog.html?buildId=666&buildTypeId=foo')
+ expect(service(teamcity_url: 'http://gitlab.com/').build_page('123', 'unused')).to eq('http://gitlab.com/viewLog.html?buildId=666&buildTypeId=foo')
end
end
@@ -180,7 +180,7 @@ describe TeamcityService, models: true do
end
end
- def service(teamcity_url: 'http://gitlab.com/teamcity')
+ def service(teamcity_url: 'http://gitlab.com')
described_class.create(
project: create(:empty_project),
properties: {
@@ -193,7 +193,7 @@ describe TeamcityService, models: true do
end
def stub_request(status: 200, body: nil, build_status: 'success')
- teamcity_full_url = 'http://mic:password@gitlab.com/teamcity/httpAuth/app/rest/builds/branch:unspecified:any,number:123'
+ teamcity_full_url = 'http://mic:password@gitlab.com/httpAuth/app/rest/builds/branch:unspecified:any,number:123'
body ||= %Q({"build":{"status":"#{build_status}","id":"666"}})
WebMock.stub_request(:get, teamcity_full_url).to_return(
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index fedab1f913b..f3590f72cfe 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -28,8 +28,6 @@ describe Project, models: true do
it { is_expected.to have_many(:runners) }
it { is_expected.to have_many(:variables) }
it { is_expected.to have_many(:triggers) }
- it { is_expected.to have_many(:environments).dependent(:destroy) }
- it { is_expected.to have_many(:deployments).dependent(:destroy) }
it { is_expected.to have_many(:todos).dependent(:destroy) }
end
@@ -55,6 +53,7 @@ describe Project, models: true do
it { is_expected.to validate_length_of(:path).is_within(0..255) }
it { is_expected.to validate_length_of(:description).is_within(0..2000) }
it { is_expected.to validate_presence_of(:creator) }
+ it { is_expected.to validate_length_of(:issues_tracker_id).is_within(0..255) }
it { is_expected.to validate_presence_of(:namespace) }
it 'should not allow new projects beyond user limits' do
@@ -91,17 +90,11 @@ describe Project, models: true do
it { is_expected.to respond_to(:repo_exists?) }
it { is_expected.to respond_to(:update_merge_requests) }
it { is_expected.to respond_to(:execute_hooks) }
+ it { is_expected.to respond_to(:name_with_namespace) }
it { is_expected.to respond_to(:owner) }
it { is_expected.to respond_to(:path_with_namespace) }
end
- describe '#name_with_namespace' do
- let(:project) { build_stubbed(:empty_project) }
-
- it { expect(project.name_with_namespace).to eq "#{project.namespace.human_name} / #{project.name}" }
- it { expect(project.human_name).to eq project.name_with_namespace }
- end
-
describe '#to_reference' do
let(:project) { create(:empty_project) }
@@ -328,6 +321,27 @@ describe Project, models: true do
end
end
+ describe :can_have_issues_tracker_id? do
+ let(:project) { create(:project) }
+ let(:ext_project) { create(:redmine_project) }
+
+ it 'should be true for projects with external issues tracker if issues enabled' do
+ expect(ext_project.can_have_issues_tracker_id?).to be_truthy
+ end
+
+ it 'should be false for projects with internal issue tracker if issues enabled' do
+ expect(project.can_have_issues_tracker_id?).to be_falsey
+ end
+
+ it 'should be always false if issues disabled' do
+ project.issues_enabled = false
+ ext_project.issues_enabled = false
+
+ expect(project.can_have_issues_tracker_id?).to be_falsey
+ expect(ext_project.can_have_issues_tracker_id?).to be_falsey
+ end
+ end
+
describe :open_branches do
let(:project) { create(:project) }
diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb
index 9262aeb6ed8..bacb17a8883 100644
--- a/spec/models/project_team_spec.rb
+++ b/spec/models/project_team_spec.rb
@@ -29,9 +29,6 @@ describe ProjectTeam, models: true do
it { expect(project.team.master?(nonmember)).to be_falsey }
it { expect(project.team.member?(nonmember)).to be_falsey }
it { expect(project.team.member?(guest)).to be_truthy }
- it { expect(project.team.member?(reporter, Gitlab::Access::REPORTER)).to be_truthy }
- it { expect(project.team.member?(guest, Gitlab::Access::REPORTER)).to be_falsey }
- it { expect(project.team.member?(nonmember, Gitlab::Access::GUEST)).to be_falsey }
end
end
@@ -67,48 +64,50 @@ describe ProjectTeam, models: true do
it { expect(project.team.master?(nonmember)).to be_falsey }
it { expect(project.team.member?(nonmember)).to be_falsey }
it { expect(project.team.member?(guest)).to be_truthy }
- it { expect(project.team.member?(guest, Gitlab::Access::MASTER)).to be_truthy }
- it { expect(project.team.member?(reporter, Gitlab::Access::MASTER)).to be_falsey }
- it { expect(project.team.member?(nonmember, Gitlab::Access::GUEST)).to be_falsey }
end
end
- describe '#find_member' do
- context 'personal project' do
- let(:project) { create(:empty_project) }
- let(:requester) { create(:user) }
-
- before do
- project.team << [master, :master]
- project.team << [reporter, :reporter]
- project.team << [guest, :guest]
- project.request_access(requester)
- end
-
- it { expect(project.team.find_member(master.id)).to be_a(ProjectMember) }
- it { expect(project.team.find_member(reporter.id)).to be_a(ProjectMember) }
- it { expect(project.team.find_member(guest.id)).to be_a(ProjectMember) }
- it { expect(project.team.find_member(nonmember.id)).to be_nil }
- it { expect(project.team.find_member(requester.id)).to be_nil }
+ describe :max_invited_level do
+ let(:group) { create(:group) }
+ let(:project) { create(:empty_project) }
+
+ before do
+ project.project_group_links.create(
+ group: group,
+ group_access: Gitlab::Access::DEVELOPER
+ )
+
+ group.add_user(master, Gitlab::Access::MASTER)
+ group.add_user(reporter, Gitlab::Access::REPORTER)
+ end
+
+ it { expect(project.team.max_invited_level(master.id)).to eq(Gitlab::Access::DEVELOPER) }
+ it { expect(project.team.max_invited_level(reporter.id)).to eq(Gitlab::Access::REPORTER) }
+ it { expect(project.team.max_invited_level(nonmember.id)).to be_nil }
+ end
+
+ describe :max_member_access do
+ let(:group) { create(:group) }
+ let(:project) { create(:empty_project) }
+
+ before do
+ project.project_group_links.create(
+ group: group,
+ group_access: Gitlab::Access::DEVELOPER
+ )
+
+ group.add_user(master, Gitlab::Access::MASTER)
+ group.add_user(reporter, Gitlab::Access::REPORTER)
end
- context 'group project' do
- let(:group) { create(:group) }
- let(:project) { create(:empty_project, group: group) }
- let(:requester) { create(:user) }
-
- before do
- group.add_master(master)
- group.add_reporter(reporter)
- group.add_guest(guest)
- group.request_access(requester)
- end
-
- it { expect(project.team.find_member(master.id)).to be_a(GroupMember) }
- it { expect(project.team.find_member(reporter.id)).to be_a(GroupMember) }
- it { expect(project.team.find_member(guest.id)).to be_a(GroupMember) }
- it { expect(project.team.find_member(nonmember.id)).to be_nil }
- it { expect(project.team.find_member(requester.id)).to be_nil }
+ it { expect(project.team.max_member_access(master.id)).to eq(Gitlab::Access::DEVELOPER) }
+ it { expect(project.team.max_member_access(reporter.id)).to eq(Gitlab::Access::REPORTER) }
+ it { expect(project.team.max_member_access(nonmember.id)).to be_nil }
+
+ it "does not have an access" do
+ project.namespace.update(share_with_group_lock: true)
+ expect(project.team.max_member_access(master.id)).to be_nil
+ expect(project.team.max_member_access(reporter.id)).to be_nil
end
end
@@ -133,69 +132,4 @@ describe ProjectTeam, models: true do
expect(project.team.human_max_access(user.id)).to eq 'Owner'
end
end
-
- describe '#max_member_access' do
- let(:requester) { create(:user) }
-
- context 'personal project' do
- let(:project) { create(:empty_project) }
-
- context 'when project is not shared with group' do
- before do
- project.team << [master, :master]
- project.team << [reporter, :reporter]
- project.team << [guest, :guest]
- project.request_access(requester)
- end
-
- it { expect(project.team.max_member_access(master.id)).to eq(Gitlab::Access::MASTER) }
- it { expect(project.team.max_member_access(reporter.id)).to eq(Gitlab::Access::REPORTER) }
- it { expect(project.team.max_member_access(guest.id)).to eq(Gitlab::Access::GUEST) }
- it { expect(project.team.max_member_access(nonmember.id)).to be_nil }
- it { expect(project.team.max_member_access(requester.id)).to be_nil }
- end
-
- context 'when project is shared with group' do
- before do
- group = create(:group)
- project.project_group_links.create(
- group: group,
- group_access: Gitlab::Access::DEVELOPER)
-
- group.add_master(master)
- group.add_reporter(reporter)
- end
-
- it { expect(project.team.max_member_access(master.id)).to eq(Gitlab::Access::DEVELOPER) }
- it { expect(project.team.max_member_access(reporter.id)).to eq(Gitlab::Access::REPORTER) }
- it { expect(project.team.max_member_access(nonmember.id)).to be_nil }
- it { expect(project.team.max_member_access(requester.id)).to be_nil }
-
- context 'but share_with_group_lock is true' do
- before { project.namespace.update(share_with_group_lock: true) }
-
- it { expect(project.team.max_member_access(master.id)).to be_nil }
- it { expect(project.team.max_member_access(reporter.id)).to be_nil }
- end
- end
- end
-
- context 'group project' do
- let(:group) { create(:group) }
- let(:project) { create(:empty_project, group: group) }
-
- before do
- group.add_master(master)
- group.add_reporter(reporter)
- group.add_guest(guest)
- group.request_access(requester)
- end
-
- it { expect(project.team.max_member_access(master.id)).to eq(Gitlab::Access::MASTER) }
- it { expect(project.team.max_member_access(reporter.id)).to eq(Gitlab::Access::REPORTER) }
- it { expect(project.team.max_member_access(guest.id)).to eq(Gitlab::Access::GUEST) }
- it { expect(project.team.max_member_access(nonmember.id)).to be_nil }
- it { expect(project.team.max_member_access(requester.id)).to be_nil }
- end
- end
end
diff --git a/spec/requests/api/builds_spec.rb b/spec/requests/api/builds_spec.rb
index ac85f340922..6cb7be188ef 100644
--- a/spec/requests/api/builds_spec.rb
+++ b/spec/requests/api/builds_spec.rb
@@ -241,30 +241,4 @@ describe API::API, api: true do
end
end
end
-
- describe 'POST /projects/:id/builds/:build_id/artifacts/keep' do
- before do
- post api("/projects/#{project.id}/builds/#{build.id}/artifacts/keep", user)
- end
-
- context 'artifacts did not expire' do
- let(:build) do
- create(:ci_build, :trace, :artifacts, :success,
- project: project, pipeline: pipeline, artifacts_expire_at: Time.now + 7.days)
- end
-
- it 'keeps artifacts' do
- expect(response.status).to eq 200
- expect(build.reload.artifacts_expire_at).to be_nil
- end
- end
-
- context 'no artifacts' do
- let(:build) { create(:ci_build, project: project, pipeline: pipeline) }
-
- it 'responds with not found' do
- expect(response.status).to eq 404
- end
- end
- end
end
diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb
index 59e557c5b2a..bb926172593 100644
--- a/spec/requests/api/issues_spec.rb
+++ b/spec/requests/api/issues_spec.rb
@@ -5,7 +5,6 @@ describe API::API, api: true do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:non_member) { create(:user) }
- let(:guest) { create(:user) }
let(:author) { create(:author) }
let(:assignee) { create(:assignee) }
let(:admin) { create(:user, :admin) }
@@ -42,10 +41,7 @@ describe API::API, api: true do
end
let!(:note) { create(:note_on_issue, author: user, project: project, noteable: issue) }
- before do
- project.team << [user, :reporter]
- project.team << [guest, :guest]
- end
+ before { project.team << [user, :reporter] }
describe "GET /issues" do
context "when unauthenticated" do
@@ -148,14 +144,6 @@ describe API::API, api: true do
expect(json_response.first['title']).to eq(issue.title)
end
- it 'should return project issues without confidential issues for project members with guest role' do
- get api("#{base_url}/issues", guest)
- expect(response.status).to eq(200)
- expect(json_response).to be_an Array
- expect(json_response.length).to eq(2)
- expect(json_response.first['title']).to eq(issue.title)
- end
-
it 'should return project confidential issues for author' do
get api("#{base_url}/issues", author)
expect(response.status).to eq(200)
@@ -290,11 +278,6 @@ describe API::API, api: true do
expect(response.status).to eq(404)
end
- it "should return 404 for project members with guest role" do
- get api("/projects/#{project.id}/issues/#{confidential_issue.id}", guest)
- expect(response.status).to eq(404)
- end
-
it "should return confidential issue for project members" do
get api("/projects/#{project.id}/issues/#{confidential_issue.id}", user)
expect(response.status).to eq(200)
@@ -430,12 +413,6 @@ describe API::API, api: true do
expect(response.status).to eq(403)
end
- it "should return 403 for project members with guest role" do
- put api("/projects/#{project.id}/issues/#{confidential_issue.id}", guest),
- title: 'updated title'
- expect(response.status).to eq(403)
- end
-
it "should update a confidential issue for project members" do
put api("/projects/#{project.id}/issues/#{confidential_issue.id}", user),
title: 'updated title'
diff --git a/spec/requests/api/milestones_spec.rb b/spec/requests/api/milestones_spec.rb
index 0154d1c62cc..241995041bb 100644
--- a/spec/requests/api/milestones_spec.rb
+++ b/spec/requests/api/milestones_spec.rb
@@ -146,7 +146,6 @@ describe API::API, api: true do
let(:milestone) { create(:milestone, project: public_project) }
let(:issue) { create(:issue, project: public_project) }
let(:confidential_issue) { create(:issue, confidential: true, project: public_project) }
-
before do
public_project.team << [user, :developer]
milestone.issues << issue << confidential_issue
@@ -161,18 +160,6 @@ describe API::API, api: true do
expect(json_response.map { |issue| issue['id'] }).to include(issue.id, confidential_issue.id)
end
- it 'does not return confidential issues to team members with guest role' do
- member = create(:user)
- project.team << [member, :guest]
-
- get api("/projects/#{public_project.id}/milestones/#{milestone.id}/issues", member)
-
- expect(response.status).to eq(200)
- expect(json_response).to be_an Array
- expect(json_response.size).to eq(1)
- expect(json_response.map { |issue| issue['id'] }).to include(issue.id)
- end
-
it 'does not return confidential issues to regular users' do
get api("/projects/#{public_project.id}/milestones/#{milestone.id}/issues", create(:user))
diff --git a/spec/requests/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb
index 7e50bea90d1..e8508f8f950 100644
--- a/spec/requests/ci/api/builds_spec.rb
+++ b/spec/requests/ci/api/builds_spec.rb
@@ -364,42 +364,6 @@ describe Ci::API::API do
end
end
- context 'with an expire date' do
- let!(:artifacts) { file_upload }
-
- let(:post_data) do
- { 'file.path' => artifacts.path,
- 'file.name' => artifacts.original_filename,
- 'expire_in' => expire_in }
- end
-
- before do
- post(post_url, post_data, headers_with_token)
- end
-
- context 'with an expire_in given' do
- let(:expire_in) { '7 days' }
-
- it 'updates when specified' do
- build.reload
- expect(response.status).to eq(201)
- expect(json_response['artifacts_expire_at']).not_to be_empty
- expect(build.artifacts_expire_at).to be_within(5.minutes).of(Time.now + 7.days)
- end
- end
-
- context 'with no expire_in given' do
- let(:expire_in) { nil }
-
- it 'ignores if not specified' do
- build.reload
- expect(response.status).to eq(201)
- expect(json_response['artifacts_expire_at']).to be_nil
- expect(build.artifacts_expire_at).to be_nil
- end
- end
- end
-
context "artifacts file is too large" do
it "should fail to post too large artifact" do
stub_application_setting(max_artifacts_size: 0)
diff --git a/spec/requests/git_http_spec.rb b/spec/requests/git_http_spec.rb
index fd26ca97818..c44a4a7a1fc 100644
--- a/spec/requests/git_http_spec.rb
+++ b/spec/requests/git_http_spec.rb
@@ -340,7 +340,7 @@ describe 'Git HTTP requests', lib: true do
end
end
- context "when the file does not exist" do
+ context "when the file exists" do
before { get "/#{project.path_with_namespace}/blob/master/info/refs" }
it "returns not found" do
diff --git a/spec/requests/jwt_controller_spec.rb b/spec/requests/jwt_controller_spec.rb
index d2d4a9eca18..c995993a853 100644
--- a/spec/requests/jwt_controller_spec.rb
+++ b/spec/requests/jwt_controller_spec.rb
@@ -44,7 +44,7 @@ describe JwtController do
let(:user) { create(:user) }
let(:headers) { { authorization: credentials('user', 'password') } }
- before { expect(Gitlab::Auth).to receive(:find_with_user_password).with('user', 'password').and_return(user) }
+ before { expect(Gitlab::Auth).to receive(:find_in_gitlab_or_ldap).with('user', 'password').and_return(user) }
subject! { get '/jwt/auth', parameters, headers }
diff --git a/spec/services/ci/register_build_service_spec.rb b/spec/services/ci/register_build_service_spec.rb
index f28f2f1438d..d91fc574299 100644
--- a/spec/services/ci/register_build_service_spec.rb
+++ b/spec/services/ci/register_build_service_spec.rb
@@ -45,73 +45,11 @@ module Ci
end
end
- context 'deleted projects' do
- before do
- project.update(pending_delete: true)
- end
-
- context 'for shared runners' do
- before do
- project.update(shared_runners_enabled: true)
- end
-
- it 'does not pick a build' do
- expect(service.execute(shared_runner)).to be_nil
- end
- end
-
- context 'for specific runner' do
- it 'does not pick a build' do
- expect(service.execute(specific_runner)).to be_nil
- end
- end
- end
-
context 'allow shared runners' do
before do
project.update(shared_runners_enabled: true)
end
- context 'for multiple builds' do
- let!(:project2) { create :empty_project, shared_runners_enabled: true }
- let!(:pipeline2) { create :ci_pipeline, project: project2 }
- let!(:project3) { create :empty_project, shared_runners_enabled: true }
- let!(:pipeline3) { create :ci_pipeline, project: project3 }
- let!(:build1_project1) { pending_build }
- let!(:build2_project1) { FactoryGirl.create :ci_build, pipeline: pipeline }
- let!(:build3_project1) { FactoryGirl.create :ci_build, pipeline: pipeline }
- let!(:build1_project2) { FactoryGirl.create :ci_build, pipeline: pipeline2 }
- let!(:build2_project2) { FactoryGirl.create :ci_build, pipeline: pipeline2 }
- let!(:build1_project3) { FactoryGirl.create :ci_build, pipeline: pipeline3 }
-
- it 'prefers projects without builds first' do
- # it gets for one build from each of the projects
- expect(service.execute(shared_runner)).to eq(build1_project1)
- expect(service.execute(shared_runner)).to eq(build1_project2)
- expect(service.execute(shared_runner)).to eq(build1_project3)
-
- # then it gets a second build from each of the projects
- expect(service.execute(shared_runner)).to eq(build2_project1)
- expect(service.execute(shared_runner)).to eq(build2_project2)
-
- # in the end the third build
- expect(service.execute(shared_runner)).to eq(build3_project1)
- end
-
- it 'equalises number of running builds' do
- # after finishing the first build for project 1, get a second build from the same project
- expect(service.execute(shared_runner)).to eq(build1_project1)
- build1_project1.success
- expect(service.execute(shared_runner)).to eq(build2_project1)
-
- expect(service.execute(shared_runner)).to eq(build1_project2)
- build1_project2.success
- expect(service.execute(shared_runner)).to eq(build2_project2)
- expect(service.execute(shared_runner)).to eq(build1_project3)
- expect(service.execute(shared_runner)).to eq(build3_project1)
- end
- end
-
context 'shared runner' do
let(:build) { service.execute(shared_runner) }
diff --git a/spec/services/create_deployment_service_spec.rb b/spec/services/create_deployment_service_spec.rb
deleted file mode 100644
index 654e441f3cd..00000000000
--- a/spec/services/create_deployment_service_spec.rb
+++ /dev/null
@@ -1,119 +0,0 @@
-require 'spec_helper'
-
-describe CreateDeploymentService, services: true do
- let(:project) { create(:empty_project) }
- let(:user) { create(:user) }
-
- let(:service) { described_class.new(project, user, params) }
-
- describe '#execute' do
- let(:params) do
- { environment: 'production',
- ref: 'master',
- tag: false,
- sha: '97de212e80737a608d939f648d959671fb0a0142',
- }
- end
-
- subject { service.execute }
-
- context 'when no environments exist' do
- it 'does create a new environment' do
- expect { subject }.to change { Environment.count }.by(1)
- end
-
- it 'does create a deployment' do
- expect(subject).to be_persisted
- end
- end
-
- context 'when environment exist' do
- before { create(:environment, project: project, name: 'production') }
-
- it 'does not create a new environment' do
- expect { subject }.not_to change { Environment.count }
- end
-
- it 'does create a deployment' do
- expect(subject).to be_persisted
- end
- end
-
- context 'for environment with invalid name' do
- let(:params) do
- { environment: 'name with spaces',
- ref: 'master',
- tag: false,
- sha: '97de212e80737a608d939f648d959671fb0a0142',
- }
- end
-
- it 'does not create a new environment' do
- expect { subject }.not_to change { Environment.count }
- end
-
- it 'does not create a deployment' do
- expect(subject).not_to be_persisted
- end
- end
- end
-
- describe 'processing of builds' do
- let(:environment) { nil }
-
- shared_examples 'does not create environment and deployment' do
- it 'does not create a new environment' do
- expect { subject }.not_to change { Environment.count }
- end
-
- it 'does not create a new deployment' do
- expect { subject }.not_to change { Deployment.count }
- end
-
- it 'does not call a service' do
- expect_any_instance_of(described_class).not_to receive(:execute)
- subject
- end
- end
-
- shared_examples 'does create environment and deployment' do
- it 'does create a new environment' do
- expect { subject }.to change { Environment.count }.by(1)
- end
-
- it 'does create a new deployment' do
- expect { subject }.to change { Deployment.count }.by(1)
- end
-
- it 'does call a service' do
- expect_any_instance_of(described_class).to receive(:execute)
- subject
- end
- end
-
- context 'without environment specified' do
- let(:build) { create(:ci_build, project: project) }
-
- it_behaves_like 'does not create environment and deployment' do
- subject { build.success }
- end
- end
-
- context 'when environment is specified' do
- let(:pipeline) { create(:ci_pipeline, project: project) }
- let(:build) { create(:ci_build, pipeline: pipeline, environment: 'production') }
-
- context 'when build succeeds' do
- it_behaves_like 'does create environment and deployment' do
- subject { build.success }
- end
- end
-
- context 'when build fails' do
- it_behaves_like 'does not create environment and deployment' do
- subject { build.drop }
- end
- end
- end
- end
-end
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index e871a103d42..cef5e0d8659 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -72,7 +72,6 @@ describe NotificationService, services: true do
should_not_email(@u_disabled)
should_not_email(@unsubscriber)
should_not_email(@u_outsider_mentioned)
- should_not_email(@u_lazy_participant)
end
it 'filters out "mentioned in" notes' do
@@ -81,20 +80,6 @@ describe NotificationService, services: true do
expect(Notify).not_to receive(:note_issue_email)
notification.new_note(mentioned_note)
end
-
- context 'participating' do
- context 'by note' do
- before do
- ActionMailer::Base.deliveries.clear
- note.author = @u_lazy_participant
- note.save
- notification.new_note(note)
- end
-
-
- it { should_not_email(@u_lazy_participant) }
- end
- end
end
describe 'new note on issue in project that belongs to a group' do
@@ -121,7 +106,6 @@ describe NotificationService, services: true do
should_not_email(note.author)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
end
end
@@ -132,14 +116,12 @@ describe NotificationService, services: true do
let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
- let(:guest) { create(:user) }
let(:admin) { create(:admin) }
let(:confidential_issue) { create(:issue, :confidential, project: project, author: author, assignee: assignee) }
let(:note) { create(:note_on_issue, noteable: confidential_issue, project: project, note: "#{author.to_reference} #{assignee.to_reference} #{non_member.to_reference} #{member.to_reference} #{admin.to_reference}") }
it 'filters out users that can not read the issue' do
project.team << [member, :developer]
- project.team << [guest, :guest]
expect(SentNotification).to receive(:record).with(confidential_issue, any_args).exactly(4).times
@@ -148,7 +130,6 @@ describe NotificationService, services: true do
notification.new_note(note)
should_not_email(non_member)
- should_not_email(guest)
should_email(author)
should_email(assignee)
should_email(member)
@@ -254,7 +235,6 @@ describe NotificationService, services: true do
should_not_email(note.author)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it do
@@ -268,11 +248,10 @@ describe NotificationService, services: true do
should_not_email(note.author)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it do
- @u_committer = create_global_setting_for(@u_committer, :mention)
+ @u_committer.update_attributes(notification_level: :mention)
notification.new_note(note)
should_not_email(@u_committer)
end
@@ -301,11 +280,10 @@ describe NotificationService, services: true do
should_not_email(@u_mentioned)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it do
- create_global_setting_for(issue.assignee, :mention)
+ issue.assignee.update_attributes(notification_level: :mention)
notification.new_issue(issue, @u_disabled)
should_not_email(issue.assignee)
@@ -325,20 +303,17 @@ describe NotificationService, services: true do
let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
- let(:guest) { create(:user) }
let(:admin) { create(:admin) }
let(:confidential_issue) { create(:issue, :confidential, project: project, title: 'Confidential issue', author: author, assignee: assignee) }
it "emails subscribers of the issue's labels that can read the issue" do
project.team << [member, :developer]
- project.team << [guest, :guest]
label = create(:label, issues: [confidential_issue])
label.toggle_subscription(non_member)
label.toggle_subscription(author)
label.toggle_subscription(assignee)
label.toggle_subscription(member)
- label.toggle_subscription(guest)
label.toggle_subscription(admin)
ActionMailer::Base.deliveries.clear
@@ -347,7 +322,6 @@ describe NotificationService, services: true do
should_not_email(non_member)
should_not_email(author)
- should_not_email(guest)
should_email(assignee)
should_email(member)
should_email(admin)
@@ -367,7 +341,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it 'emails previous assignee even if he has the "on mention" notif level' do
@@ -383,7 +356,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it 'emails new assignee even if he has the "on mention" notif level' do
@@ -399,7 +371,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it 'emails new assignee' do
@@ -415,7 +386,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it 'does not email new assignee if they are the current user' do
@@ -431,35 +401,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
- end
-
- context 'participating' do
- context 'by assignee' do
- before do
- issue.update_attribute(:assignee, @u_lazy_participant)
- notification.reassigned_issue(issue, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.reassigned_issue(issue, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- issue.author = @u_lazy_participant
- notification.reassigned_issue(issue, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
end
end
@@ -497,7 +438,6 @@ describe NotificationService, services: true do
let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
- let(:guest) { create(:user) }
let(:admin) { create(:admin) }
let(:confidential_issue) { create(:issue, :confidential, project: project, title: 'Confidential issue', author: author, assignee: assignee) }
let!(:label_1) { create(:label, issues: [confidential_issue]) }
@@ -505,13 +445,11 @@ describe NotificationService, services: true do
it "emails subscribers of the issue's labels that can read the issue" do
project.team << [member, :developer]
- project.team << [guest, :guest]
label_2.toggle_subscription(non_member)
label_2.toggle_subscription(author)
label_2.toggle_subscription(assignee)
label_2.toggle_subscription(member)
- label_2.toggle_subscription(guest)
label_2.toggle_subscription(admin)
ActionMailer::Base.deliveries.clear
@@ -519,7 +457,6 @@ describe NotificationService, services: true do
notification.relabeled_issue(confidential_issue, [label_2], @u_disabled)
should_not_email(non_member)
- should_not_email(guest)
should_email(author)
should_email(assignee)
should_email(member)
@@ -542,35 +479,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
- end
-
- context 'participating' do
- context 'by assignee' do
- before do
- issue.update_attribute(:assignee, @u_lazy_participant)
- notification.close_issue(issue, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.close_issue(issue, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- issue.author = @u_lazy_participant
- notification.close_issue(issue, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
end
end
@@ -587,35 +495,6 @@ describe NotificationService, services: true do
should_email(@watcher_and_subscriber)
should_not_email(@unsubscriber)
should_not_email(@u_participating)
- should_not_email(@u_lazy_participant)
- end
-
- context 'participating' do
- context 'by assignee' do
- before do
- issue.update_attribute(:assignee, @u_lazy_participant)
- notification.reopen_issue(issue, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: issue, project_id: issue.project_id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.reopen_issue(issue, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- issue.author = @u_lazy_participant
- notification.reopen_issue(issue, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
end
end
end
@@ -641,7 +520,6 @@ describe NotificationService, services: true do
should_email(@u_guest_watcher)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
end
it "emails subscribers of the merge request's labels" do
@@ -652,36 +530,6 @@ describe NotificationService, services: true do
should_email(subscriber)
end
-
-
- context 'participating' do
- context 'by assignee' do
- before do
- merge_request.update_attribute(:assignee, @u_lazy_participant)
- notification.new_merge_request(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.new_merge_request(merge_request, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- merge_request.author = @u_lazy_participant
- merge_request.save
- notification.new_merge_request(merge_request, @u_disabled)
- end
-
- it { should_not_email(@u_lazy_participant) }
- end
- end
end
describe '#reassigned_merge_request' do
@@ -697,36 +545,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
- end
-
- context 'participating' do
- context 'by assignee' do
- before do
- merge_request.update_attribute(:assignee, @u_lazy_participant)
- notification.reassigned_merge_request(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.reassigned_merge_request(merge_request, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- merge_request.author = @u_lazy_participant
- merge_request.save
- notification.reassigned_merge_request(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
end
end
@@ -754,7 +572,6 @@ describe NotificationService, services: true do
should_not_email(@watcher_and_subscriber)
should_not_email(@unsubscriber)
should_not_email(@u_participating)
- should_not_email(@u_lazy_participant)
should_not_email(subscriber_to_label)
should_email(subscriber_to_label2)
end
@@ -773,36 +590,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
- end
-
- context 'participating' do
- context 'by assignee' do
- before do
- merge_request.update_attribute(:assignee, @u_lazy_participant)
- notification.close_mr(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.close_mr(merge_request, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- merge_request.author = @u_lazy_participant
- merge_request.save
- notification.close_mr(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
end
end
@@ -819,36 +606,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
- end
-
- context 'participating' do
- context 'by assignee' do
- before do
- merge_request.update_attribute(:assignee, @u_lazy_participant)
- notification.merge_mr(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.merge_mr(merge_request, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- merge_request.author = @u_lazy_participant
- merge_request.save
- notification.merge_mr(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
end
end
@@ -865,36 +622,6 @@ describe NotificationService, services: true do
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_disabled)
- should_not_email(@u_lazy_participant)
- end
-
- context 'participating' do
- context 'by assignee' do
- before do
- merge_request.update_attribute(:assignee, @u_lazy_participant)
- notification.reopen_mr(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by note' do
- let!(:note) { create(:note_on_issue, noteable: merge_request, project_id: project.id, note: 'anything', author: @u_lazy_participant) }
-
- before { notification.reopen_mr(merge_request, @u_disabled) }
-
- it { should_email(@u_lazy_participant) }
- end
-
- context 'by author' do
- before do
- merge_request.author = @u_lazy_participant
- merge_request.save
- notification.reopen_mr(merge_request, @u_disabled)
- end
-
- it { should_email(@u_lazy_participant) }
- end
end
end
end
@@ -913,7 +640,6 @@ describe NotificationService, services: true do
should_email(@u_watcher)
should_email(@u_participating)
- should_email(@u_lazy_participant)
should_not_email(@u_guest_watcher)
should_not_email(@u_disabled)
end
@@ -921,19 +647,14 @@ describe NotificationService, services: true do
end
def build_team(project)
- @u_watcher = create_global_setting_for(create(:user), :watch)
- @u_participating = create_global_setting_for(create(:user), :participating)
- @u_participant_mentioned = create_global_setting_for(create(:user, username: 'participant'), :participating)
- @u_disabled = create_global_setting_for(create(:user), :disabled)
- @u_mentioned = create_global_setting_for(create(:user, username: 'mention'), :mention)
- @u_committer = create(:user, username: 'committer')
- @u_not_mentioned = create_global_setting_for(create(:user, username: 'regular'), :participating)
- @u_outsider_mentioned = create(:user, username: 'outsider')
-
- # User to be participant by default
- # This user does not contain any record in notification settings table
- # It should be treated with a :participating notification_level
- @u_lazy_participant = create(:user, username: 'lazy-participant')
+ @u_watcher = create(:user, notification_level: :watch)
+ @u_participating = create(:user, notification_level: :participating)
+ @u_participant_mentioned = create(:user, username: 'participant', notification_level: :participating)
+ @u_disabled = create(:user, notification_level: :disabled)
+ @u_mentioned = create(:user, username: 'mention', notification_level: :mention)
+ @u_committer = create(:user, username: 'committer')
+ @u_not_mentioned = create(:user, username: 'regular', notification_level: :participating)
+ @u_outsider_mentioned = create(:user, username: 'outsider')
create_guest_watcher
@@ -944,15 +665,6 @@ describe NotificationService, services: true do
project.team << [@u_mentioned, :master]
project.team << [@u_committer, :master]
project.team << [@u_not_mentioned, :master]
- project.team << [@u_lazy_participant, :master]
- end
-
- def create_global_setting_for(user, level)
- setting = user.global_notification_setting
- setting.level = level
- setting.save
-
- user
end
def create_guest_watcher
@@ -965,8 +677,8 @@ describe NotificationService, services: true do
def add_users_with_subscription(project, issuable)
@subscriber = create :user
@unsubscriber = create :user
- @subscribed_participant = create_global_setting_for(create(:user, username: 'subscribed_participant'), :participating)
- @watcher_and_subscriber = create_global_setting_for(create(:user), :watch)
+ @subscribed_participant = create(:user, username: 'subscribed_participant', notification_level: :participating)
+ @watcher_and_subscriber = create(:user, notification_level: :watch)
project.team << [@subscribed_participant, :master]
project.team << [@subscriber, :master]
diff --git a/spec/services/projects/autocomplete_service_spec.rb b/spec/services/projects/autocomplete_service_spec.rb
index 0971fec2e9f..6108c26a78b 100644
--- a/spec/services/projects/autocomplete_service_spec.rb
+++ b/spec/services/projects/autocomplete_service_spec.rb
@@ -33,18 +33,6 @@ describe Projects::AutocompleteService, services: true do
expect(issues.count).to eq 1
end
- it 'should not list project confidential issues for project members with guest role' do
- project.team << [member, :guest]
-
- autocomplete = described_class.new(project, non_member)
- issues = autocomplete.issues.map(&:iid)
-
- expect(issues).to include issue.iid
- expect(issues).not_to include security_issue_1.iid
- expect(issues).not_to include security_issue_2.iid
- expect(issues.count).to eq 1
- end
-
it 'should list project confidential issues for author' do
autocomplete = described_class.new(project, author)
issues = autocomplete.issues.map(&:iid)
diff --git a/spec/services/todo_service_spec.rb b/spec/services/todo_service_spec.rb
index 26f09cdbaf9..489c920f19f 100644
--- a/spec/services/todo_service_spec.rb
+++ b/spec/services/todo_service_spec.rb
@@ -5,15 +5,13 @@ describe TodoService, services: true do
let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
- let(:guest) { create(:user) }
let(:admin) { create(:admin) }
let(:john_doe) { create(:user) }
let(:project) { create(:project) }
- let(:mentions) { [author, assignee, john_doe, member, guest, non_member, admin].map(&:to_reference).join(' ') }
+ let(:mentions) { [author, assignee, john_doe, member, non_member, admin].map(&:to_reference).join(' ') }
let(:service) { described_class.new }
before do
- project.team << [guest, :guest]
project.team << [author, :developer]
project.team << [member, :developer]
project.team << [john_doe, :developer]
@@ -43,20 +41,18 @@ describe TodoService, services: true do
service.new_issue(issue, author)
should_create_todo(user: member, target: issue, action: Todo::MENTIONED)
- should_create_todo(user: guest, target: issue, action: Todo::MENTIONED)
should_not_create_todo(user: author, target: issue, action: Todo::MENTIONED)
should_not_create_todo(user: john_doe, target: issue, action: Todo::MENTIONED)
should_not_create_todo(user: non_member, target: issue, action: Todo::MENTIONED)
end
- it 'does not create todo if user can not see the issue when issue is confidential' do
+ it 'does not create todo for non project members when issue is confidential' do
service.new_issue(confidential_issue, john_doe)
should_create_todo(user: assignee, target: confidential_issue, author: john_doe, action: Todo::ASSIGNED)
should_create_todo(user: author, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_create_todo(user: member, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_create_todo(user: admin, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
- should_not_create_todo(user: guest, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_not_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
end
@@ -85,7 +81,6 @@ describe TodoService, services: true do
service.update_issue(issue, author)
should_create_todo(user: member, target: issue, action: Todo::MENTIONED)
- should_create_todo(user: guest, target: issue, action: Todo::MENTIONED)
should_create_todo(user: john_doe, target: issue, action: Todo::MENTIONED)
should_not_create_todo(user: author, target: issue, action: Todo::MENTIONED)
should_not_create_todo(user: non_member, target: issue, action: Todo::MENTIONED)
@@ -97,14 +92,13 @@ describe TodoService, services: true do
expect { service.update_issue(issue, author) }.not_to change(member.todos, :count)
end
- it 'does not create todo if user can not see the issue when issue is confidential' do
+ it 'does not create todo for non project members when issue is confidential' do
service.update_issue(confidential_issue, john_doe)
should_create_todo(user: author, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_create_todo(user: assignee, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_create_todo(user: member, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_create_todo(user: admin, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
- should_not_create_todo(user: guest, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_not_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
end
@@ -198,20 +192,18 @@ describe TodoService, services: true do
service.new_note(note, john_doe)
should_create_todo(user: member, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
- should_create_todo(user: guest, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
should_create_todo(user: author, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
should_not_create_todo(user: john_doe, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
should_not_create_todo(user: non_member, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
end
- it 'does not create todo if user can not see the issue when leaving a note on a confidential issue' do
+ it 'does not create todo for non project members when leaving a note on a confidential issue' do
service.new_note(note_on_confidential_issue, john_doe)
should_create_todo(user: author, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
should_create_todo(user: assignee, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
should_create_todo(user: member, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
should_create_todo(user: admin, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
- should_not_create_todo(user: guest, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
should_not_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
end
@@ -228,14 +220,6 @@ describe TodoService, services: true do
should_not_create_any_todo { service.new_note(note_on_project_snippet, john_doe) }
end
end
-
- describe '#mark_todo' do
- it 'creates a todo from a issue' do
- service.mark_todo(unassigned_issue, author)
-
- should_create_todo(user: author, target: unassigned_issue, action: Todo::MARKED)
- end
- end
end
describe 'Merge Requests' do
@@ -261,7 +245,6 @@ describe TodoService, services: true do
service.new_merge_request(mr_assigned, author)
should_create_todo(user: member, target: mr_assigned, action: Todo::MENTIONED)
- should_create_todo(user: guest, target: mr_assigned, action: Todo::MENTIONED)
should_not_create_todo(user: author, target: mr_assigned, action: Todo::MENTIONED)
should_not_create_todo(user: john_doe, target: mr_assigned, action: Todo::MENTIONED)
should_not_create_todo(user: non_member, target: mr_assigned, action: Todo::MENTIONED)
@@ -273,7 +256,6 @@ describe TodoService, services: true do
service.update_merge_request(mr_assigned, author)
should_create_todo(user: member, target: mr_assigned, action: Todo::MENTIONED)
- should_create_todo(user: guest, target: mr_assigned, action: Todo::MENTIONED)
should_create_todo(user: john_doe, target: mr_assigned, action: Todo::MENTIONED)
should_not_create_todo(user: author, target: mr_assigned, action: Todo::MENTIONED)
should_not_create_todo(user: non_member, target: mr_assigned, action: Todo::MENTIONED)
@@ -369,14 +351,6 @@ describe TodoService, services: true do
expect(second_todo.reload).not_to be_done
end
end
-
- describe '#mark_todo' do
- it 'creates a todo from a merge request' do
- service.mark_todo(mr_unassigned, author)
-
- should_create_todo(user: author, target: mr_unassigned, action: Todo::MARKED)
- end
- end
end
def should_create_todo(attributes = {})
diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb
index 498bd4bf800..71664bb192e 100644
--- a/spec/support/test_env.rb
+++ b/spec/support/test_env.rb
@@ -16,7 +16,6 @@ module TestEnv
'master' => '5937ac0',
"'test'" => 'e56497b',
'orphaned-branch' => '45127a9',
- 'binary-encoding' => '7b1cf43',
}
# gitlab-test-fork is a fork of gitlab-fork, but we don't necessarily
diff --git a/spec/workers/expire_build_artifacts_worker_spec.rb b/spec/workers/expire_build_artifacts_worker_spec.rb
deleted file mode 100644
index e3827cae9a6..00000000000
--- a/spec/workers/expire_build_artifacts_worker_spec.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-require 'spec_helper'
-
-describe ExpireBuildArtifactsWorker do
- include RepoHelpers
-
- let(:worker) { described_class.new }
-
- describe '#perform' do
- before { build }
-
- subject! { worker.perform }
-
- context 'with expired artifacts' do
- let(:build) { create(:ci_build, :artifacts, artifacts_expire_at: Time.now - 7.days) }
-
- it 'does expire' do
- expect(build.reload.artifacts_expired?).to be_truthy
- end
-
- it 'does remove files' do
- expect(build.reload.artifacts_file.exists?).to be_falsey
- end
- end
-
- context 'with not yet expired artifacts' do
- let(:build) { create(:ci_build, :artifacts, artifacts_expire_at: Time.now + 7.days) }
-
- it 'does not expire' do
- expect(build.reload.artifacts_expired?).to be_falsey
- end
-
- it 'does not remove files' do
- expect(build.reload.artifacts_file.exists?).to be_truthy
- end
- end
-
- context 'without expire date' do
- let(:build) { create(:ci_build, :artifacts) }
-
- it 'does not expire' do
- expect(build.reload.artifacts_expired?).to be_falsey
- end
-
- it 'does not remove files' do
- expect(build.reload.artifacts_file.exists?).to be_truthy
- end
- end
-
- context 'for expired artifacts' do
- let(:build) { create(:ci_build, artifacts_expire_at: Time.now - 7.days) }
-
- it 'is still expired' do
- expect(build.reload.artifacts_expired?).to be_truthy
- end
- end
- end
-end
diff --git a/spec/workers/stuck_ci_builds_worker_spec.rb b/spec/workers/stuck_ci_builds_worker_spec.rb
index 801fa31b45d..665ec20f224 100644
--- a/spec/workers/stuck_ci_builds_worker_spec.rb
+++ b/spec/workers/stuck_ci_builds_worker_spec.rb
@@ -2,7 +2,6 @@ require "spec_helper"
describe StuckCiBuildsWorker do
let!(:build) { create :ci_build }
- let(:worker) { described_class.new }
subject do
build.reload
@@ -17,13 +16,13 @@ describe StuckCiBuildsWorker do
it 'gets dropped if it was updated over 2 days ago' do
build.update!(updated_at: 2.days.ago)
- worker.perform
+ StuckCiBuildsWorker.new.perform
is_expected.to eq('failed')
end
it "is still #{status}" do
build.update!(updated_at: 1.minute.ago)
- worker.perform
+ StuckCiBuildsWorker.new.perform
is_expected.to eq(status)
end
end
@@ -37,21 +36,9 @@ describe StuckCiBuildsWorker do
it "is still #{status}" do
build.update!(updated_at: 2.days.ago)
- worker.perform
+ StuckCiBuildsWorker.new.perform
is_expected.to eq(status)
end
end
end
-
- context "for deleted project" do
- before do
- build.update!(status: :running, updated_at: 2.days.ago)
- build.project.update(pending_delete: true)
- end
-
- it "does not drop build" do
- expect_any_instance_of(Ci::Build).not_to receive(:drop)
- worker.perform
- end
- end
end