2019-10-12 21:52:04 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
require 'spec_helper'
|
|
|
|
|
2018-11-08 19:23:39 +05:30
|
|
|
describe 'Snippet', :js do
|
2017-08-17 22:00:37 +05:30
|
|
|
let(:project) { create(:project, :repository) }
|
|
|
|
let(:snippet) { create(:personal_snippet, :public, file_name: file_name, content: content) }
|
|
|
|
|
2020-01-01 13:55:28 +05:30
|
|
|
before do
|
|
|
|
stub_feature_flags(snippets_vue: false)
|
|
|
|
end
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
context 'Ruby file' do
|
|
|
|
let(:file_name) { 'popen.rb' }
|
|
|
|
let(:content) { project.repository.blob_at('master', 'files/ruby/popen.rb').data }
|
|
|
|
|
|
|
|
before do
|
|
|
|
visit snippet_path(snippet)
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
wait_for_requests
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays the blob' do
|
|
|
|
aggregate_failures do
|
|
|
|
# shows highlighted Ruby code
|
|
|
|
expect(page).to have_content("require 'fileutils'")
|
|
|
|
|
|
|
|
# does not show a viewer switcher
|
|
|
|
expect(page).not_to have_selector('.js-blob-viewer-switcher')
|
|
|
|
|
|
|
|
# shows an enabled copy button
|
|
|
|
expect(page).to have_selector('.js-copy-blob-source-btn:not(.disabled)')
|
|
|
|
|
|
|
|
# shows a raw button
|
|
|
|
expect(page).to have_link('Open raw')
|
|
|
|
|
|
|
|
# shows a download button
|
|
|
|
expect(page).to have_link('Download')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'Markdown file' do
|
|
|
|
let(:file_name) { 'ruby-style-guide.md' }
|
|
|
|
let(:content) { project.repository.blob_at('master', 'files/markdown/ruby-style-guide.md').data }
|
|
|
|
|
|
|
|
context 'visiting directly' do
|
|
|
|
before do
|
|
|
|
visit snippet_path(snippet)
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
wait_for_requests
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays the blob using the rich viewer' do
|
|
|
|
aggregate_failures do
|
|
|
|
# hides the simple viewer
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="simple"]', visible: false)
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="rich"]')
|
|
|
|
|
|
|
|
# shows rendered Markdown
|
|
|
|
expect(page).to have_link("PEP-8")
|
|
|
|
|
|
|
|
# shows a viewer switcher
|
|
|
|
expect(page).to have_selector('.js-blob-viewer-switcher')
|
|
|
|
|
|
|
|
# shows a disabled copy button
|
|
|
|
expect(page).to have_selector('.js-copy-blob-source-btn.disabled')
|
|
|
|
|
|
|
|
# shows a raw button
|
|
|
|
expect(page).to have_link('Open raw')
|
|
|
|
|
|
|
|
# shows a download button
|
|
|
|
expect(page).to have_link('Download')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-11-20 20:47:30 +05:30
|
|
|
context 'Markdown rendering' do
|
|
|
|
let(:snippet) { create(:personal_snippet, :public, file_name: file_name, content: content) }
|
2018-11-08 19:23:39 +05:30
|
|
|
let(:file_name) { 'test.md' }
|
|
|
|
let(:content) { "1. one\n - sublist\n" }
|
|
|
|
|
2018-11-20 20:47:30 +05:30
|
|
|
context 'when rendering default markdown' do
|
|
|
|
it 'renders using CommonMark' do
|
|
|
|
expect(page).to have_content("sublist")
|
|
|
|
expect(page).not_to have_xpath("//ol//li//ul")
|
|
|
|
end
|
2018-11-08 19:23:39 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
context 'switching to the simple viewer' do
|
|
|
|
before do
|
|
|
|
find('.js-blob-viewer-switch-btn[data-viewer=simple]').click
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
wait_for_requests
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays the blob using the simple viewer' do
|
|
|
|
aggregate_failures do
|
|
|
|
# hides the rich viewer
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="simple"]')
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="rich"]', visible: false)
|
|
|
|
|
|
|
|
# shows highlighted Markdown code
|
|
|
|
expect(page).to have_content("[PEP-8](http://www.python.org/dev/peps/pep-0008/)")
|
|
|
|
|
|
|
|
# shows an enabled copy button
|
|
|
|
expect(page).to have_selector('.js-copy-blob-source-btn:not(.disabled)')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'switching to the rich viewer again' do
|
|
|
|
before do
|
|
|
|
find('.js-blob-viewer-switch-btn[data-viewer=rich]').click
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
wait_for_requests
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays the blob using the rich viewer' do
|
|
|
|
aggregate_failures do
|
|
|
|
# hides the simple viewer
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="simple"]', visible: false)
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="rich"]')
|
|
|
|
|
|
|
|
# shows an enabled copy button
|
|
|
|
expect(page).to have_selector('.js-copy-blob-source-btn:not(.disabled)')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'visiting with a line number anchor' do
|
|
|
|
before do
|
|
|
|
visit snippet_path(snippet, anchor: 'L1')
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
wait_for_requests
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays the blob using the simple viewer' do
|
|
|
|
aggregate_failures do
|
|
|
|
# hides the rich viewer
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="simple"]')
|
|
|
|
expect(page).to have_selector('.blob-viewer[data-type="rich"]', visible: false)
|
|
|
|
|
|
|
|
# highlights the line in question
|
|
|
|
expect(page).to have_selector('#LC1.hll')
|
|
|
|
|
|
|
|
# shows highlighted Markdown code
|
|
|
|
expect(page).to have_content("[PEP-8](http://www.python.org/dev/peps/pep-0008/)")
|
|
|
|
|
|
|
|
# shows an enabled copy button
|
|
|
|
expect(page).to have_selector('.js-copy-blob-source-btn:not(.disabled)')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-11-18 11:00:15 +05:30
|
|
|
|
|
|
|
it_behaves_like 'showing user status' do
|
|
|
|
let(:file_name) { 'popen.rb' }
|
|
|
|
let(:content) { project.repository.blob_at('master', 'files/ruby/popen.rb').data }
|
|
|
|
let(:user_with_status) { snippet.author }
|
|
|
|
|
|
|
|
subject { visit snippet_path(snippet) }
|
|
|
|
end
|
2020-01-01 13:55:28 +05:30
|
|
|
|
|
|
|
context 'when user cannot create snippets' do
|
|
|
|
let(:user) { create(:user, :external) }
|
|
|
|
let(:snippet) { create(:personal_snippet, :public) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
sign_in(user)
|
|
|
|
|
|
|
|
visit snippet_path(snippet)
|
|
|
|
|
|
|
|
wait_for_requests
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does not show the "New Snippet" button' do
|
|
|
|
expect(page).not_to have_link('New snippet')
|
|
|
|
end
|
|
|
|
end
|
2017-08-17 22:00:37 +05:30
|
|
|
end
|