diff options
Diffstat (limited to 'spec/features')
24 files changed, 0 insertions, 2349 deletions
diff --git a/spec/features/admin/admin_hooks_spec.rb b/spec/features/admin/admin_hooks_spec.rb deleted file mode 100644 index 25862614d28..00000000000 --- a/spec/features/admin/admin_hooks_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -require 'spec_helper' - -describe "Admin::Hooks", feature: true do - before do - @project = create(:project) - login_as :admin - - @system_hook = create(:system_hook) - - end - - describe "GET /admin/hooks" do - it "should be ok" do - visit admin_root_path - within ".sidebar-wrapper" do - click_on "Hooks" - end - expect(current_path).to eq(admin_hooks_path) - end - - it "should have hooks list" do - visit admin_hooks_path - expect(page).to have_content(@system_hook.url) - end - end - - describe "New Hook" do - before do - @url = Faker::Internet.uri("http") - visit admin_hooks_path - fill_in "hook_url", with: @url - expect { click_button "Add System Hook" }.to change(SystemHook, :count).by(1) - end - - it "should open new hook popup" do - expect(current_path).to eq(admin_hooks_path) - expect(page).to have_content(@url) - end - end - - describe "Test" do - before do - WebMock.stub_request(:post, @system_hook.url) - visit admin_hooks_path - click_link "Test Hook" - end - - it { expect(current_path).to eq(admin_hooks_path) } - end - -end diff --git a/spec/features/admin/admin_projects_spec.rb b/spec/features/admin/admin_projects_spec.rb deleted file mode 100644 index 101d955d693..00000000000 --- a/spec/features/admin/admin_projects_spec.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'spec_helper' - -describe "Admin::Projects", feature: true do - before do - @project = create(:project) - login_as :admin - end - - describe "GET /admin/projects" do - before do - visit admin_namespaces_projects_path - end - - it "should be ok" do - expect(current_path).to eq(admin_namespaces_projects_path) - end - - it "should have projects list" do - expect(page).to have_content(@project.name) - end - end - - describe "GET /admin/projects/:id" do - before do - visit admin_namespaces_projects_path - click_link "#{@project.name}" - end - - it "should have project info" do - expect(page).to have_content(@project.path) - expect(page).to have_content(@project.name) - end - end -end diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb deleted file mode 100644 index f97b69713ce..00000000000 --- a/spec/features/admin/admin_users_spec.rb +++ /dev/null @@ -1,109 +0,0 @@ -require 'spec_helper' - -describe "Admin::Users", feature: true do - before { login_as :admin } - - describe "GET /admin/users" do - before do - visit admin_users_path - end - - it "should be ok" do - expect(current_path).to eq(admin_users_path) - end - - it "should have users list" do - expect(page).to have_content(@user.email) - expect(page).to have_content(@user.name) - end - end - - describe "GET /admin/users/new" do - before do - visit new_admin_user_path - fill_in "user_name", with: "Big Bang" - fill_in "user_username", with: "bang" - fill_in "user_email", with: "bigbang@mail.com" - end - - it "should create new user" do - expect { click_button "Create user" }.to change {User.count}.by(1) - end - - it "should apply defaults to user" do - click_button "Create user" - user = User.find_by(username: 'bang') - expect(user.projects_limit). - to eq(Gitlab.config.gitlab.default_projects_limit) - expect(user.can_create_group). - to eq(Gitlab.config.gitlab.default_can_create_group) - end - - it "should create user with valid data" do - click_button "Create user" - user = User.find_by(username: 'bang') - expect(user.name).to eq('Big Bang') - expect(user.email).to eq('bigbang@mail.com') - end - - it "should call send mail" do - expect(Notify).to receive(:new_user_email) - - click_button "Create user" - end - - it "should send valid email to user with email & password" do - click_button "Create user" - user = User.find_by(username: 'bang') - email = ActionMailer::Base.deliveries.last - expect(email.subject).to have_content('Account was created') - expect(email.text_part.body).to have_content(user.email) - expect(email.text_part.body).to have_content('password') - end - end - - describe "GET /admin/users/:id" do - before do - visit admin_users_path - click_link "#{@user.name}" - end - - it "should have user info" do - expect(page).to have_content(@user.email) - expect(page).to have_content(@user.name) - end - end - - describe "GET /admin/users/:id/edit" do - before do - @simple_user = create(:user) - visit admin_users_path - click_link "edit_user_#{@simple_user.id}" - end - - it "should have user edit page" do - expect(page).to have_content('Name') - expect(page).to have_content('Password') - end - - describe "Update user" do - before do - fill_in "user_name", with: "Big Bang" - fill_in "user_email", with: "bigbang@mail.com" - check "user_admin" - click_button "Save changes" - end - - it "should show page with new data" do - expect(page).to have_content('bigbang@mail.com') - expect(page).to have_content('Big Bang') - end - - it "should change user entry" do - @simple_user.reload - expect(@simple_user.name).to eq('Big Bang') - expect(@simple_user.is_admin?).to be_truthy - end - end - end -end diff --git a/spec/features/admin/security_spec.rb b/spec/features/admin/security_spec.rb deleted file mode 100644 index 175fa9d4647..00000000000 --- a/spec/features/admin/security_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'spec_helper' - -describe "Admin::Projects", feature: true do - describe "GET /admin/projects" do - subject { admin_namespaces_projects_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /admin/users" do - subject { admin_users_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /admin/hooks" do - subject { admin_hooks_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end -end diff --git a/spec/features/atom/dashboard_issues_spec.rb b/spec/features/atom/dashboard_issues_spec.rb deleted file mode 100644 index b710cb3c72f..00000000000 --- a/spec/features/atom/dashboard_issues_spec.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'spec_helper' - -describe "Dashboard Issues Feed", feature: true do - describe "GET /issues" 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] - project2.team << [user, :master] - end - - describe "atom feed" 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(body).to have_selector('title', text: "#{user.name} issues") - 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 -end diff --git a/spec/features/atom/dashboard_spec.rb b/spec/features/atom/dashboard_spec.rb deleted file mode 100644 index ad157d742ff..00000000000 --- a/spec/features/atom/dashboard_spec.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'spec_helper' - -describe "Dashboard Feed", feature: true do - describe "GET /" do - let!(:user) { create(:user, name: "Jonh") } - - context "projects atom feed via private token" do - it "should render projects atom feed" do - visit dashboard_path(:atom, private_token: user.private_token) - expect(body).to have_selector('feed title') - end - end - - context 'feed content' do - let(:project) { create(:project) } - let(:issue) { create(:issue, project: project, author: user, description: '') } - let(:note) { create(:note, noteable: issue, author: user, note: 'Bug confirmed', project: project) } - - before do - project.team << [user, :master] - issue_event(issue, user) - note_event(note, user) - visit dashboard_path(:atom, private_token: user.private_token) - end - - it "should have issue opened event" do - expect(body).to have_content("#{user.name} opened issue ##{issue.iid}") - end - - it "should have issue comment event" do - expect(body). - to have_content("#{user.name} commented on issue ##{issue.iid}") - end - end - end - - def issue_event(issue, user) - EventCreateService.new.open_issue(issue, user) - end - - def note_event(note, user) - EventCreateService.new.leave_note(note, user) - end -end diff --git a/spec/features/atom/issues_spec.rb b/spec/features/atom/issues_spec.rb deleted file mode 100644 index baa7814e96a..00000000000 --- a/spec/features/atom/issues_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'spec_helper' - -describe 'Issues Feed', feature: true do - describe 'GET /issues' do - let!(:user) { create(:user) } - let!(:project) { create(:project) } - let!(:issue) { create(:issue, author: user, project: project) } - - before { project.team << [user, :developer] } - - context 'when authenticated' do - it 'should render atom feed' do - login_with user - visit namespace_project_issues_path(project.namespace, project, :atom) - - expect(response_headers['Content-Type']). - to have_content('application/atom+xml') - expect(body).to have_selector('title', text: "#{project.name} issues") - expect(body).to have_selector('author email', text: issue.author_email) - expect(body).to have_selector('entry summary', text: issue.title) - end - end - - context 'when authenticated via private token' do - it 'should render atom feed' do - visit namespace_project_issues_path(project.namespace, project, :atom, - private_token: user.private_token) - - expect(response_headers['Content-Type']). - to have_content('application/atom+xml') - expect(body).to have_selector('title', text: "#{project.name} issues") - expect(body).to have_selector('author email', text: issue.author_email) - expect(body).to have_selector('entry summary', text: issue.title) - end - end - end -end diff --git a/spec/features/atom/users_spec.rb b/spec/features/atom/users_spec.rb deleted file mode 100644 index 770ac04c2c5..00000000000 --- a/spec/features/atom/users_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -require 'spec_helper' - -describe "User Feed", feature: true do - describe "GET /" do - let!(:user) { create(:user) } - - context 'user atom feed via private token' do - it "should render user atom feed" do - visit user_path(user, :atom, private_token: user.private_token) - expect(body).to have_selector('feed title') - end - end - - context 'feed content' do - let(:project) { create(:project) } - let(:issue) do - create(:issue, project: project, - author: user, description: "Houston, we have a bug!\n\n***\n\nI guess.") - end - let(:note) do - create(:note, noteable: issue, author: user, - note: 'Bug confirmed :+1:', project: project) - end - let(:merge_request) do - create(:merge_request, - title: 'Fix bug', author: user, - source_project: project, target_project: project, - description: "Here is the fix: ![an image](image.png)") - end - - before do - project.team << [user, :master] - issue_event(issue, user) - note_event(note, user) - merge_request_event(merge_request, user) - visit user_path(user, :atom, private_token: user.private_token) - end - - it 'should have issue opened event' do - expect(body).to have_content("#{safe_name} opened issue ##{issue.iid}") - end - - it 'should have issue comment event' do - expect(body). - to have_content("#{safe_name} commented on issue ##{issue.iid}") - end - - it 'should have XHTML summaries in issue descriptions' do - expect(body).to match /we have a bug!<\/p>\n\n<hr ?\/>\n\n<p>I guess/ - end - - it 'should have XHTML summaries in notes' do - expect(body).to match /Bug confirmed <img[^>]*\/>/ - end - - it 'should have XHTML summaries in merge request descriptions' do - expect(body).to match /Here is the fix: <img[^>]*\/>/ - end - end - end - - def issue_event(issue, user) - EventCreateService.new.open_issue(issue, user) - end - - def note_event(note, user) - EventCreateService.new.leave_note(note, user) - end - - def merge_request_event(request, user) - EventCreateService.new.open_mr(request, user) - end - - def safe_name - html_escape(user.name) - end -end diff --git a/spec/features/gitlab_flavored_markdown_spec.rb b/spec/features/gitlab_flavored_markdown_spec.rb deleted file mode 100644 index fca1a06eb88..00000000000 --- a/spec/features/gitlab_flavored_markdown_spec.rb +++ /dev/null @@ -1,129 +0,0 @@ -require 'spec_helper' - -describe "GitLab Flavored Markdown", feature: true do - let(:project) { create(:project) } - let(:issue) { create(:issue, project: project) } - let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } - let(:fred) do - u = create(:user, name: "fred") - project.team << [u, :master] - u - end - - before do - Commit.any_instance.stub(title: "fix ##{issue.iid}\n\nask @#{fred.username} for details") - end - - let(:commit) { project.repository.commit } - - before do - login_as :user - project.team << [@user, :developer] - end - - describe "for commits" do - it "should render title in commits#index" do - visit namespace_project_commits_path(project.namespace, project, 'master', limit: 1) - - expect(page).to have_link("##{issue.iid}") - end - - it "should render title in commits#show" do - visit namespace_project_commit_path(project.namespace, project, commit) - - expect(page).to have_link("##{issue.iid}") - end - - it "should render description in commits#show" do - visit namespace_project_commit_path(project.namespace, project, commit) - - expect(page).to have_link("@#{fred.username}") - end - - it "should render title in repositories#branches" do - visit namespace_project_branches_path(project.namespace, project) - - expect(page).to have_link("##{issue.iid}") - end - end - - describe "for issues" do - before do - @other_issue = create(:issue, - author: @user, - assignee: @user, - project: project) - @issue = create(:issue, - author: @user, - assignee: @user, - project: project, - title: "fix ##{@other_issue.iid}", - description: "ask @#{fred.username} for details") - end - - it "should render subject in issues#index" do - visit namespace_project_issues_path(project.namespace, project) - - expect(page).to have_link("##{@other_issue.iid}") - end - - it "should render subject in issues#show" do - visit namespace_project_issue_path(project.namespace, project, @issue) - - expect(page).to have_link("##{@other_issue.iid}") - end - - it "should render details in issues#show" do - visit namespace_project_issue_path(project.namespace, project, @issue) - - expect(page).to have_link("@#{fred.username}") - end - end - - - describe "for merge requests" do - before do - @merge_request = create(:merge_request, source_project: project, target_project: project, title: "fix ##{issue.iid}") - end - - it "should render title in merge_requests#index" do - visit namespace_project_merge_requests_path(project.namespace, project) - - expect(page).to have_link("##{issue.iid}") - end - - it "should render title in merge_requests#show" do - visit namespace_project_merge_request_path(project.namespace, project, @merge_request) - - expect(page).to have_link("##{issue.iid}") - end - end - - - describe "for milestones" do - before do - @milestone = create(:milestone, - project: project, - title: "fix ##{issue.iid}", - description: "ask @#{fred.username} for details") - end - - it "should render title in milestones#index" do - visit namespace_project_milestones_path(project.namespace, project) - - expect(page).to have_link("##{issue.iid}") - end - - it "should render title in milestones#show" do - visit namespace_project_milestone_path(project.namespace, project, @milestone) - - expect(page).to have_link("##{issue.iid}") - end - - it "should render description in milestones#show" do - visit namespace_project_milestone_path(project.namespace, project, @milestone) - - expect(page).to have_link("@#{fred.username}") - end - end -end diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb deleted file mode 100644 index e5f33d5a25a..00000000000 --- a/spec/features/issues_spec.rb +++ /dev/null @@ -1,320 +0,0 @@ -require 'spec_helper' - -describe 'Issues', feature: true do - include SortingHelper - - let(:project) { create(:project) } - - before do - login_as :user - user2 = create(:user) - - project.team << [[@user, user2], :developer] - end - - describe 'Edit issue' do - let!(:issue) do - create(:issue, - author: @user, - assignee: @user, - project: project) - end - - before do - visit namespace_project_issues_path(project.namespace, project) - click_link "Edit" - end - - it 'should open new issue popup' do - expect(page).to have_content("Issue ##{issue.iid}") - end - - describe 'fill in' do - before do - fill_in 'issue_title', with: 'bug 345' - fill_in 'issue_description', with: 'bug description' - end - - it 'does not change issue count' do - expect { - click_button 'Save changes' - }.to_not change { Issue.count } - end - - it 'should update issue fields' do - click_button 'Save changes' - - expect(page).to have_content @user.name - expect(page).to have_content 'bug 345' - expect(page).to have_content project.name - end - end - - end - - describe 'Editing issue assignee' do - let!(:issue) do - create(:issue, - author: @user, - assignee: @user, - project: project) - end - - it 'allows user to select unasigned', js: true do - visit edit_namespace_project_issue_path(project.namespace, project, issue) - - expect(page).to have_content "Assign to #{@user.name}" - - first('#s2id_issue_assignee_id').click - sleep 2 # wait for ajax stuff to complete - first('.user-result').click - - click_button 'Save changes' - - expect(page).to have_content 'Assignee: none' - expect(issue.reload.assignee).to be_nil - end - end - - describe 'Filter issue' do - before do - ['foobar', 'barbaz', 'gitlab'].each do |title| - create(:issue, - author: @user, - assignee: @user, - project: project, - title: title) - end - - @issue = Issue.find_by(title: 'foobar') - @issue.milestone = create(:milestone, project: project) - @issue.assignee = nil - @issue.save - end - - let(:issue) { @issue } - - it 'should allow filtering by issues with no specified milestone' do - visit namespace_project_issues_path(project.namespace, project, milestone_id: IssuableFinder::NONE) - - expect(page).not_to have_content 'foobar' - expect(page).to have_content 'barbaz' - expect(page).to have_content 'gitlab' - end - - it 'should allow filtering by a specified milestone' do - visit namespace_project_issues_path(project.namespace, project, milestone_id: issue.milestone.id) - - expect(page).to have_content 'foobar' - expect(page).not_to have_content 'barbaz' - expect(page).not_to have_content 'gitlab' - end - - it 'should allow filtering by issues with no specified assignee' do - visit namespace_project_issues_path(project.namespace, project, assignee_id: IssuableFinder::NONE) - - expect(page).to have_content 'foobar' - expect(page).not_to have_content 'barbaz' - expect(page).not_to have_content 'gitlab' - end - - it 'should allow filtering by a specified assignee' do - visit namespace_project_issues_path(project.namespace, project, assignee_id: @user.id) - - expect(page).not_to have_content 'foobar' - expect(page).to have_content 'barbaz' - expect(page).to have_content 'gitlab' - end - end - - describe 'filter issue' do - titles = ['foo','bar','baz'] - titles.each_with_index do |title, index| - let!(title.to_sym) do - create(:issue, title: title, - project: project, - created_at: Time.now - (index * 60)) - end - end - let(:newer_due_milestone) { create(:milestone, due_date: '2013-12-11') } - let(:later_due_milestone) { create(:milestone, due_date: '2013-12-12') } - - it 'sorts by newest' do - visit namespace_project_issues_path(project.namespace, project, sort: sort_value_recently_created) - - expect(first_issue).to include('foo') - expect(last_issue).to include('baz') - end - - it 'sorts by oldest' do - visit namespace_project_issues_path(project.namespace, project, sort: sort_value_oldest_created) - - expect(first_issue).to include('baz') - expect(last_issue).to include('foo') - end - - it 'sorts by most recently updated' do - baz.updated_at = Time.now + 100 - baz.save - visit namespace_project_issues_path(project.namespace, project, sort: sort_value_recently_updated) - - expect(first_issue).to include('baz') - end - - it 'sorts by least recently updated' do - baz.updated_at = Time.now - 100 - baz.save - visit namespace_project_issues_path(project.namespace, project, sort: sort_value_oldest_updated) - - expect(first_issue).to include('baz') - end - - describe 'sorting by milestone' do - before :each do - foo.milestone = newer_due_milestone - foo.save - bar.milestone = later_due_milestone - bar.save - end - - it 'sorts by recently due milestone' do - visit namespace_project_issues_path(project.namespace, project, sort: sort_value_milestone_soon) - - expect(first_issue).to include('foo') - end - - it 'sorts by least recently due milestone' do - visit namespace_project_issues_path(project.namespace, project, sort: sort_value_milestone_later) - - expect(first_issue).to include('bar') - end - end - - describe 'combine filter and sort' do - let(:user2) { create(:user) } - - before :each do - foo.assignee = user2 - foo.save - bar.assignee = user2 - bar.save - end - - it 'sorts with a filter applied' do - visit namespace_project_issues_path(project.namespace, project, - sort: sort_value_oldest_created, - assignee_id: user2.id) - - expect(first_issue).to include('bar') - expect(last_issue).to include('foo') - expect(page).not_to have_content 'baz' - end - end - end - - describe 'update assignee from issue#show' do - let(:issue) { create(:issue, project: project, author: @user) } - - context 'by autorized user' do - - it 'with dropdown menu' do - visit namespace_project_issue_path(project.namespace, project, issue) - - find('.edit-issue.inline-update #issue_assignee_id'). - set project.team.members.first.id - click_button 'Update Issue' - - expect(page).to have_content 'Assignee:' - has_select?('issue_assignee_id', - selected: project.team.members.first.name) - end - end - - context 'by unauthorized user' do - - let(:guest) { create(:user) } - - before :each do - project.team << [[guest], :guest] - issue.assignee = @user - issue.save - end - - it 'shows assignee text', js: true do - logout - login_with guest - - visit namespace_project_issue_path(project.namespace, project, issue) - expect(page).to have_content issue.assignee.name - end - end - end - - describe 'update milestone from issue#show' do - let!(:issue) { create(:issue, project: project, author: @user) } - let!(:milestone) { create(:milestone, project: project) } - - context 'by authorized user' do - - it 'with dropdown menu' do - visit namespace_project_issue_path(project.namespace, project, issue) - - find('.edit-issue.inline-update'). - select(milestone.title, from: 'issue_milestone_id') - click_button 'Update Issue' - - expect(page).to have_content "Milestone changed to #{milestone.title}" - expect(page).to have_content "Milestone: #{milestone.title}" - has_select?('issue_assignee_id', selected: milestone.title) - end - end - - context 'by unauthorized user' do - let(:guest) { create(:user) } - - before :each do - project.team << [guest, :guest] - issue.milestone = milestone - issue.save - end - - it 'shows milestone text', js: true do - logout - login_with guest - - visit namespace_project_issue_path(project.namespace, project, issue) - expect(page).to have_content milestone.title - end - end - - describe 'removing assignee' do - let(:user2) { create(:user) } - - before :each do - issue.assignee = user2 - issue.save - end - - it 'allows user to remove assignee', :js => true do - visit namespace_project_issue_path(project.namespace, project, issue) - expect(page).to have_content "Assignee: #{user2.name}" - - first('#s2id_issue_assignee_id').click - sleep 2 # wait for ajax stuff to complete - first('.user-result').click - - expect(page).to have_content 'Assignee: none' - sleep 2 # wait for ajax stuff to complete - expect(issue.reload.assignee).to be_nil - end - end - end - - def first_issue - all('ul.issues-list li').first.text - end - - def last_issue - all('ul.issues-list li').last.text - end -end diff --git a/spec/features/notes_on_merge_requests_spec.rb b/spec/features/notes_on_merge_requests_spec.rb deleted file mode 100644 index c47368b1fda..00000000000 --- a/spec/features/notes_on_merge_requests_spec.rb +++ /dev/null @@ -1,230 +0,0 @@ -require 'spec_helper' - -describe 'Comments' do - include RepoHelpers - - describe 'On a merge request', js: true, feature: true do - let!(:merge_request) { create(:merge_request) } - let!(:project) { merge_request.source_project } - let!(:note) do - create(:note_on_merge_request, :with_attachment, project: project) - end - - before do - login_as :admin - visit namespace_project_merge_request_path(project.namespace, project, merge_request) - end - - subject { page } - - describe 'the note form' do - it 'should be valid' do - is_expected.to have_css('.js-main-target-form', visible: true, count: 1) - expect(find('.js-main-target-form input[type=submit]').value). - to eq('Add Comment') - within('.js-main-target-form') do - expect(page).not_to have_link('Cancel') - end - end - - describe 'with text' do - before do - within('.js-main-target-form') do - fill_in 'note[note]', with: 'This is awesome' - end - end - - it 'should have enable submit button and preview button' do - within('.js-main-target-form') do - expect(page).not_to have_css('.js-comment-button[disabled]') - expect(page).to have_css('.js-md-preview-button', visible: true) - end - end - end - end - - describe 'when posting a note' do - before do - within('.js-main-target-form') do - fill_in 'note[note]', with: 'This is awsome!' - find('.js-md-preview-button').click - click_button 'Add Comment' - end - end - - it 'should be added and form reset' do - is_expected.to have_content('This is awsome!') - within('.js-main-target-form') do - expect(page).to have_no_field('note[note]', with: 'This is awesome!') - expect(page).to have_css('.js-md-preview', visible: :hidden) - end - within('.js-main-target-form') do - is_expected.to have_css('.js-note-text', visible: true) - end - end - end - - describe 'when editing a note', js: true do - it 'should contain the hidden edit form' do - within("#note_#{note.id}") do - is_expected.to have_css('.note-edit-form', visible: false) - end - end - - describe 'editing the note' do - before do - find('.note').hover - find(".js-note-edit").click - end - - it 'should show the note edit form and hide the note body' do - within("#note_#{note.id}") do - expect(find('.current-note-edit-form', visible: true)).to be_visible - expect(find('.note-edit-form', visible: true)).to be_visible - expect(find(:css, '.note-body > .note-text', visible: false)).not_to be_visible - end - end - - # TODO: fix after 7.7 release - #it "should reset the edit note form textarea with the original content of the note if cancelled" do - #within(".current-note-edit-form") do - #fill_in "note[note]", with: "Some new content" - #find(".btn-cancel").click - #find(".js-note-text", visible: false).text.should == note.note - #end - #end - - it 'appends the edited at time to the note' do - within('.current-note-edit-form') do - fill_in 'note[note]', with: 'Some new content' - find('.btn-save').click - end - - within("#note_#{note.id}") do - is_expected.to have_css('.note_edited_ago') - expect(find('.note_edited_ago').text). - to match(/less than a minute ago/) - end - end - end - - describe 'deleting an attachment' do - before do - find('.note').hover - find('.js-note-edit').click - end - - it 'shows the delete link' do - within('.note-attachment') do - is_expected.to have_css('.js-note-attachment-delete') - end - end - - it 'removes the attachment div and resets the edit form' do - find('.js-note-attachment-delete').click - is_expected.not_to have_css('.note-attachment') - expect(find('.current-note-edit-form', visible: false)). - not_to be_visible - end - end - end - end - - describe 'On a merge request diff', js: true, feature: true do - let(:merge_request) { create(:merge_request) } - let(:project) { merge_request.source_project } - - before do - login_as :admin - visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request) - end - - subject { page } - - describe 'when adding a note' do - before do - click_diff_line - end - - describe 'the notes holder' do - it { is_expected.to have_css('.js-temp-notes-holder') } - - it 'has .new_note css class' do - within('.js-temp-notes-holder') do - expect(subject).to have_css('.new_note') - end - end - end - - describe 'the note form' do - it "shouldn't add a second form for same row" do - click_diff_line - - is_expected. - to have_css("tr[id='#{line_code}'] + .js-temp-notes-holder form", - count: 1) - end - - it 'should be removed when canceled' do - within(".diff-file form[rel$='#{line_code}']") do - find('.js-close-discussion-note-form').trigger('click') - end - - is_expected.to have_no_css('.js-temp-notes-holder') - end - end - end - - describe 'with muliple note forms' do - before do - click_diff_line - click_diff_line(line_code_2) - end - - it { is_expected.to have_css('.js-temp-notes-holder', count: 2) } - - describe 'previewing them separately' do - before do - # add two separate texts and trigger previews on both - within("tr[id='#{line_code}'] + .js-temp-notes-holder") do - fill_in 'note[note]', with: 'One comment on line 7' - find('.js-md-preview-button').click - end - within("tr[id='#{line_code_2}'] + .js-temp-notes-holder") do - fill_in 'note[note]', with: 'Another comment on line 10' - find('.js-md-preview-button').click - end - end - end - - describe 'posting a note' do - before do - within("tr[id='#{line_code_2}'] + .js-temp-notes-holder") do - fill_in 'note[note]', with: 'Another comment on line 10' - click_button('Add Comment') - end - end - - it 'should be added as discussion' do - is_expected.to have_content('Another comment on line 10') - is_expected.to have_css('.notes_holder') - is_expected.to have_css('.notes_holder .note', count: 1) - is_expected.to have_button('Reply') - end - end - end - end - - def line_code - sample_compare.changes.first[:line_code] - end - - def line_code_2 - sample_compare.changes.last[:line_code] - end - - def click_diff_line(data = nil) - data ||= line_code - find("button[data-line-code=\"#{data}\"]").click - end -end diff --git a/spec/features/profile_spec.rb b/spec/features/profile_spec.rb deleted file mode 100644 index 3d36a3c02d0..00000000000 --- a/spec/features/profile_spec.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'spec_helper' - -describe 'Profile account page', feature: true do - let(:user) { create(:user) } - - before do - login_as :user - end - - describe 'when signup is enabled' do - before do - ApplicationSetting.any_instance.stub(signup_enabled?: true) - visit profile_account_path - end - - it { expect(page).to have_content('Remove account') } - - it 'should delete the account' do - expect { click_link 'Delete account' }.to change { User.count }.by(-1) - expect(current_path).to eq(new_user_session_path) - end - end - - describe 'when signup is disabled' do - before do - ApplicationSetting.any_instance.stub(signup_enabled?: false) - visit profile_account_path - end - - it 'should not have option to remove account' do - expect(page).not_to have_content('Remove account') - expect(current_path).to eq(profile_account_path) - end - end -end diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb deleted file mode 100644 index cae11be7cdd..00000000000 --- a/spec/features/projects_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'spec_helper' - -describe "Projects", feature: true, js: true do - before { login_as :user } - - describe "DELETE /projects/:id" do - before do - @project = create(:project, namespace: @user.namespace) - @project.team << [@user, :master] - visit edit_namespace_project_path(@project.namespace, @project) - end - - it "should remove project" do - expect { remove_project }.to change {Project.count}.by(-1) - end - - it 'should delete the project from disk' do - expect(GitlabShellWorker).to( - receive(:perform_async).with(:remove_repository, - /#{@project.path_with_namespace}/) - ).twice - - remove_project - end - end - - def remove_project - click_link "Remove project" - fill_in 'confirm_name_input', with: @project.path - click_button 'Confirm' - end -end diff --git a/spec/features/search_spec.rb b/spec/features/search_spec.rb deleted file mode 100644 index 73987739a7a..00000000000 --- a/spec/features/search_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'spec_helper' - -describe "Search", feature: true do - before do - login_as :user - @project = create(:project, namespace: @user.namespace) - @project.team << [@user, :reporter] - visit search_path - - within '.search-holder' do - fill_in "search", with: @project.name[0..3] - click_button "Search" - end - end - - it "should show project in search results" do - expect(page).to have_content @project.name - end -end - diff --git a/spec/features/security/dashboard_access_spec.rb b/spec/features/security/dashboard_access_spec.rb deleted file mode 100644 index 67238e3ab76..00000000000 --- a/spec/features/security/dashboard_access_spec.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'spec_helper' - -describe "Dashboard access", feature: true do - describe "GET /dashboard" do - subject { dashboard_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /dashboard/issues" do - subject { issues_dashboard_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /dashboard/merge_requests" do - subject { merge_requests_dashboard_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /dashboard/projects/starred" do - subject { starred_dashboard_projects_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /help" do - subject { help_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /projects/new" do - it { expect(new_project_path).to be_allowed_for :admin } - it { expect(new_project_path).to be_allowed_for :user } - it { expect(new_project_path).to be_denied_for :visitor } - end - - describe "GET /groups/new" do - it { expect(new_group_path).to be_allowed_for :admin } - it { expect(new_group_path).to be_allowed_for :user } - it { expect(new_group_path).to be_denied_for :visitor } - end - - describe "GET /profile/groups" do - subject { dashboard_groups_path } - - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end -end diff --git a/spec/features/security/group/group_access_spec.rb b/spec/features/security/group/group_access_spec.rb deleted file mode 100644 index 63793149459..00000000000 --- a/spec/features/security/group/group_access_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -require 'spec_helper' - -describe "Group access", feature: true do - describe "GET /projects/new" do - it { expect(new_group_path).to be_allowed_for :admin } - it { expect(new_group_path).to be_allowed_for :user } - it { expect(new_group_path).to be_denied_for :visitor } - end - - describe "Group" do - let(:group) { create(:group) } - - let(:owner) { create(:owner) } - let(:master) { create(:user) } - let(:reporter) { create(:user) } - let(:guest) { create(:user) } - let(:nonmember) { create(:user) } - - before do - group.add_user(owner, Gitlab::Access::OWNER) - group.add_user(master, Gitlab::Access::MASTER) - group.add_user(reporter, Gitlab::Access::REPORTER) - group.add_user(guest, Gitlab::Access::GUEST) - end - - describe "GET /groups/:path" do - subject { group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/issues" do - subject { issues_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/merge_requests" do - subject { merge_requests_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/group_members" do - subject { group_group_members_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/edit" do - subject { edit_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_denied_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/projects" do - subject { projects_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_denied_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - end -end diff --git a/spec/features/security/group/internal_group_access_spec.rb b/spec/features/security/group/internal_group_access_spec.rb deleted file mode 100644 index d17a7412e43..00000000000 --- a/spec/features/security/group/internal_group_access_spec.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'spec_helper' - -describe "Group with internal project access", feature: true do - describe "Group" do - let(:group) { create(:group) } - - let(:owner) { create(:owner) } - let(:master) { create(:user) } - let(:reporter) { create(:user) } - let(:guest) { create(:user) } - let(:nonmember) { create(:user) } - - before do - group.add_user(owner, Gitlab::Access::OWNER) - group.add_user(master, Gitlab::Access::MASTER) - group.add_user(reporter, Gitlab::Access::REPORTER) - group.add_user(guest, Gitlab::Access::GUEST) - - create(:project, :internal, group: group) - end - - describe "GET /groups/:path" do - subject { group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/issues" do - subject { issues_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/merge_requests" do - subject { merge_requests_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/group_members" do - subject { group_group_members_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /groups/:path/edit" do - subject { edit_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_denied_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - end -end diff --git a/spec/features/security/group/mixed_group_access_spec.rb b/spec/features/security/group/mixed_group_access_spec.rb deleted file mode 100644 index b3db7b5dea4..00000000000 --- a/spec/features/security/group/mixed_group_access_spec.rb +++ /dev/null @@ -1,83 +0,0 @@ -require 'spec_helper' - -describe "Group access", feature: true do - describe "Group" do - let(:group) { create(:group) } - - let(:owner) { create(:owner) } - let(:master) { create(:user) } - let(:reporter) { create(:user) } - let(:guest) { create(:user) } - let(:nonmember) { create(:user) } - - before do - group.add_user(owner, Gitlab::Access::OWNER) - group.add_user(master, Gitlab::Access::MASTER) - group.add_user(reporter, Gitlab::Access::REPORTER) - group.add_user(guest, Gitlab::Access::GUEST) - - create(:project, :internal, path: "internal_project", group: group) - create(:project, :public, path: "public_project", group: group) - end - - describe "GET /groups/:path" do - subject { group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/issues" do - subject { issues_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/merge_requests" do - subject { merge_requests_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/group_members" do - subject { group_group_members_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/edit" do - subject { edit_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_denied_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - end -end diff --git a/spec/features/security/group/public_group_access_spec.rb b/spec/features/security/group/public_group_access_spec.rb deleted file mode 100644 index c16f0c0d1e1..00000000000 --- a/spec/features/security/group/public_group_access_spec.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'spec_helper' - -describe "Group with public project access", feature: true do - describe "Group" do - let(:group) { create(:group) } - - let(:owner) { create(:owner) } - let(:master) { create(:user) } - let(:reporter) { create(:user) } - let(:guest) { create(:user) } - let(:nonmember) { create(:user) } - - before do - group.add_user(owner, Gitlab::Access::OWNER) - group.add_user(master, Gitlab::Access::MASTER) - group.add_user(reporter, Gitlab::Access::REPORTER) - group.add_user(guest, Gitlab::Access::GUEST) - - create(:project, :public, group: group) - end - - describe "GET /groups/:path" do - subject { group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/issues" do - subject { issues_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/merge_requests" do - subject { merge_requests_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/group_members" do - subject { group_group_members_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /groups/:path/edit" do - subject { edit_group_path(group) } - - it { is_expected.to be_allowed_for owner } - it { is_expected.to be_denied_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - end -end diff --git a/spec/features/security/profile_access_spec.rb b/spec/features/security/profile_access_spec.rb deleted file mode 100644 index 2512a9c0e3d..00000000000 --- a/spec/features/security/profile_access_spec.rb +++ /dev/null @@ -1,65 +0,0 @@ -require 'spec_helper' - -describe "Profile access", feature: true do - before do - @u1 = create(:user) - end - - describe "GET /login" do - it { expect(new_user_session_path).not_to be_404_for :visitor } - end - - describe "GET /profile/keys" do - subject { profile_keys_path } - - it { is_expected.to be_allowed_for @u1 } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /profile" do - subject { profile_path } - - it { is_expected.to be_allowed_for @u1 } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /profile/account" do - subject { profile_account_path } - - it { is_expected.to be_allowed_for @u1 } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /profile/design" do - subject { design_profile_path } - - it { is_expected.to be_allowed_for @u1 } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /profile/history" do - subject { history_profile_path } - - it { is_expected.to be_allowed_for @u1 } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /profile/notifications" do - subject { profile_notifications_path } - - it { is_expected.to be_allowed_for @u1 } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end -end diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb deleted file mode 100644 index 8d1bfd25223..00000000000 --- a/spec/features/security/project/internal_access_spec.rb +++ /dev/null @@ -1,227 +0,0 @@ -require 'spec_helper' - -describe "Internal Project Access", feature: true do - let(:project) { create(:project, :internal) } - - let(:master) { create(:user) } - let(:guest) { create(:user) } - let(:reporter) { create(:user) } - - before do - # full access - project.team << [master, :master] - - # readonly - project.team << [reporter, :reporter] - end - - describe "Project should be internal" do - subject { project } - - describe '#internal?' do - subject { super().internal? } - it { is_expected.to be_truthy } - end - end - - describe "GET /:project_path" do - subject { namespace_project_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/tree/master" do - subject { namespace_project_tree_path(project.namespace, project, project.repository.root_ref) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/commits/master" do - subject { namespace_project_commits_path(project.namespace, project, project.repository.root_ref, limit: 1) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/commit/:sha" do - subject { namespace_project_commit_path(project.namespace, project, project.repository.commit) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/compare" do - subject { namespace_project_compare_index_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/project_members" do - subject { namespace_project_project_members_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/blob" do - before do - commit = project.repository.commit - path = '.gitignore' - @blob_path = namespace_project_blob_path(project.namespace, project, File.join(commit.id, path)) - end - - it { expect(@blob_path).to be_allowed_for master } - it { expect(@blob_path).to be_allowed_for reporter } - it { expect(@blob_path).to be_allowed_for :admin } - it { expect(@blob_path).to be_allowed_for guest } - it { expect(@blob_path).to be_allowed_for :user } - it { expect(@blob_path).to be_denied_for :visitor } - end - - describe "GET /:project_path/edit" do - subject { edit_namespace_project_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/deploy_keys" do - subject { namespace_project_deploy_keys_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/issues" do - subject { namespace_project_issues_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/snippets" do - subject { namespace_project_snippets_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/snippets/new" do - subject { new_namespace_project_snippet_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/merge_requests" do - subject { namespace_project_merge_requests_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/merge_requests/new" do - subject { new_namespace_project_merge_request_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/branches" do - subject { namespace_project_branches_path(project.namespace, project) } - - before do - # Speed increase - allow_any_instance_of(Project).to receive(:branches).and_return([]) - end - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/tags" do - subject { namespace_project_tags_path(project.namespace, project) } - - before do - # Speed increase - allow_any_instance_of(Project).to receive(:tags).and_return([]) - end - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/hooks" do - subject { namespace_project_hooks_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end -end diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb deleted file mode 100644 index 9021ff33186..00000000000 --- a/spec/features/security/project/private_access_spec.rb +++ /dev/null @@ -1,205 +0,0 @@ -require 'spec_helper' - -describe "Private Project Access", feature: true do - let(:project) { create(:project) } - - let(:master) { create(:user) } - let(:guest) { create(:user) } - let(:reporter) { create(:user) } - - before do - # full access - project.team << [master, :master] - - # readonly - project.team << [reporter, :reporter] - end - - describe "Project should be private" do - subject { project } - - describe '#private?' do - subject { super().private? } - it { is_expected.to be_truthy } - end - end - - describe "GET /:project_path" do - subject { namespace_project_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/tree/master" do - subject { namespace_project_tree_path(project.namespace, project, project.repository.root_ref) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/commits/master" do - subject { namespace_project_commits_path(project.namespace, project, project.repository.root_ref, limit: 1) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/commit/:sha" do - subject { namespace_project_commit_path(project.namespace, project, project.repository.commit) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/compare" do - subject { namespace_project_compare_index_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/project_members" do - subject { namespace_project_project_members_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/blob" do - before do - commit = project.repository.commit - path = '.gitignore' - @blob_path = namespace_project_blob_path(project.namespace, project, File.join(commit.id, path)) - end - - it { expect(@blob_path).to be_allowed_for master } - it { expect(@blob_path).to be_allowed_for reporter } - it { expect(@blob_path).to be_allowed_for :admin } - it { expect(@blob_path).to be_denied_for guest } - it { expect(@blob_path).to be_denied_for :user } - it { expect(@blob_path).to be_denied_for :visitor } - end - - describe "GET /:project_path/edit" do - subject { edit_namespace_project_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/deploy_keys" do - subject { namespace_project_deploy_keys_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/issues" do - subject { namespace_project_issues_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/snippets" do - subject { namespace_project_snippets_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/merge_requests" do - subject { namespace_project_merge_requests_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/branches" do - subject { namespace_project_branches_path(project.namespace, project) } - - before do - # Speed increase - allow_any_instance_of(Project).to receive(:branches).and_return([]) - end - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/tags" do - subject { namespace_project_tags_path(project.namespace, project) } - - before do - # Speed increase - allow_any_instance_of(Project).to receive(:tags).and_return([]) - end - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/hooks" do - subject { namespace_project_hooks_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end -end diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb deleted file mode 100644 index 6ec190ed777..00000000000 --- a/spec/features/security/project/public_access_spec.rb +++ /dev/null @@ -1,232 +0,0 @@ -require 'spec_helper' - -describe "Public Project Access", feature: true do - let(:project) { create(:project) } - - let(:master) { create(:user) } - let(:guest) { create(:user) } - let(:reporter) { create(:user) } - - before do - # public project - project.visibility_level = Gitlab::VisibilityLevel::PUBLIC - project.save! - - # full access - project.team << [master, :master] - - # readonly - project.team << [reporter, :reporter] - - end - - describe "Project should be public" do - subject { project } - - describe '#public?' do - subject { super().public? } - it { is_expected.to be_truthy } - end - end - - describe "GET /:project_path" do - subject { namespace_project_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/tree/master" do - subject { namespace_project_tree_path(project.namespace, project, project.repository.root_ref) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/commits/master" do - subject { namespace_project_commits_path(project.namespace, project, project.repository.root_ref, limit: 1) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/commit/:sha" do - subject { namespace_project_commit_path(project.namespace, project, project.repository.commit) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/compare" do - subject { namespace_project_compare_index_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/project_members" do - subject { namespace_project_project_members_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/blob" do - before do - commit = project.repository.commit - path = '.gitignore' - @blob_path = namespace_project_blob_path(project.namespace, project, File.join(commit.id, path)) - end - - it { expect(@blob_path).to be_allowed_for master } - it { expect(@blob_path).to be_allowed_for reporter } - it { expect(@blob_path).to be_allowed_for :admin } - it { expect(@blob_path).to be_allowed_for guest } - it { expect(@blob_path).to be_allowed_for :user } - it { expect(@blob_path).to be_allowed_for :visitor } - end - - describe "GET /:project_path/edit" do - subject { edit_namespace_project_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/deploy_keys" do - subject { namespace_project_deploy_keys_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/issues" do - subject { namespace_project_issues_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/snippets" do - subject { namespace_project_snippets_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/snippets/new" do - subject { new_namespace_project_snippet_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/merge_requests" do - subject { namespace_project_merge_requests_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/merge_requests/new" do - subject { new_namespace_project_merge_request_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end - - describe "GET /:project_path/branches" do - subject { namespace_project_branches_path(project.namespace, project) } - - before do - # Speed increase - allow_any_instance_of(Project).to receive(:branches).and_return([]) - end - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/tags" do - subject { namespace_project_tags_path(project.namespace, project) } - - before do - # Speed increase - allow_any_instance_of(Project).to receive(:tags).and_return([]) - end - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_allowed_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_allowed_for guest } - it { is_expected.to be_allowed_for :user } - it { is_expected.to be_allowed_for :visitor } - end - - describe "GET /:project_path/hooks" do - subject { namespace_project_hooks_path(project.namespace, project) } - - it { is_expected.to be_allowed_for master } - it { is_expected.to be_denied_for reporter } - it { is_expected.to be_allowed_for :admin } - it { is_expected.to be_denied_for guest } - it { is_expected.to be_denied_for :user } - it { is_expected.to be_denied_for :visitor } - end -end diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb deleted file mode 100644 index 4cfaab03caf..00000000000 --- a/spec/features/users_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'spec_helper' - -feature 'Users' do - around do |ex| - old_url_options = Rails.application.routes.default_url_options - Rails.application.routes.default_url_options = { host: 'example.foo' } - ex.run - Rails.application.routes.default_url_options = old_url_options - end - - scenario 'GET /users/sign_in creates a new user account' do - visit new_user_session_path - fill_in 'user_name', with: 'Name Surname' - fill_in 'user_username', with: 'Great' - fill_in 'user_email', with: 'name@mail.com' - fill_in 'user_password_sign_up', with: 'password1234' - expect { click_button 'Sign up' }.to change { User.count }.by(1) - end - - scenario 'Successful user signin invalidates password reset token' do - user = create(:user) - expect(user.reset_password_token).to be_nil - - visit new_user_password_path - fill_in 'user_email', with: user.email - click_button 'Reset password' - - user.reload - expect(user.reset_password_token).not_to be_nil - - login_with(user) - expect(current_path).to eq root_path - - user.reload - expect(user.reset_password_token).to be_nil - end -end |