summaryrefslogtreecommitdiff
path: root/spec/helpers/blob_helper_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/helpers/blob_helper_spec.rb')
-rw-r--r--spec/helpers/blob_helper_spec.rb110
1 files changed, 106 insertions, 4 deletions
diff --git a/spec/helpers/blob_helper_spec.rb b/spec/helpers/blob_helper_spec.rb
index fe975aa7723..3ba9f39d21a 100644
--- a/spec/helpers/blob_helper_spec.rb
+++ b/spec/helpers/blob_helper_spec.rb
@@ -30,6 +30,8 @@ RSpec.describe BlobHelper do
let(:namespace) { create(:namespace, name: 'gitlab') }
let(:project) { create(:project, :repository, namespace: namespace) }
+ subject(:link) { helper.edit_blob_button(project, 'master', 'README.md') }
+
before do
allow(helper).to receive(:current_user).and_return(nil)
allow(helper).to receive(:can?).and_return(true)
@@ -53,15 +55,49 @@ RSpec.describe BlobHelper do
end
it 'returns a link with the proper route' do
- link = helper.edit_blob_button(project, 'master', 'README.md')
-
expect(Capybara.string(link).find_link('Edit')[:href]).to eq("/#{project.full_path}/-/edit/master/README.md")
end
it 'returns a link with the passed link_opts on the expected route' do
- link = helper.edit_blob_button(project, 'master', 'README.md', link_opts: { mr_id: 10 })
+ link_with_mr = helper.edit_blob_button(project, 'master', 'README.md', link_opts: { mr_id: 10 })
- expect(Capybara.string(link).find_link('Edit')[:href]).to eq("/#{project.full_path}/-/edit/master/README.md?mr_id=10")
+ expect(Capybara.string(link_with_mr).find_link('Edit')[:href]).to eq("/#{project.full_path}/-/edit/master/README.md?mr_id=10")
+ end
+
+ context 'when edit is the primary button' do
+ before do
+ stub_feature_flags(web_ide_primary_edit: false)
+ end
+
+ it 'is rendered as primary' do
+ expect(link).not_to match(/btn-inverted/)
+ end
+
+ it 'passes on primary tracking attributes' do
+ parsed_link = Capybara.string(link).find_link('Edit')
+
+ expect(parsed_link[:'data-track-event']).to eq("click_edit")
+ expect(parsed_link[:'data-track-label']).to eq("Edit")
+ expect(parsed_link[:'data-track-property']).to eq(nil)
+ end
+ end
+
+ context 'when Web IDE is the primary button' do
+ before do
+ stub_feature_flags(web_ide_primary_edit: true)
+ end
+
+ it 'is rendered as inverted' do
+ expect(link).to match(/btn-inverted/)
+ end
+
+ it 'passes on secondary tracking attributes' do
+ parsed_link = Capybara.string(link).find_link('Edit')
+
+ expect(parsed_link[:'data-track-event']).to eq("click_edit")
+ expect(parsed_link[:'data-track-label']).to eq("Edit")
+ expect(parsed_link[:'data-track-property']).to eq("secondary")
+ end
end
end
@@ -246,6 +282,16 @@ RSpec.describe BlobHelper do
expect(helper.show_suggest_pipeline_creation_celebration?).to be_falsey
end
end
+
+ context 'blob does not have auxiliary view' do
+ before do
+ allow(blob).to receive(:auxiliary_viewer).and_return(nil)
+ end
+
+ it 'is false' do
+ expect(helper.show_suggest_pipeline_creation_celebration?).to be_falsey
+ end
+ end
end
context 'experiment disabled' do
@@ -285,6 +331,62 @@ RSpec.describe BlobHelper do
end
end
+ describe `#ide_edit_button` do
+ let_it_be(:namespace) { create(:namespace, name: 'gitlab') }
+ let_it_be(:project) { create(:project, :repository, namespace: namespace) }
+ let_it_be(:current_user) { create(:user) }
+ let(:can_push_code) { true }
+ let(:blob) { project.repository.blob_at('refs/heads/master', 'README.md') }
+
+ subject(:link) { helper.ide_edit_button(project, 'master', 'README.md', blob: blob) }
+
+ before do
+ allow(helper).to receive(:current_user).and_return(current_user)
+ allow(helper).to receive(:can?).with(current_user, :push_code, project).and_return(can_push_code)
+ allow(helper).to receive(:can_collaborate_with_project?).and_return(true)
+ end
+
+ it 'returns a link with a Web IDE route' do
+ expect(Capybara.string(link).find_link('Web IDE')[:href]).to eq("/-/ide/project/#{project.full_path}/edit/master/-/README.md")
+ end
+
+ context 'when edit is the primary button' do
+ before do
+ stub_feature_flags(web_ide_primary_edit: false)
+ end
+
+ it 'is rendered as inverted' do
+ expect(link).to match(/btn-inverted/)
+ end
+
+ it 'passes on secondary tracking attributes' do
+ parsed_link = Capybara.string(link).find_link('Web IDE')
+
+ expect(parsed_link[:'data-track-event']).to eq("click_edit_ide")
+ expect(parsed_link[:'data-track-label']).to eq("Web IDE")
+ expect(parsed_link[:'data-track-property']).to eq("secondary")
+ end
+ end
+
+ context 'when Web IDE is the primary button' do
+ before do
+ stub_feature_flags(web_ide_primary_edit: true)
+ end
+
+ it 'is rendered as primary' do
+ expect(link).not_to match(/btn-inverted/)
+ end
+
+ it 'passes on primary tracking attributes' do
+ parsed_link = Capybara.string(link).find_link('Web IDE')
+
+ expect(parsed_link[:'data-track-event']).to eq("click_edit_ide")
+ expect(parsed_link[:'data-track-label']).to eq("Web IDE")
+ expect(parsed_link[:'data-track-property']).to eq(nil)
+ end
+ end
+ end
+
describe '#ide_edit_path' do
let(:project) { create(:project) }
let(:current_user) { create(:user) }