From 93ab68607922e0bd0e22c40528a9d58fc50f50cd Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Mon, 11 Jul 2016 10:58:01 +0100 Subject: Fix feature specs on CI MySQL's text column isn't big enough for the diffs in the expand-collapse-diffs branch. --- spec/features/expand_collapse_diffs_spec.rb | 207 +++++++++++++++++++++ .../merge_requests/expand_collapse_diffs_spec.rb | 207 --------------------- spec/support/test_env.rb | 29 ++- 3 files changed, 221 insertions(+), 222 deletions(-) create mode 100644 spec/features/expand_collapse_diffs_spec.rb delete mode 100644 spec/features/merge_requests/expand_collapse_diffs_spec.rb diff --git a/spec/features/expand_collapse_diffs_spec.rb b/spec/features/expand_collapse_diffs_spec.rb new file mode 100644 index 00000000000..7cff196c8d9 --- /dev/null +++ b/spec/features/expand_collapse_diffs_spec.rb @@ -0,0 +1,207 @@ +require 'spec_helper' + +feature 'Expand and collapse diffs', js: true, feature: true do + include WaitForAjax + + before do + login_as :admin + project = create(:project) + branch = 'expand-collapse-diffs' + + # Ensure that undiffable.md is in .gitattributes + project.repository.copy_gitattributes(branch) + visit namespace_project_commit_path(project.namespace, project, project.commit(branch)) + execute_script('window.ajaxUris = []; $(document).ajaxSend(function(event, xhr, settings) { ajaxUris.push(settings.url) });') + end + + def file_container(filename) + find("[data-blob-diff-path*='#{filename}']") + end + + # Use define_method instead of let (which is memoized) so that this just works across a + # reload. + # + files = [ + 'small_diff.md', 'large_diff.md', 'large_diff_renamed.md', 'undiffable.md', + 'too_large.md', 'too_large_image.jpg' + ] + + files.each do |file| + define_method(file.split('.').first) { file_container(file) } + end + + context 'visiting a commit with collapsed diffs' do + it 'shows small diffs immediately' do + expect(small_diff).to have_selector('.code') + expect(small_diff).not_to have_selector('.nothing-here-block') + end + + it 'collapses large diffs by default' do + expect(large_diff).not_to have_selector('.code') + expect(large_diff).to have_selector('.nothing-here-block') + end + + it 'collapses large diffs for renamed files by default' do + expect(large_diff_renamed).not_to have_selector('.code') + expect(large_diff_renamed).to have_selector('.nothing-here-block') + expect(large_diff_renamed).to have_selector('.file-title .deletion') + expect(large_diff_renamed).to have_selector('.file-title .addition') + end + + it 'shows non-renderable diffs as such immediately, regardless of their size' do + expect(undiffable).not_to have_selector('.code') + expect(undiffable).to have_selector('.nothing-here-block') + expect(undiffable).to have_content('gitattributes') + end + + it 'does not allow diffs that are larger than the maximum size to be expanded' do + expect(too_large).not_to have_selector('.code') + expect(too_large).to have_selector('.nothing-here-block') + expect(too_large).to have_content('too large') + end + + it 'shows image diffs immediately, regardless of their size' do + expect(too_large_image).not_to have_selector('.nothing-here-block') + expect(too_large_image).to have_selector('.image') + end + + context 'expanding a diff for a renamed file' do + before do + large_diff_renamed.find('.nothing-here-block').click + wait_for_ajax + end + + it 'shows the old content' do + old_line = large_diff_renamed.find('.line_content.old') + + expect(old_line).to have_content('two copies') + end + + it 'shows the new content' do + new_line = large_diff_renamed.find('.line_content.new', match: :prefer_exact) + + expect(new_line).to have_content('three copies') + end + end + + context 'expanding a large diff' do + before do + click_link('large_diff.md') + wait_for_ajax + end + + it 'makes a request to get the content' do + ajax_uris = evaluate_script('ajaxUris') + + expect(ajax_uris).not_to be_empty + expect(ajax_uris.first).to include('large_diff.md') + end + + it 'shows the diff content' do + expect(large_diff).to have_selector('.code') + expect(large_diff).not_to have_selector('.nothing-here-block') + end + + context 'adding a comment to the expanded diff' do + let(:comment_text) { 'A comment' } + + before do + large_diff.find('.line_holder', match: :prefer_exact).hover + large_diff.find('.add-diff-note').click + large_diff.find('.note-textarea').send_keys comment_text + large_diff.find_button('Comment').click + wait_for_ajax + end + + it 'adds the comment' do + expect(large_diff.find('.notes')).to have_content comment_text + end + + context 'reloading the page' do + before { refresh } + + it 'collapses the large diff by default' do + expect(large_diff).not_to have_selector('.code') + expect(large_diff).to have_selector('.nothing-here-block') + end + + context 'expanding the diff' do + before do + click_link('large_diff.md') + wait_for_ajax + end + + it 'shows the diff content' do + expect(large_diff).to have_selector('.code') + expect(large_diff).not_to have_selector('.nothing-here-block') + end + + it 'shows the diff comment' do + expect(large_diff.find('.notes')).to have_content comment_text + end + end + end + end + end + + context 'collapsing an expanded diff' do + before { click_link('small_diff.md') } + + it 'hides the diff content' do + expect(small_diff).not_to have_selector('.code') + expect(small_diff).to have_selector('.nothing-here-block') + end + + context 're-expanding the same diff' do + before { click_link('small_diff.md') } + + it 'shows the diff content' do + expect(small_diff).to have_selector('.code') + expect(small_diff).not_to have_selector('.nothing-here-block') + end + + it 'does not make a new HTTP request' do + expect(evaluate_script('ajaxUris')).to be_empty + end + end + end + end + + context 'expanding all diffs' do + before do + click_link('Expand all') + wait_for_ajax + execute_script('window.ajaxUris = []; $(document).ajaxSend(function(event, xhr, settings) { ajaxUris.push(settings.url) });') + end + + it 'reloads the page with all diffs expanded' do + expect(small_diff).to have_selector('.code') + expect(small_diff).not_to have_selector('.nothing-here-block') + + expect(large_diff).to have_selector('.code') + expect(large_diff).not_to have_selector('.nothing-here-block') + end + + context 'collapsing an expanded diff' do + before { click_link('small_diff.md') } + + it 'hides the diff content' do + expect(small_diff).not_to have_selector('.code') + expect(small_diff).to have_selector('.nothing-here-block') + end + + context 're-expanding the same diff' do + before { click_link('small_diff.md') } + + it 'shows the diff content' do + expect(small_diff).to have_selector('.code') + expect(small_diff).not_to have_selector('.nothing-here-block') + end + + it 'does not make a new HTTP request' do + expect(evaluate_script('ajaxUris')).to be_empty + end + end + end + end +end diff --git a/spec/features/merge_requests/expand_collapse_diffs_spec.rb b/spec/features/merge_requests/expand_collapse_diffs_spec.rb deleted file mode 100644 index 7a05bb47979..00000000000 --- a/spec/features/merge_requests/expand_collapse_diffs_spec.rb +++ /dev/null @@ -1,207 +0,0 @@ -require 'spec_helper' - -feature 'Expand and collapse diffs', js: true, feature: true do - include WaitForAjax - - before do - login_as :admin - merge_request = create(:merge_request, target_branch: 'expand-collapse-diffs-start', source_branch: 'expand-collapse-diffs') - project = merge_request.source_project - - # Ensure that undiffable.md is in .gitattributes - project.repository.copy_gitattributes('expand-collapse-diffs') - visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request) - execute_script('window.ajaxUris = []; $(document).ajaxSend(function(event, xhr, settings) { ajaxUris.push(settings.url) });') - end - - def file_container(filename) - find("[data-blob-diff-path*='#{filename}']") - end - - # Use define_method instead of let (which is memoized) so that this just works across a - # reload. - # - files = [ - 'small_diff.md', 'large_diff.md', 'large_diff_renamed.md', 'undiffable.md', - 'too_large.md', 'too_large_image.jpg' - ] - - files.each do |file| - define_method(file.split('.').first) { file_container(file) } - end - - context 'visiting an existing merge request' do - it 'shows small diffs immediately' do - expect(small_diff).to have_selector('.code') - expect(small_diff).not_to have_selector('.nothing-here-block') - end - - it 'collapses large diffs by default' do - expect(large_diff).not_to have_selector('.code') - expect(large_diff).to have_selector('.nothing-here-block') - end - - it 'collapses large diffs for renamed files by default' do - expect(large_diff_renamed).not_to have_selector('.code') - expect(large_diff_renamed).to have_selector('.nothing-here-block') - expect(large_diff_renamed).to have_selector('.file-title .deletion') - expect(large_diff_renamed).to have_selector('.file-title .addition') - end - - it 'shows non-renderable diffs as such immediately, regardless of their size' do - expect(undiffable).not_to have_selector('.code') - expect(undiffable).to have_selector('.nothing-here-block') - expect(undiffable).to have_content('gitattributes') - end - - it 'does not allow diffs that are larger than the maximum size to be expanded' do - expect(too_large).not_to have_selector('.code') - expect(too_large).to have_selector('.nothing-here-block') - expect(too_large).to have_content('too large') - end - - it 'shows image diffs immediately, regardless of their size' do - expect(too_large_image).not_to have_selector('.nothing-here-block') - expect(too_large_image).to have_selector('.image') - end - - context 'expanding a diff for a renamed file' do - before do - large_diff_renamed.find('.nothing-here-block').click - wait_for_ajax - end - - it 'shows the old content' do - old_line = large_diff_renamed.find('.line_content.old') - - expect(old_line).to have_content('four copies') - end - - it 'shows the new content' do - new_line = large_diff_renamed.find('.line_content.new', match: :prefer_exact) - - expect(new_line).to have_content('six copies') - end - end - - context 'expanding a large diff' do - before do - click_link('large_diff.md') - wait_for_ajax - end - - it 'makes a request to get the content' do - ajax_uris = evaluate_script('ajaxUris') - - expect(ajax_uris).not_to be_empty - expect(ajax_uris.first).to include('large_diff.md') - end - - it 'shows the diff content' do - expect(large_diff).to have_selector('.code') - expect(large_diff).not_to have_selector('.nothing-here-block') - end - - context 'adding a comment to the expanded diff' do - let(:comment_text) { 'A comment' } - - before do - large_diff.find('.line_holder', match: :prefer_exact).hover - large_diff.find('.add-diff-note').click - large_diff.find('.note-textarea').send_keys comment_text - large_diff.find_button('Comment').click - wait_for_ajax - end - - it 'adds the comment' do - expect(large_diff.find('.notes')).to have_content comment_text - end - - context 'reloading the page' do - before { refresh } - - it 'collapses the large diff by default' do - expect(large_diff).not_to have_selector('.code') - expect(large_diff).to have_selector('.nothing-here-block') - end - - context 'expanding the diff' do - before do - click_link('large_diff.md') - wait_for_ajax - end - - it 'shows the diff content' do - expect(large_diff).to have_selector('.code') - expect(large_diff).not_to have_selector('.nothing-here-block') - end - - it 'shows the diff comment' do - expect(large_diff.find('.notes')).to have_content comment_text - end - end - end - end - end - - context 'collapsing an expanded diff' do - before { click_link('small_diff.md') } - - it 'hides the diff content' do - expect(small_diff).not_to have_selector('.code') - expect(small_diff).to have_selector('.nothing-here-block') - end - - context 're-expanding the same diff' do - before { click_link('small_diff.md') } - - it 'shows the diff content' do - expect(small_diff).to have_selector('.code') - expect(small_diff).not_to have_selector('.nothing-here-block') - end - - it 'does not make a new HTTP request' do - expect(evaluate_script('ajaxUris')).to be_empty - end - end - end - end - - context 'expanding all diffs' do - before do - click_link('Expand all') - wait_for_ajax - execute_script('window.ajaxUris = []; $(document).ajaxSend(function(event, xhr, settings) { ajaxUris.push(settings.url) });') - end - - it 'reloads the page with all diffs expanded' do - expect(small_diff).to have_selector('.code') - expect(small_diff).not_to have_selector('.nothing-here-block') - - expect(large_diff).to have_selector('.code') - expect(large_diff).not_to have_selector('.nothing-here-block') - end - - context 'collapsing an expanded diff' do - before { click_link('small_diff.md') } - - it 'hides the diff content' do - expect(small_diff).not_to have_selector('.code') - expect(small_diff).to have_selector('.nothing-here-block') - end - - context 're-expanding the same diff' do - before { click_link('small_diff.md') } - - it 'shows the diff content' do - expect(small_diff).to have_selector('.code') - expect(small_diff).not_to have_selector('.nothing-here-block') - end - - it 'does not make a new HTTP request' do - expect(evaluate_script('ajaxUris')).to be_empty - end - end - end - end -end diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index 311610c9911..bb6c84262f6 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -5,21 +5,20 @@ module TestEnv # When developing the seed repository, comment out the branch you will modify. BRANCH_SHA = { - 'empty-branch' => '7efb185', - 'flatten-dir' => 'e56497b', - 'feature' => '0b4bc9a', - 'feature_conflict' => 'bb5206f', - 'fix' => '48f0be4', - 'improve/awesome' => '5937ac0', - 'markdown' => '0ed8c6c', - 'lfs' => 'be93687', - 'master' => '5937ac0', - "'test'" => 'e56497b', - 'orphaned-branch' => '45127a9', - 'binary-encoding' => '7b1cf43', - 'gitattributes' => '5a62481', - 'expand-collapse-diffs-start' => '65b04e4', - 'expand-collapse-diffs' => '865e6d5' + 'empty-branch' => '7efb185', + 'flatten-dir' => 'e56497b', + 'feature' => '0b4bc9a', + 'feature_conflict' => 'bb5206f', + 'fix' => '48f0be4', + 'improve/awesome' => '5937ac0', + 'markdown' => '0ed8c6c', + 'lfs' => 'be93687', + 'master' => '5937ac0', + "'test'" => 'e56497b', + 'orphaned-branch' => '45127a9', + 'binary-encoding' => '7b1cf43', + 'gitattributes' => '5a62481', + 'expand-collapse-diffs' => '4842455' } # gitlab-test-fork is a fork of gitlab-fork, but we don't necessarily -- cgit v1.2.1