require 'spec_helper' feature 'Diffs URL', js: true, feature: true do include ApplicationHelper let(:author_user) { create(:user) } let(:user) { create(:user) } let(:project) { create(:project, :public) } let(:forked_project) { Projects::ForkService.new(project, author_user).execute } let(:merge_request) { create(:merge_request_with_diffs, source_project: forked_project, target_project: project, author: author_user) } context 'when visit with */* as accept header' do before(:each) do page.driver.add_header('Accept', '*/*') end it 'renders the notes' do create :note_on_merge_request, project: project, noteable: merge_request, note: 'Rebasing with master' visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request) # Load notes and diff through AJAX expect(page).to have_css('.note-text', visible: false, text: 'Rebasing with master') expect(page).to have_css('.diffs.tab-pane.active') end end context 'when merge request has overflow' do it 'displays warning' do allow_any_instance_of(MergeRequestDiff).to receive(:overflow?).and_return(true) allow(Commit).to receive(:max_diff_options).and_return(max_files: 20, max_lines: 20) visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request) page.within('.alert') do expect(page).to have_text("Too many changes to show. Plain diff Email patch To preserve performance only 3 of 3 files are displayed.") end end end describe 'when editing file' do let(:changelog_id) { hexdigest("CHANGELOG") } context 'as author' do it 'shows direct edit link' do login_as(author_user) visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request) # Throws `Capybara::Poltergeist::InvalidSelector` if we try to use `#hash` syntax expect(page).to have_selector("[id=\"#{changelog_id}\"] a.js-edit-blob") end end context 'as user who needs to fork' do it 'shows fork/cancel confirmation' do login_as(user) visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request) # Throws `Capybara::Poltergeist::InvalidSelector` if we try to use `#hash` syntax find("[id=\"#{changelog_id}\"] .js-edit-blob").click expect(page).to have_selector('.js-fork-suggestion-button', count: 1) expect(page).to have_selector('.js-cancel-fork-suggestion-button', count: 1) end end end end