diff options
author | Rémy Coutable <remy@rymai.me> | 2018-05-04 13:02:31 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2018-05-04 13:02:31 +0000 |
commit | 4bf47cd76fd69a26b7b2b4ac029f088ec5493712 (patch) | |
tree | 57116f79140a5168ef6c426769b2825cb185bb15 | |
parent | 2d23cb1b9fa9fed19ce66998c5b4177ee13ef5f3 (diff) | |
parent | d0c854bd2e21bd810c1982536645927d5b0f7fd0 (diff) | |
download | gitlab-ce-4bf47cd76fd69a26b7b2b4ac029f088ec5493712.tar.gz |
Merge branch 'replace-commits-tests-with-rspec' into 'master'
Replace commits spinach tests with RSpec analog
See merge request gitlab-org/gitlab-ce!18743
-rw-r--r-- | features/project/commits/commits.feature | 96 | ||||
-rw-r--r-- | features/steps/project/commits/commits.rb | 192 | ||||
-rw-r--r-- | spec/features/projects/commits/user_browses_commits_spec.rb | 194 | ||||
-rw-r--r-- | spec/features/projects/compare_spec.rb | 69 |
4 files changed, 254 insertions, 297 deletions
diff --git a/features/project/commits/commits.feature b/features/project/commits/commits.feature deleted file mode 100644 index 3459cce03f9..00000000000 --- a/features/project/commits/commits.feature +++ /dev/null @@ -1,96 +0,0 @@ -@project_commits -Feature: Project Commits - Background: - Given I sign in as a user - And I own a project - And I visit my project's commits page - - Scenario: I browse commits list for master branch - Then I see project commits - And I should not see button to create a new merge request - Then I click the "Compare" tab - And I should not see button to create a new merge request - - Scenario: I browse commits list for feature branch without a merge request - Given I visit commits list page for feature branch - Then I see feature branch commits - And I see button to create a new merge request - Then I click the "Compare" tab - And I see button to create a new merge request - - Scenario: I browse commits list for feature branch with an open merge request - Given project have an open merge request - And I visit commits list page for feature branch - Then I see feature branch commits - And I should not see button to create a new merge request - And I should see button to the merge request - Then I click the "Compare" tab - And I should not see button to create a new merge request - And I should see button to the merge request - - Scenario: I browse atom feed of commits list for master branch - Given I click atom feed link - Then I see commits atom feed - - Scenario: I browse commit from list - Given I click on commit link - Then I see commit info - And I see side-by-side diff button - - Scenario: I browse commit from list and create a new tag - Given I click on commit link - And I click on tag link - Then I see commit SHA pre-filled - - Scenario: I browse commit with ci from list - Given commit has ci status - And repository contains ".gitlab-ci.yml" file - When I click on commit link - Then I see commit ci info - - Scenario: I browse commit with side-by-side diff view - Given I click on commit link - And I click side-by-side diff button - Then I see inline diff button - - @javascript - Scenario: I compare branches without a merge request - Given I visit compare refs page - And I fill compare fields with branches - Then I see compared branches - And I see button to create a new merge request - - @javascript - Scenario: I compare branches with an open merge request - Given project have an open merge request - And I visit compare refs page - And I fill compare fields with branches - Then I see compared branches - And I should not see button to create a new merge request - And I should see button to the merge request - - @javascript - Scenario: I compare refs - Given I visit compare refs page - And I fill compare fields with refs - Then I see compared refs - And I unfold diff - Then I should see additional file lines - - Scenario: I browse commits for a specific path - Given I visit my project's commits page for a specific path - Then I see breadcrumb links - - # TODO: Implement feature in graphs - #Scenario: I browse commits stats - #Given I visit my project's commits stats page - #Then I see commits stats - - Scenario: I browse a commit with an image - Given I visit a commit with an image that changed - Then The diff links to both the previous and current image - - @javascript - Scenario: I filter commits by message - When I search "submodules" commits - Then I should see only "submodules" commits diff --git a/features/steps/project/commits/commits.rb b/features/steps/project/commits/commits.rb deleted file mode 100644 index 959cf7d3e54..00000000000 --- a/features/steps/project/commits/commits.rb +++ /dev/null @@ -1,192 +0,0 @@ -class Spinach::Features::ProjectCommits < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - include SharedDiffNote - include RepoHelpers - - step 'I see project commits' do - commit = @project.repository.commit - expect(page).to have_content(@project.name) - expect(page).to have_content(commit.message[0..20]) - expect(page).to have_content(commit.short_id) - end - - step 'I click atom feed link' do - click_link "Commits feed" - end - - step 'I see commits atom feed' do - commit = @project.repository.commit - expect(response_headers['Content-Type']).to have_content("application/atom+xml") - expect(body).to have_selector("title", text: "#{@project.name}:master commits") - expect(body).to have_selector("author email", text: commit.author_email) - expect(body).to have_selector("entry summary", text: commit.description[0..10].delete("\r\n")) - end - - step 'I click on tag link' do - click_link "Tag" - end - - step 'I see commit SHA pre-filled' do - expect(page).to have_selector("input[value='#{sample_commit.id}']") - end - - step 'I click on commit link' do - visit project_commit_path(@project, sample_commit.id) - end - - step 'I see commit info' do - expect(page).to have_content sample_commit.message - expect(page).to have_content "Showing #{sample_commit.files_changed_count} changed files" - end - - step 'I fill compare fields with branches' do - select_using_dropdown('from', 'feature') - select_using_dropdown('to', 'master') - - click_button 'Compare' - end - - step 'I fill compare fields with refs' do - select_using_dropdown('from', sample_commit.parent_id, true) - select_using_dropdown('to', sample_commit.id, true) - - click_button "Compare" - end - - step 'I unfold diff' do - @diff = first('.js-unfold') - @diff.click - sleep 2 - end - - step 'I should see additional file lines' do - page.within @diff.query_scope do - expect(first('.new_line').text).not_to have_content "..." - end - end - - step 'I see compared refs' do - expect(page).to have_content "Commits (1)" - expect(page).to have_content "Showing 2 changed files" - end - - step 'I visit commits list page for feature branch' do - visit project_commits_path(@project, 'feature', { limit: 5 }) - end - - step 'I see feature branch commits' do - commit = @project.repository.commit('0b4bc9a') - expect(page).to have_content(@project.name) - expect(page).to have_content(commit.message[0..12]) - expect(page).to have_content(commit.short_id) - end - - step 'project have an open merge request' do - create(:merge_request, - title: 'Feature', - source_project: @project, - source_branch: 'feature', - target_branch: 'master', - author: @project.users.first - ) - end - - step 'I click the "Compare" tab' do - click_link('Compare') - end - - step 'I fill compare fields with branches' do - select_using_dropdown('from', 'master') - select_using_dropdown('to', 'feature') - - click_button 'Compare' - end - - step 'I see compared branches' do - expect(page).to have_content 'Commits (1)' - expect(page).to have_content 'Showing 1 changed file with 5 additions and 0 deletions' - end - - step 'I see button to create a new merge request' do - expect(page).to have_link 'Create merge request' - end - - step 'I should not see button to create a new merge request' do - expect(page).not_to have_link 'Create merge request' - end - - step 'I should see button to the merge request' do - merge_request = MergeRequest.find_by(title: 'Feature') - expect(page).to have_link "View open merge request", href: project_merge_request_path(@project, merge_request) - end - - step 'I see breadcrumb links' do - expect(page).to have_selector('ul.breadcrumb') - expect(page).to have_selector('ul.breadcrumb a', count: 4) - end - - step 'I see commits stats' do - expect(page).to have_content 'Top 50 Committers' - expect(page).to have_content 'Committers' - expect(page).to have_content 'Total commits' - expect(page).to have_content 'Authors' - end - - step 'I visit a commit with an image that changed' do - visit project_commit_path(@project, sample_image_commit.id) - end - - step 'The diff links to both the previous and current image' do - links = page.all('.file-actions a') - expect(links[0]['href']).to match %r{blob/#{sample_image_commit.old_blob_id}} - expect(links[1]['href']).to match %r{blob/#{sample_image_commit.new_blob_id}} - end - - step 'I see inline diff button' do - expect(page).to have_content "Inline" - end - - step 'I click side-by-side diff button' do - find('#parallel-diff-btn').click - end - - step 'commit has ci status' do - @project.enable_ci - @pipeline = create(:ci_pipeline, project: @project, sha: sample_commit.id) - create(:ci_build, pipeline: @pipeline) - end - - step 'repository contains ".gitlab-ci.yml" file' do - allow_any_instance_of(Ci::Pipeline).to receive(:ci_yaml_file).and_return(String.new) - end - - step 'I see commit ci info' do - expect(page).to have_content "Pipeline ##{@pipeline.id} pending" - end - - step 'I search "submodules" commits' do - fill_in 'commits-search', with: 'submodules' - end - - step 'I should see only "submodules" commits' do - expect(page).to have_content "More submodules" - expect(page).not_to have_content "Change some files" - end - - def select_using_dropdown(dropdown_type, selection, is_commit = false) - dropdown = find(".js-compare-#{dropdown_type}-dropdown") - dropdown.find(".compare-dropdown-toggle").click - dropdown.find('.dropdown-menu', visible: true) - dropdown.fill_in("Filter by Git revision", with: selection) - - if is_commit - dropdown.find('input[type="search"]').send_keys(:return) - else - find_link(selection, visible: true).click - end - - dropdown.find('.dropdown-menu', visible: false) - end -end diff --git a/spec/features/projects/commits/user_browses_commits_spec.rb b/spec/features/projects/commits/user_browses_commits_spec.rb index b650c1f4197..35ed6620548 100644 --- a/spec/features/projects/commits/user_browses_commits_spec.rb +++ b/spec/features/projects/commits/user_browses_commits_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe 'User browses commits' do + include RepoHelpers + let(:user) { create(:user) } let(:project) { create(:project, :repository, namespace: user.namespace) } @@ -9,13 +11,68 @@ describe 'User browses commits' do sign_in(user) end + it 'renders commit' do + visit project_commit_path(project, sample_commit.id) + + expect(page).to have_content(sample_commit.message) + .and have_content("Showing #{sample_commit.files_changed_count} changed files") + .and have_content('Side-by-side') + end + + it 'fill commit sha when click new tag from commit page' do + visit project_commit_path(project, sample_commit.id) + click_link 'Tag' + + expect(page).to have_selector("input[value='#{sample_commit.id}']", visible: false) + end + + it 'renders inline diff button when click side-by-side diff button' do + visit project_commit_path(project, sample_commit.id) + find('#parallel-diff-btn').click + + expect(page).to have_content 'Inline' + end + + it 'renders breadcrumbs on specific commit path' do + visit project_commits_path(project, project.repository.root_ref + '/files/ruby/regex.rb', limit: 5) + + expect(page).to have_selector('ul.breadcrumb') + .and have_selector('ul.breadcrumb a', count: 4) + end + + it 'renders diff links to both the previous and current image' do + visit project_commit_path(project, sample_image_commit.id) + + links = page.all('.file-actions a') + expect(links[0]['href']).to match %r{blob/#{sample_image_commit.old_blob_id}} + expect(links[1]['href']).to match %r{blob/#{sample_image_commit.new_blob_id}} + end + + context 'when commit has ci status' do + let(:pipeline) { create(:ci_pipeline, project: project, sha: sample_commit.id) } + + before do + project.enable_ci + + create(:ci_build, pipeline: pipeline) + + allow_any_instance_of(Ci::Pipeline).to receive(:ci_yaml_file).and_return('') + end + + it 'renders commit ci info' do + visit project_commit_path(project, sample_commit.id) + + expect(page).to have_content "Pipeline ##{pipeline.id} pending" + end + end + context 'primary email' do it 'finds a commit by a primary email' do user = create(:user, email: 'dmitriy.zaporozhets@gmail.com') - visit(project_commit_path(project, RepoHelpers.sample_commit.id)) + visit(project_commit_path(project, sample_commit.id)) - check_author_link(RepoHelpers.sample_commit.author_email, user) + check_author_link(sample_commit.author_email, user) end end @@ -26,9 +83,9 @@ describe 'User browses commits' do create(:email, { user: user, email: 'dmitriy.zaporozhets@gmail.com' }) end - visit(project_commit_path(project, RepoHelpers.sample_commit.parent_id)) + visit(project_commit_path(project, sample_commit.parent_id)) - check_author_link(RepoHelpers.sample_commit.author_email, user) + check_author_link(sample_commit.author_email, user) end end @@ -44,6 +101,135 @@ describe 'User browses commits' do expect(find('.diff-file-changes', visible: false)).to have_content('No file name available') end end + + describe 'commits list' do + let(:visit_commits_page) do + visit project_commits_path(project, project.repository.root_ref, limit: 5) + end + + it 'searches commit', :js do + visit_commits_page + fill_in 'commits-search', with: 'submodules' + + expect(page).to have_content 'More submodules' + expect(page).not_to have_content 'Change some files' + end + + it 'renders commits atom feed' do + visit_commits_page + click_link('Commits feed') + + commit = project.repository.commit + + expect(response_headers['Content-Type']).to have_content("application/atom+xml") + expect(body).to have_selector('title', text: "#{project.name}:master commits") + .and have_selector('author email', text: commit.author_email) + .and have_selector('entry summary', text: commit.description[0..10].delete("\r\n")) + end + + context 'master branch' do + before do + visit_commits_page + end + + it 'renders project commits' do + commit = project.repository.commit + + expect(page).to have_content(project.name) + .and have_content(commit.message[0..20]) + .and have_content(commit.short_id) + end + + it 'does not render create merge request button' do + expect(page).not_to have_link 'Create merge request' + end + + context 'when click the compare tab' do + before do + click_link('Compare') + end + + it 'does not render create merge request button' do + expect(page).not_to have_link 'Create merge request' + end + end + end + + context 'feature branch' do + let(:visit_commits_page) do + visit project_commits_path(project, 'feature') + end + + context 'when project does not have open merge requests' do + before do + visit_commits_page + end + + it 'renders project commits' do + commit = project.repository.commit('0b4bc9a') + + expect(page).to have_content(project.name) + .and have_content(commit.message[0..12]) + .and have_content(commit.short_id) + end + + it 'renders create merge request button' do + expect(page).to have_link 'Create merge request' + end + + context 'when click the compare tab' do + before do + click_link('Compare') + end + + it 'renders create merge request button' do + expect(page).to have_link 'Create merge request' + end + end + end + + context 'when project have open merge request' do + let!(:merge_request) do + create( + :merge_request, + title: 'Feature', + source_project: project, + source_branch: 'feature', + target_branch: 'master', + author: project.users.first + ) + end + + before do + visit_commits_page + end + + it 'renders project commits' do + commit = project.repository.commit('0b4bc9a') + + expect(page).to have_content(project.name) + .and have_content(commit.message[0..12]) + .and have_content(commit.short_id) + end + + it 'renders button to the merge request' do + expect(page).not_to have_link 'Create merge request' + expect(page).to have_link 'View open merge request', href: project_merge_request_path(project, merge_request) + end + + context 'when click the compare tab' do + before do + click_link('Compare') + end + + it 'renders button to the merge request' do + expect(page).not_to have_link 'Create merge request' + expect(page).to have_link 'View open merge request', href: project_merge_request_path(project, merge_request) + end + end + end + end + end end private diff --git a/spec/features/projects/compare_spec.rb b/spec/features/projects/compare_spec.rb index 1fb22fd0e4c..7e863d9df32 100644 --- a/spec/features/projects/compare_spec.rb +++ b/spec/features/projects/compare_spec.rb @@ -7,16 +7,19 @@ describe "Compare", :js do before do project.add_master(user) sign_in user - visit project_compare_index_path(project, from: "master", to: "master") end describe "branches" do it "pre-populates fields" do + visit project_compare_index_path(project, from: "master", to: "master") + expect(find(".js-compare-from-dropdown .dropdown-toggle-text")).to have_content("master") expect(find(".js-compare-to-dropdown .dropdown-toggle-text")).to have_content("master") end it "compares branches" do + visit project_compare_index_path(project, from: "master", to: "master") + select_using_dropdown "from", "feature" expect(find(".js-compare-from-dropdown .dropdown-toggle-text")).to have_content("feature") @@ -26,9 +29,58 @@ describe "Compare", :js do click_button "Compare" expect(page).to have_content "Commits" + expect(page).to have_link 'Create merge request' + end + + it 'renders additions info when click unfold diff' do + visit project_compare_index_path(project) + + select_using_dropdown('from', RepoHelpers.sample_commit.parent_id, commit: true) + select_using_dropdown('to', RepoHelpers.sample_commit.id, commit: true) + + click_button 'Compare' + expect(page).to have_content 'Commits (1)' + expect(page).to have_content "Showing 2 changed files" + + diff = first('.js-unfold') + diff.click + wait_for_requests + + page.within diff.query_scope do + expect(first('.new_line').text).not_to have_content "..." + end + end + + context 'when project have an open merge request' do + let!(:merge_request) do + create( + :merge_request, + title: 'Feature', + source_project: project, + source_branch: 'feature', + target_branch: 'master', + author: project.users.first + ) + end + + it 'compares branches' do + visit project_compare_index_path(project) + + select_using_dropdown('from', 'master') + select_using_dropdown('to', 'feature') + + click_button 'Compare' + + expect(page).to have_content 'Commits (1)' + expect(page).to have_content 'Showing 1 changed file with 5 additions and 0 deletions' + expect(page).to have_link 'View open merge request', href: project_merge_request_path(project, merge_request) + expect(page).not_to have_link 'Create merge request' + end end it "filters branches" do + visit project_compare_index_path(project, from: "master", to: "master") + select_using_dropdown("from", "wip") find(".js-compare-from-dropdown .compare-dropdown-toggle").click @@ -39,6 +91,8 @@ describe "Compare", :js do describe "tags" do it "compares tags" do + visit project_compare_index_path(project, from: "master", to: "master") + select_using_dropdown "from", "v1.0.0" expect(find(".js-compare-from-dropdown .dropdown-toggle-text")).to have_content("v1.0.0") @@ -50,15 +104,20 @@ describe "Compare", :js do end end - def select_using_dropdown(dropdown_type, selection) + def select_using_dropdown(dropdown_type, selection, commit: false) dropdown = find(".js-compare-#{dropdown_type}-dropdown") dropdown.find(".compare-dropdown-toggle").click # find input before using to wait for the inputs visiblity dropdown.find('.dropdown-menu') dropdown.fill_in("Filter by Git revision", with: selection) wait_for_requests - # find before all to wait for the items visiblity - dropdown.find("a[data-ref=\"#{selection}\"]", match: :first) - dropdown.all("a[data-ref=\"#{selection}\"]").last.click + + if commit + dropdown.find('input[type="search"]').send_keys(:return) + else + # find before all to wait for the items visiblity + dropdown.find("a[data-ref=\"#{selection}\"]", match: :first) + dropdown.all("a[data-ref=\"#{selection}\"]").last.click + end end end |