diff options
author | Bryce Johnson <bryce@gitlab.com> | 2017-03-27 16:24:11 -0400 |
---|---|---|
committer | Bryce Johnson <bryce@gitlab.com> | 2017-03-27 16:24:11 -0400 |
commit | 33d082bdf68a888f9b76a6ec4d2d502fbe4092d8 (patch) | |
tree | 283d8482c5d670d5d28395f1608ebe8e8a8fd844 | |
parent | 06ca0ef5dec7ad67009c40d46ba6385b46db7739 (diff) | |
download | gitlab-ce-25332-pre-rebase-recovery-branch.tar.gz |
Fix and add specs for undo applying templates.25332-pre-rebase-recovery-branch
3 files changed, 123 insertions, 2 deletions
diff --git a/app/assets/javascripts/blob/template_selector_mediator.js b/app/assets/javascripts/blob/template_selector_mediator.js index 9934b869a80..ee5df42b0b3 100644 --- a/app/assets/javascripts/blob/template_selector_mediator.js +++ b/app/assets/javascripts/blob/template_selector_mediator.js @@ -48,6 +48,7 @@ export default class FileTemplateMediator { $('.template-selectors-undo-menu button').on('click', () => { this.setEditorContent(this.cachedFileContent); this.setFilename(this.cachedFilename); + this.selectedTemplateSelector.$dropdown.find('.dropdown-toggle-text').text(this.cachedDropdownToggleText); this.disableUndoTemplate(); }); } @@ -81,7 +82,7 @@ export default class FileTemplateMediator { } selectTemplateType(item) { - const selectedTemplateSelector = this.findSelectorByKey(item.key); + this.selectedTemplateSelector = this.findSelectorByKey(item.key); this.templateSelectors.forEach((selector) => { if (selector.$dropdown !== null) { @@ -89,7 +90,12 @@ export default class FileTemplateMediator { } }); - selectedTemplateSelector.show(); + this.selectedTemplateSelector.show(); + + this.cachedDropdownToggleText = this.selectedTemplateSelector + .$dropdown + .find('.dropdown-toggle-text') + .text(); this.typeSelector.$dropdown .find('.dropdown-toggle-text') diff --git a/spec/features/projects/files/gitignore_dropdown_spec.rb b/spec/features/projects/files/gitignore_dropdown_spec.rb index 9ebef505b92..9b5491185e9 100644 --- a/spec/features/projects/files/gitignore_dropdown_spec.rb +++ b/spec/features/projects/files/gitignore_dropdown_spec.rb @@ -28,4 +28,19 @@ feature 'User wants to add a .gitignore file', feature: true do expect(page).to have_content('/.bundle') expect(page).to have_content('# Gemfile.lock, .ruby-version, .ruby-gemset') end + + scenario 'user can undo applying the .gitignore template', js: true, focus: true do + find('.js-gitignore-selector').click + wait_for_ajax + within '.gitignore-selector' do + find('.dropdown-input-field').set('rails') + find('.dropdown-content li', text: 'Rails').click + end + wait_for_ajax + + find('.template-selectors-undo-menu button').click + + expect(page).not_to have_content('/.bundle') + expect(page).not_to have_content('# Gemfile.lock, .ruby-version, .ruby-gemset') + end end diff --git a/spec/features/projects/files/undo_template_spec.rb b/spec/features/projects/files/undo_template_spec.rb new file mode 100644 index 00000000000..c8f03364fb2 --- /dev/null +++ b/spec/features/projects/files/undo_template_spec.rb @@ -0,0 +1,100 @@ +require 'spec_helper' +include WaitForAjax + +feature 'Template Undo Button', js: true do + let(:project) { create(:project) } + let(:user) { create(:user) } + + before do + project.team << [user, :master] + login_as user + end + + context 'editing a matching file and applying a template', focus: true do + before do + edit_file('LICENSE') + select_template('.js-license-selector', 'Apache License 2.0') + end + + scenario 'is displayed' do + ensure_undo_can_happen('http://www.apache.org/licenses/', 'Apply a License template') + end + end + + context 'creating a matching file' do + before do + create_and_edit_file('LICENSE') + select_template('.js-license-selector', 'Apache License 2.0') + end + + scenario 'is displayed' do + ensure_undo_can_happen('http://www.apache.org/licenses/', 'Apply a License template') + end + end + + context 'creating a non-matching file' do + before do + visit namespace_project_new_blob_path(project.namespace, project, 'master') + select_template_type('LICENSE') + select_template('.js-license-selector', 'Apache License 2.0') + end + + scenario 'is displayed' do + ensure_undo_can_happen('http://www.apache.org/licenses/', 'Apply a License template') + end + end +end + +def ensure_undo_can_happen(template_content, toggle_text) + ensure_undo_button_present + ensure_undo_works(template_content) + ensure_template_selection_toggle_text_is_unset(toggle_text) +end +def select_template_type(template_type) + find('.js-template-type-selector').click + find('.dropdown-content li', text: template_type).click +end +def ensure_template_selection_toggle_text_is_unset(neutral_toggle_text) + expect(page).to have_content(neutral_toggle_text) +end + +def ensure_undo_button_present + expect(page).to have_content('Template applied') + expect(page).to have_css('.template-selectors-undo-menu .btn-info') +end + +def ensure_undo_works(template_content) + find('.template-selectors-undo-menu .btn-info').click + expect(page).not_to have_content(template_content) + expect(find('.template-type-selector .dropdown-toggle-text')).to have_content() +end + +def select_template(template_selector_selector, template_name) + find(template_selector_selector).click + find('.dropdown-content li', text: template_name).click + wait_for_ajax +end + +def expect_template_type_selector_display(is_visible) + count = is_visible ? 1 : 0 + expect(page).to have_css('.js-template-type-selector', count: count) +end + +def select_template_type(template_type) + find('.js-template-type-selector').click + find('.dropdown-content li', text: template_type).click +end + +def edit_file(file_name) + visit namespace_project_edit_blob_path(project.namespace, project, File.join(project.default_branch, file_name)) +end + +def create_and_edit_file(file_name) + visit namespace_project_new_blob_path(project.namespace, project, 'master', file_name: file_name) + click_button "Commit Changes" + edit_file(file_name) +end + +def fill_in_matching_filename(file_name) + fill_in 'file_path', with: file_name +end |