From 7e9c479f7de77702622631cff2628a9c8dcbc627 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 19 Nov 2020 08:27:35 +0000 Subject: Add latest changes from gitlab-org/gitlab@13-6-stable-ee --- spec/helpers/breadcrumbs_helper_spec.rb | 145 ++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 spec/helpers/breadcrumbs_helper_spec.rb (limited to 'spec/helpers/breadcrumbs_helper_spec.rb') diff --git a/spec/helpers/breadcrumbs_helper_spec.rb b/spec/helpers/breadcrumbs_helper_spec.rb new file mode 100644 index 00000000000..8e2a684656b --- /dev/null +++ b/spec/helpers/breadcrumbs_helper_spec.rb @@ -0,0 +1,145 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe BreadcrumbsHelper do + describe '#push_to_schema_breadcrumb' do + let(:element_name) { 'BreadCrumbElement' } + let(:link) { 'http://test.host/foo' } + let(:breadcrumb_list) { helper.instance_variable_get(:@schema_breadcrumb_list) } + + subject { helper.push_to_schema_breadcrumb(element_name, link) } + + it 'enqueue element name, link and position' do + subject + + aggregate_failures do + expect(breadcrumb_list[0]['name']).to eq element_name + expect(breadcrumb_list[0]['item']).to eq link + expect(breadcrumb_list[0]['position']).to eq(1) + end + end + + context 'when link is relative' do + let(:link) { '/foo' } + + it 'converts the url into absolute' do + subject + + expect(breadcrumb_list[0]['item']).to eq "http://test.host#{link}" + end + end + + describe 'when link is invalid' do + let(:link) { 'invalid://foo[]' } + + it 'returns the current url' do + subject + + expect(breadcrumb_list[0]['item']).to eq 'http://test.host' + end + end + + describe 'when link is nil' do + let(:link) { nil } + + it 'returns the current url' do + subject + + expect(breadcrumb_list[0]['item']).to eq 'http://test.host' + end + end + end + + describe '#schema_breadcrumb_json' do + let(:elements) do + [ + %w(element1 http://test.host/link1), + %w(element2 http://test.host/link2) + ] + end + + subject { helper.schema_breadcrumb_json } + + it 'returns the breadcrumb schema in json format' do + enqueue_breadcrumb_elements + + expected_result = { + '@context' => 'https://schema.org', + '@type' => 'BreadcrumbList', + 'itemListElement' => [ + { + '@type' => 'ListItem', + 'position' => 1, + 'name' => elements[0][0], + 'item' => elements[0][1] + }, + { + '@type' => 'ListItem', + 'position' => 2, + 'name' => elements[1][0], + 'item' => elements[1][1] + } + ] + }.to_json + + expect(subject).to eq expected_result + end + + context 'when extra breadcrumb element is added' do + let(:extra_elements) do + [ + %w(extra_element1 http://test.host/extra_link1), + %w(extra_element2 http://test.host/extra_link2) + ] + end + + it 'include the extra elements before the last element' do + enqueue_breadcrumb_elements + + extra_elements.each do |el| + add_to_breadcrumbs(el[0], el[1]) + end + + expected_result = { + '@context' => 'https://schema.org', + '@type' => 'BreadcrumbList', + 'itemListElement' => [ + { + '@type' => 'ListItem', + 'position' => 1, + 'name' => elements[0][0], + 'item' => elements[0][1] + }, + { + '@type' => 'ListItem', + 'position' => 2, + 'name' => extra_elements[0][0], + 'item' => extra_elements[0][1] + }, + { + '@type' => 'ListItem', + 'position' => 3, + 'name' => extra_elements[1][0], + 'item' => extra_elements[1][1] + }, + { + '@type' => 'ListItem', + 'position' => 4, + 'name' => elements[1][0], + 'item' => elements[1][1] + } + ] + }.to_json + + expect(subject).to eq expected_result + end + end + + def enqueue_breadcrumb_elements + elements.each do |el| + helper.push_to_schema_breadcrumb(el[0], el[1]) + end + end + end +end -- cgit v1.2.3