diff options
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/banzai/filter/wiki_link_filter_spec.rb | 13 | ||||
-rw-r--r-- | spec/lib/banzai/pipeline/wiki_pipeline_spec.rb | 209 | ||||
-rw-r--r-- | spec/lib/gitlab/tracking_spec.rb | 4 | ||||
-rw-r--r-- | spec/lib/gitlab/url_builder_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_spec.rb | 10 | ||||
-rw-r--r-- | spec/lib/gitlab/utils_spec.rb | 37 |
6 files changed, 107 insertions, 168 deletions
diff --git a/spec/lib/banzai/filter/wiki_link_filter_spec.rb b/spec/lib/banzai/filter/wiki_link_filter_spec.rb index 7a83dc3ec1d..4587bd85939 100644 --- a/spec/lib/banzai/filter/wiki_link_filter_spec.rb +++ b/spec/lib/banzai/filter/wiki_link_filter_spec.rb @@ -11,10 +11,6 @@ describe Banzai::Filter::WikiLinkFilter do let(:wiki) { ProjectWiki.new(project, user) } let(:repository_upload_folder) { Wikis::CreateAttachmentService::ATTACHMENT_PATH } - def upload_href(file_name) - ::File.join(wiki.wiki_page_path, repository_upload_folder, file_name) - end - it "doesn't rewrite absolute links" do filtered_link = filter("<a href='http://example.com:8000/'>Link</a>", project_wiki: wiki).children[0] @@ -32,12 +28,12 @@ describe Banzai::Filter::WikiLinkFilter do it 'rewrites links' do filtered_link = filter("<a href='#{repository_upload_folder}/a.test'>Link</a>", project_wiki: wiki).children[0] - expect(filtered_link.attribute('href').value).to eq(upload_href "a.test") + expect(filtered_link.attribute('href').value).to eq("#{wiki.wiki_base_path}/#{repository_upload_folder}/a.test") end end context 'with "img" html tag' do - let(:path) { upload_href "a.jpg" } + let(:path) { "#{wiki.wiki_base_path}/#{repository_upload_folder}/a.jpg" } context 'inside an "a" html tag' do it 'rewrites links' do @@ -61,7 +57,7 @@ describe Banzai::Filter::WikiLinkFilter do it 'rewrites links' do filtered_link = filter("<video src='#{repository_upload_folder}/a.mp4'></video>", project_wiki: wiki).children[0] - expect(filtered_link.attribute('src').value).to eq(upload_href "a.mp4") + expect(filtered_link.attribute('src').value).to eq("#{wiki.wiki_base_path}/#{repository_upload_folder}/a.mp4") end end @@ -69,8 +65,7 @@ describe Banzai::Filter::WikiLinkFilter do it 'rewrites links' do filtered_link = filter("<audio src='#{repository_upload_folder}/a.wav'></audio>", project_wiki: wiki).children[0] - # expect(filtered_link.attribute('src').value).to eq("#{wiki.wiki_base_path}/#{repository_upload_folder}/a.wav") - expect(filtered_link.attribute('src').value).to eq(upload_href "a.wav") + expect(filtered_link.attribute('src').value).to eq("#{wiki.wiki_base_path}/#{repository_upload_folder}/a.wav") end end end diff --git a/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb b/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb index 7f60106cdca..26f2b0b0acf 100644 --- a/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb +++ b/spec/lib/banzai/pipeline/wiki_pipeline_spec.rb @@ -3,12 +3,6 @@ require 'spec_helper' describe Banzai::Pipeline::WikiPipeline do - let_it_be(:namespace) { create(:namespace, name: "wiki_link_ns") } - let_it_be(:project) { create(:project, :public, name: "wiki_link_project", namespace: namespace) } - let_it_be(:project_wiki) { ProjectWiki.new(project, double(:user)) } - let_it_be(:page) { build(:wiki_page, wiki: project_wiki, page: OpenStruct.new(url_path: 'nested/twice/start-page')) } - let(:prefix) { project_wiki.wiki_page_path } - describe 'TableOfContents' do it 'replaces the tag with the TableOfContentsFilter result' do markdown = <<-MD.strip_heredoc @@ -60,138 +54,132 @@ describe Banzai::Pipeline::WikiPipeline do end describe "Links" do - shared_examples 'a correct link rewrite' do - it 'rewrites links correctly' do - output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - - expect(output).to include("href=\"#{page_href}\"") - end - end - - shared_examples 'link examples' do |test_name| - let(:page_href) { "#{prefix}/#{expected_page_path}" } - - context "when GitLab is hosted at a #{test_name} URL" do + let(:namespace) { create(:namespace, name: "wiki_link_ns") } + let(:project) { create(:project, :public, name: "wiki_link_project", namespace: namespace) } + let(:project_wiki) { ProjectWiki.new(project, double(:user)) } + let(:page) { build(:wiki_page, wiki: project_wiki, page: OpenStruct.new(url_path: 'nested/twice/start-page')) } + + { "when GitLab is hosted at a root URL" => '/', + "when GitLab is hosted at a relative URL" => '/nested/relative/gitlab' }.each do |test_name, relative_url_root| + context test_name do before do allow(Gitlab.config.gitlab).to receive(:relative_url_root).and_return(relative_url_root) end describe "linking to pages within the wiki" do - let(:markdown) { "[Page](#{nesting}page#{extension})" } - context "when creating hierarchical links to the current directory" do - let(:nesting) { './' } - context 'non file links' do - let(:extension) { '' } - let(:expected_page_path) { 'nested/twice/page' } - it_behaves_like 'a correct link rewrite' + it "rewrites non-file links to be at the scope of the current directory" do + markdown = "[Page](./page)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/nested/twice/page\"") end - context 'file-like links' do - let(:extension) { '.md' } - let(:expected_page_path) { 'nested/twice/page.md' } - it_behaves_like 'a correct link rewrite' + it "rewrites file links to be at the scope of the current directory" do + markdown = "[Link to Page](./page.md)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/nested/twice/page.md\"") end end context "when creating hierarchical links to the parent directory" do - let(:nesting) { '../' } - context "non file links" do - let(:extension) { '' } - let(:expected_page_path) { 'nested/page' } - it_behaves_like 'a correct link rewrite' + it "rewrites non-file links to be at the scope of the parent directory" do + markdown = "[Link to Page](../page)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/nested/page\"") end - context "file-like links" do - let(:extension) { '.md' } - let(:expected_page_path) { 'nested/page.md' } - it_behaves_like 'a correct link rewrite' + it "rewrites file links to be at the scope of the parent directory" do + markdown = "[Link to Page](../page.md)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/nested/page.md\"") end end context "when creating hierarchical links to a sub-directory" do - let(:nesting) { './subdirectory/' } + it "rewrites non-file links to be at the scope of the sub-directory" do + markdown = "[Link to Page](./subdirectory/page)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - context "non file links" do - let(:extension) { '' } - let(:expected_page_path) { 'nested/twice/subdirectory/page' } - it_behaves_like 'a correct link rewrite' + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/nested/twice/subdirectory/page\"") end - context 'file-like links' do - let(:extension) { '.md' } - let(:expected_page_path) { 'nested/twice/subdirectory/page.md' } - it_behaves_like 'a correct link rewrite' + it "rewrites file links to be at the scope of the sub-directory" do + markdown = "[Link to Page](./subdirectory/page.md)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/nested/twice/subdirectory/page.md\"") end end describe "when creating non-hierarchical links" do - let(:nesting) { '' } + it 'rewrites non-file links to be at the scope of the wiki root' do + markdown = "[Link to Page](page)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - context 'non-file links' do - let(:extension) { '' } - let(:expected_page_path) { 'page' } - it_behaves_like 'a correct link rewrite' + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/page\"") end - context 'non-file links (with spaces)' do - let(:extension) { ' slug' } - let(:expected_page_path) { 'page%20slug' } - it_behaves_like 'a correct link rewrite' + it 'rewrites non-file links (with spaces) to be at the scope of the wiki root' do + markdown = "[Link to Page](page slug)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/page%20slug\"") end - context "file links" do - let(:extension) { '.md' } - let(:expected_page_path) { 'nested/twice/page.md' } - it_behaves_like 'a correct link rewrite' + it "rewrites file links to be at the scope of the current directory" do + markdown = "[Link to Page](page.md)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/nested/twice/page.md\"") end - context 'links with anchor' do - let(:extension) { '#title' } - let(:expected_page_path) { 'page#title' } - it_behaves_like 'a correct link rewrite' + it 'rewrites links with anchor' do + markdown = '[Link to Header](start-page#title)' + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/start-page#title\"") end - context 'links (with spaces) with anchor' do - let(:extension) { ' two#title' } - let(:expected_page_path) { 'page%20two#title' } - it_behaves_like 'a correct link rewrite' + it 'rewrites links (with spaces) with anchor' do + markdown = '[Link to Header](start page#title)' + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/start%20page#title\"") end end describe "when creating root links" do - let(:nesting) { '/' } + it 'rewrites non-file links to be at the scope of the wiki root' do + markdown = "[Link to Page](/page)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - context 'non-file links' do - let(:extension) { '' } - let(:expected_page_path) { 'page' } - it_behaves_like 'a correct link rewrite' + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/page\"") end - context 'file links' do - let(:extension) { '.md' } - let(:expected_page_path) { 'page.md' } - it_behaves_like 'a correct link rewrite' + it 'rewrites file links to be at the scope of the wiki root' do + markdown = "[Link to Page](/page.md)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include("href=\"#{relative_url_root}/wiki_link_ns/wiki_link_project/wikis/page.md\"") end end end describe "linking to pages outside the wiki (absolute)" do - let(:markdown) { "[Link to Page](http://example.com/page)" } - let(:page_href) { 'http://example.com/page' } - it_behaves_like 'a correct link rewrite' + it "doesn't rewrite links" do + markdown = "[Link to Page](http://example.com/page)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) + + expect(output).to include('href="http://example.com/page"') + end end end end - include_examples 'link examples', :root do - let(:relative_url_root) { '/' } - end - - include_examples 'link examples', :relative do - let(:relative_url_root) { '/nested/relative/gitlab' } - end - describe "checking slug validity when assembling links" do context "with a valid slug" do let(:valid_slug) { "http://example.com" } @@ -273,54 +261,37 @@ describe Banzai::Pipeline::WikiPipeline do end describe 'videos and audio' do - def src(file_name) - "#{prefix}/nested/twice/#{file_name}" - end - - shared_examples 'correct video rewrite' do - let(:markdown) { "![video_file](#{file_name})" } - let(:video_fragment) { "<video src=\"#{prefix}/#{expected_file_path}\"" } - let(:options) do - { - project: project, - project_wiki: project_wiki, - page_slug: page.slug - } - end + let_it_be(:namespace) { create(:namespace, name: "wiki_link_ns") } + let_it_be(:project) { create(:project, :public, name: "wiki_link_project", namespace: namespace) } + let_it_be(:project_wiki) { ProjectWiki.new(project, double(:user)) } + let_it_be(:page) { build(:wiki_page, wiki: project_wiki, page: OpenStruct.new(url_path: 'nested/twice/start-page')) } - it 'generates video html structure' do - output = described_class.to_html(markdown, options) + it 'generates video html structure' do + markdown = "![video_file](video_file_name.mp4)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - expect(output).to include(video_fragment) - end + expect(output).to include('<video src="/wiki_link_ns/wiki_link_project/wikis/nested/twice/video_file_name.mp4"') end - context 'underscores' do - let(:file_name) { 'video_file_name.mp4' } - let(:expected_file_path) { 'nested/twice/video_file_name.mp4' } - it_behaves_like 'correct video rewrite' - end + it 'rewrites and replaces video links names with white spaces to %20' do + markdown = "![video file](video file name.mp4)" + output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - context 'spaces' do - let(:file_name) { 'video file name.mp4' } - let(:expected_file_path) { 'nested/twice/video%20file%20name.mp4' } - it_behaves_like 'correct video rewrite' + expect(output).to include('<video src="/wiki_link_ns/wiki_link_project/wikis/nested/twice/video%20file%20name.mp4"') end it 'generates audio html structure' do markdown = "![audio_file](audio_file_name.wav)" - safe_name = "audio_file_name.wav" output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - expect(output).to include(%Q'<audio src="#{src(safe_name)}"') + expect(output).to include('<audio src="/wiki_link_ns/wiki_link_project/wikis/nested/twice/audio_file_name.wav"') end it 'rewrites and replaces audio links names with white spaces to %20' do markdown = "![audio file](audio file name.wav)" - safe_name = "audio%20file%20name.wav" output = described_class.to_html(markdown, project: project, project_wiki: project_wiki, page_slug: page.slug) - expect(output).to include(%Q'<audio src="#{src(safe_name)}"') + expect(output).to include('<audio src="/wiki_link_ns/wiki_link_project/wikis/nested/twice/audio%20file%20name.wav"') end end end diff --git a/spec/lib/gitlab/tracking_spec.rb b/spec/lib/gitlab/tracking_spec.rb index 3ceaf159b3f..0bb9d6c331f 100644 --- a/spec/lib/gitlab/tracking_spec.rb +++ b/spec/lib/gitlab/tracking_spec.rb @@ -9,6 +9,7 @@ describe Gitlab::Tracking do stub_application_setting(snowplow_collector_hostname: 'gitfoo.com') stub_application_setting(snowplow_cookie_domain: '.gitfoo.com') stub_application_setting(snowplow_site_id: '_abc123_') + stub_application_setting(snowplow_iglu_registry_url: 'https://example.org') end describe '.snowplow_options' do @@ -19,7 +20,8 @@ describe Gitlab::Tracking do cookieDomain: '.gitfoo.com', appId: '_abc123_', formTracking: true, - linkClickTracking: true + linkClickTracking: true, + igluRegistryUrl: 'https://example.org' } expect(subject.snowplow_options(nil)).to match(expected_fields) diff --git a/spec/lib/gitlab/url_builder_spec.rb b/spec/lib/gitlab/url_builder_spec.rb index 4ed2c232f97..08d3c638f9e 100644 --- a/spec/lib/gitlab/url_builder_spec.rb +++ b/spec/lib/gitlab/url_builder_spec.rb @@ -150,7 +150,7 @@ describe Gitlab::UrlBuilder do wiki_page = build(:wiki_page) url = described_class.build(wiki_page) - expect(url).to eq "#{Gitlab.config.gitlab.url}#{wiki_page.wiki.wiki_page_path}/#{wiki_page.slug}" + expect(url).to eq "#{Gitlab.config.gitlab.url}#{wiki_page.wiki.wiki_base_path}/#{wiki_page.slug}" end end end diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 8ecab12ca28..4b6c878b20d 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -19,7 +19,11 @@ describe Gitlab::UsageData do create(:service, project: projects[2], type: 'SlackService', active: true) create(:project_error_tracking_setting, project: projects[0]) create(:project_error_tracking_setting, project: projects[1], enabled: false) - + create_list(:issue, 4, project: projects[0]) + create(:zoom_meeting, project: projects[0], issue: projects[0].issues[0], issue_status: :added) + create_list(:zoom_meeting, 2, project: projects[0], issue: projects[0].issues[1], issue_status: :removed) + create(:zoom_meeting, project: projects[0], issue: projects[0].issues[2], issue_status: :added) + create_list(:zoom_meeting, 2, project: projects[0], issue: projects[0].issues[2], issue_status: :removed) gcp_cluster = create(:cluster, :provided_by_gcp) create(:cluster, :provided_by_user) create(:cluster, :provided_by_user, :disabled) @@ -125,6 +129,8 @@ describe Gitlab::UsageData do in_review_folder groups issues + issues_with_associated_zoom_link + issues_using_zoom_quick_actions keys label_lists labels @@ -176,6 +182,8 @@ describe Gitlab::UsageData do expect(count_data[:projects_slack_slash_active]).to eq(1) expect(count_data[:projects_with_repositories_enabled]).to eq(3) expect(count_data[:projects_with_error_tracking_enabled]).to eq(1) + expect(count_data[:issues_with_associated_zoom_link]).to eq(2) + expect(count_data[:issues_using_zoom_quick_actions]).to eq(3) expect(count_data[:clusters_enabled]).to eq(7) expect(count_data[:project_clusters_enabled]).to eq(6) diff --git a/spec/lib/gitlab/utils_spec.rb b/spec/lib/gitlab/utils_spec.rb index a68434c8c66..890918d4a7c 100644 --- a/spec/lib/gitlab/utils_spec.rb +++ b/spec/lib/gitlab/utils_spec.rb @@ -252,41 +252,4 @@ describe Gitlab::Utils do expect(described_class.string_to_ip_object('1:0:0:0:0:0:0:0/124')).to eq(IPAddr.new('1:0:0:0:0:0:0:0/124')) end end - - describe '.allow_hash_values' do - it 'removes keys that do not pass the inclusion filters' do - symbols = %i[x y z] - ints = (0..100) - strings = %w[foo bar baz].to_set - - hash = { - a: :x, - b: 100, - c: 'foo', - d: :irrelevant, - aa: :w, - bb: 200, - cc: 'food', - dd: :totally_irrelevant - } - allowed = { - a: symbols, - b: ints, - c: strings, - aa: symbols, - bb: ints, - cc: strings - } - - described_class.allow_hash_values(hash, allowed) - - expect(hash).to eq({ - a: :x, - b: 100, - c: 'foo', - d: :irrelevant, - dd: :totally_irrelevant - }) - end - end end |