summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryce Johnson <bryce@gitlab.com>2017-03-27 16:24:11 -0400
committerBryce Johnson <bryce@gitlab.com>2017-03-27 16:24:11 -0400
commit33d082bdf68a888f9b76a6ec4d2d502fbe4092d8 (patch)
tree283d8482c5d670d5d28395f1608ebe8e8a8fd844
parent06ca0ef5dec7ad67009c40d46ba6385b46db7739 (diff)
downloadgitlab-ce-25332-pre-rebase-recovery-branch.tar.gz
Fix and add specs for undo applying templates.25332-pre-rebase-recovery-branch
-rw-r--r--app/assets/javascripts/blob/template_selector_mediator.js10
-rw-r--r--spec/features/projects/files/gitignore_dropdown_spec.rb15
-rw-r--r--spec/features/projects/files/undo_template_spec.rb100
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