summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Ivan Vargas <jvargas@gitlab.com>2017-11-15 13:47:22 -0600
committerJose Ivan Vargas <jvargas@gitlab.com>2017-11-16 12:22:53 -0600
commit246a6d177fd4ab6de84380e90f19f7f56e079e64 (patch)
tree4df66158fc1c0c82cbe4a180e741ff11dc4fe979
parentba19f5b00023d50a5e6d515711e95f5e84fc1607 (diff)
downloadgitlab-ce-39455-clone-dropdown-should-not-have-a-tooltip.tar.gz
Added ssh_button helper specs and addressed ruby code observations39455-clone-dropdown-should-not-have-a-tooltip
-rw-r--r--app/assets/stylesheets/pages/projects.scss4
-rw-r--r--app/helpers/button_helper.rb44
-rw-r--r--spec/helpers/button_helper_spec.rb55
3 files changed, 67 insertions, 36 deletions
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index 26701a97ec9..3799a3d4cc8 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -409,6 +409,10 @@
.clone-options-dropdown {
min-width: 240px;
+
+ .dropdown-menu-inner-content {
+ min-width: 320px;
+ }
}
}
diff --git a/app/helpers/button_helper.rb b/app/helpers/button_helper.rb
index 4f945b5ad9e..128cfceac95 100644
--- a/app/helpers/button_helper.rb
+++ b/app/helpers/button_helper.rb
@@ -58,34 +58,34 @@ module ButtonHelper
def http_clone_button(project, append_link: true)
protocol = gitlab_config.protocol.upcase
+ dropdown_description = http_dropdown_description(protocol)
+ append_url = project.http_url_to_repo if append_link
- protocol_description =
- if current_user.try(:require_password_creation?)
- _("Set a password on your account to pull or push via %{protocol}.") % { protocol: protocol }
- else
- _("Create a personal access token on your account to pull or push via %{protocol}.") % { protocol: protocol }
- end
-
- protocol_element_output = content_tag(:strong, protocol, class: 'dropdown-menu-inner-title')
+ dropdown_item_with_description(protocol, dropdown_description, href: append_url)
+ end
- if current_user.try(:require_password_creation?) || current_user.try(:require_personal_access_token_creation_for_git_auth?)
- protocol_element_output << content_tag(:span, protocol_description, class: 'dropdown-menu-inner-content')
+ def http_dropdown_description(protocol)
+ if current_user.try(:require_password_creation?)
+ _("Set a password on your account to pull or push via %{protocol}.") % { protocol: protocol }
+ elsif current_user.try(:require_personal_access_token_creation_for_git_auth?)
+ _("Create a personal access token on your account to pull or push via %{protocol}.") % { protocol: protocol }
end
-
- content_tag (append_link ? :a : :span),
- protocol_element_output,
- class: 'http-selector',
- href: (project.http_url_to_repo if append_link)
end
def ssh_clone_button(project, append_link: true)
- ssh_description = _("You won't be able to pull or push project code via SSH until you add an SSH key to your profile")
- ssh_element_output = content_tag(:strong, 'SSH', class: 'dropdown-menu-inner-title')
- ssh_element_output << content_tag(:span, ssh_description, class: 'dropdown-menu-inner-content') if current_user.try(:require_ssh_key?)
+ dropdown_description = _("You won't be able to pull or push project code via SSH until you add an SSH key to your profile") if current_user.try(:require_ssh_key?)
+ append_url = project.ssh_url_to_repo if append_link
+
+ dropdown_item_with_description('SSH', dropdown_description, href: append_url)
+ end
+
+ def dropdown_item_with_description(title, description, href: nil)
+ button_content = content_tag(:strong, title, class: 'dropdown-menu-inner-title')
+ button_content << content_tag(:span, description, class: 'dropdown-menu-inner-content') if description
- content_tag (append_link ? :a : :span),
- ssh_element_output,
- class: 'ssh-selector',
- href: (project.ssh_url_to_repo if append_link)
+ content_tag (href ? :a : :span),
+ button_content,
+ class: "#{title.downcase}-selector",
+ href: (href if href)
end
end
diff --git a/spec/helpers/button_helper_spec.rb b/spec/helpers/button_helper_spec.rb
index 2f0e0d4f4e8..0534cf633b3 100644
--- a/spec/helpers/button_helper_spec.rb
+++ b/spec/helpers/button_helper_spec.rb
@@ -27,9 +27,9 @@ describe ButtonHelper do
let(:user) { create(:user, password_automatically_set: true) }
it 'shows the password text on the dropdown' do
- expect(element.children.length).to eq(2)
- expect(element.children[1].name).to eq('span')
- expect(element.children[1].children[0].text).to eq('Set a password on your account to pull or push via HTTP.')
+ description = element.search('.dropdown-menu-inner-content').first
+
+ expect(description.inner_text).to eq 'Set a password on your account to pull or push via HTTP.'
end
end
end
@@ -40,18 +40,10 @@ describe ButtonHelper do
end
context 'when user has no personal access tokens' do
- it 'has a personal access token tooltip ' do
- expect(element.children.length).to eq(2)
- expect(element.children[1].name).to eq('span')
- expect(element.children[1].children[0].text).to eq('Create a personal access token on your account to pull or push via HTTP.')
- end
- end
-
- context 'when user has a personal access token' do
- it 'shows no tooltip' do
- create(:personal_access_token, user: user)
+ it 'has a personal access token text on the dropdown description ' do
+ description = element.search('.dropdown-menu-inner-content').first
- expect(element.attr('class')).not_to include(has_tooltip_class)
+ expect(description.inner_text).to eq 'Create a personal access token on your account to pull or push via HTTP.'
end
end
end
@@ -65,6 +57,41 @@ describe ButtonHelper do
end
end
+ describe 'ssh_button' do
+ let(:user) { create(:user) }
+ let(:project) { build_stubbed(:project) }
+
+ def element
+ element = helper.ssh_clone_button(project)
+
+ Nokogiri::HTML::DocumentFragment.parse(element).first_element_child
+ end
+
+ before do
+ allow(helper).to receive(:current_user).and_return(user)
+ end
+
+ context 'without an ssh key on the user' do
+ it 'shows a warning on the dropdown description' do
+ description = element.search('.dropdown-menu-inner-content').first
+
+ expect(description.inner_text).to eq "You won't be able to pull or push project code via SSH until you add an SSH key to your profile"
+ end
+ end
+
+ context 'with an ssh key on the user' do
+ before do
+ create(:key, user: user)
+ end
+
+ it 'there is no warning on the dropdown description' do
+ description = element.search('.dropdown-menu-inner-content').first
+
+ expect(description).to eq nil
+ end
+ end
+ end
+
describe 'clipboard_button' do
let(:user) { create(:user) }
let(:project) { build_stubbed(:project) }