integtest/spec/all_books_sources_spec.rb (240 lines of code) (raw):

# frozen_string_literal: true ## # Assertions about what sources books can use. RSpec.describe 'building all books' do describe 'with interesting sources' do describe 'the docs repo' do def self.init_docs_repo(src) repo = src.repo 'docs' repo.copy_shared_conf repo.commit 'add shared conf' repo end let(:docs_repo) { src.repo 'docs' } let(:hash) { docs_repo.short_hash } let(:master_version) do contents = docs_repo.read 'shared/versions/stack/master.asciidoc' m = contents.match(/:elasticsearch_version:\s+(.+)\n/) raise "couldn't parse #{contents}" unless m m[1] end let(:current_target) do contents = docs_repo.read 'shared/versions/stack/current.asciidoc' m = contents.match(/include::(.+)\[\]/) raise "couldn't parse #{contents}" unless m m[1] end let(:master_ece_version) do contents = docs_repo.read 'shared/versions/ece/master.asciidoc' m = contents.match(/:ece-version:\s+(.+)\n/) raise "couldn't parse #{contents}" unless m m[1] end let(:current_version) do contents = docs_repo.read "shared/versions/stack/#{current_target}" m = contents.match(/:elasticsearch_version:\s+(.+)\n/) raise "couldn't parse #{contents}" unless m m[1] end let(:current_ece_target) do contents = docs_repo.read 'shared/versions/ece/current.asciidoc' m = contents.match(/include::(.+)\[\]/) raise "couldn't parse #{contents}" unless m m[1] end let(:current_ece_version) do contents = docs_repo.read "shared/versions/ece/#{current_ece_target}" m = contents.match(/:ece-version:\s+(.+)\n/) raise "couldn't parse #{contents}" unless m m[1] end describe 'attributes file' do convert_all_before_context do |src| repo = src.repo_with_index 'repo', <<~ASCIIDOC include::{docs-root}/shared/attributes.asciidoc[] {stack} ASCIIDOC book = src.book 'Test' book.source repo, 'index.asciidoc' book.source init_docs_repo(src), 'shared/attributes.asciidoc' end page_context 'raw/test/current/chapter.html' do it 'resolves an attribute from the docs repo' do expect(body).to include(<<~HTML.strip) <p>Elastic Stack</p> HTML end end file_context 'html/branches.yaml' do it 'references the hash of the docs repo' do expect(contents).to include(<<~LOG.strip) Test/shared/attributes.asciidoc/master: #{hash} LOG end end end describe 'stack versions files' do convert_all_before_context do |src| extra_branches = ['5.5', '6.3', '7.2'] repo = src.repo_with_index 'repo', <<~ASCIIDOC include::{docs-root}/shared/versions/stack/{source_branch}.asciidoc[] {elasticsearch_version} ASCIIDOC extra_branches.each { |b| repo.switch_to_new_branch b } docs_repo = init_docs_repo src book = src.book 'Test' book.branches += extra_branches book.source repo, 'index.asciidoc' book.source docs_repo, 'shared/versions/stack/{branch}.asciidoc' end shared_examples 'resolved attribute' do |branch, value| page_context "raw/test/#{branch}/chapter.html" do it 'resolves an attribute from the docs repo' do expect(body).to include(<<~HTML.strip) <p>#{value == 'master' ? master_version : value}</p> HTML end end end include_examples 'resolved attribute', 'master', 'master' include_examples 'resolved attribute', '7.2', '7.2.1' include_examples 'resolved attribute', '6.3', '6.3.2' include_examples 'resolved attribute', '5.5', '5.5.3' file_context 'html/branches.yaml' do shared_examples 'references the real path' do |branch| context "#{branch} branch" do it 'references the real path' do expect(contents).to include(<<~LOG.strip) Test/shared/versions/stack/#{branch}.asciidoc/#{branch}: #{hash} LOG end end end include_examples 'references the real path', 'master' include_examples 'references the real path', '7.2' include_examples 'references the real path', '6.3' include_examples 'references the real path', '5.5' end end describe 'the current stack version file' do convert_all_before_context do |src| repo = src.repo_with_index 'repo', <<~ASCIIDOC include::{docs-root}/shared/versions/stack/current.asciidoc[] {elasticsearch_version} ASCIIDOC docs_repo = init_docs_repo src book = src.book 'Test' book.source repo, 'index.asciidoc' book.source docs_repo, 'shared/versions/stack/current.asciidoc' end page_context 'raw/test/current/chapter.html' do it 'resolves an attribute from the docs repo' do expect(body).to include(<<~HTML.strip) <p>#{current_version}</p> HTML end end file_context 'html/branches.yaml' do it 'references current.asciidoc' do expect(contents).to include(<<~LOG.strip) Test/shared/versions/stack/current.asciidoc/master: #{hash} LOG end it "references current.asciidoc's target" do expect(contents).to include(<<~LOG.strip) Test/shared/versions/stack/#{current_target}/master: #{hash} LOG end end end describe 'ece versions files' do convert_all_before_context do |src| extra_branches = ['ms-92'] repo = src.repo_with_index 'repo', <<~ASCIIDOC include::{docs-root}/shared/versions/ece/{source_branch}.asciidoc[] {ece-version} ASCIIDOC extra_branches.each { |b| repo.switch_to_new_branch b } docs_repo = init_docs_repo src book = src.book 'Test' book.branches += extra_branches book.source repo, 'index.asciidoc' book.source docs_repo, 'shared/versions/ece/{branch}.asciidoc' end shared_examples 'resolved ece attribute' do |branch, value| page_context "raw/test/#{branch}/chapter.html" do it 'resolves an attribute from the docs repo' do expect(body).to include(<<~HTML.strip) <p>#{value == 'master' ? master_ece_version : value}</p> HTML end end end include_examples 'resolved ece attribute', 'ms-92', '3.6.2' file_context 'html/branches.yaml' do shared_examples 'references the real path' do |branch| context "#{branch} branch" do it 'references the real path' do expect(contents).to include(<<~LOG.strip) Test/shared/versions/ece/#{branch}.asciidoc/#{branch}: #{hash} LOG end end end include_examples 'references the real path', 'ms-92' end end describe 'the current ece version file' do convert_all_before_context do |src| repo = src.repo_with_index 'repo', <<~ASCIIDOC include::{docs-root}/shared/versions/ece/current.asciidoc[] {ece-version} ASCIIDOC docs_repo = init_docs_repo src book = src.book 'Test' book.source repo, 'index.asciidoc' book.source docs_repo, 'shared/versions/ece/current.asciidoc' end page_context 'raw/test/current/chapter.html' do it 'resolves an attribute from the docs repo' do expect(body).to include(<<~HTML.strip) <p>#{current_ece_version}</p> HTML end end file_context 'html/branches.yaml' do it 'references current.asciidoc' do expect(contents).to include(<<~LOG.strip) Test/shared/versions/ece/current.asciidoc/master: #{hash} LOG end it "references current.asciidoc's target" do expect(contents).to include(<<~LOG.strip) Test/shared/versions/ece/#{current_ece_target}/master: #{hash} LOG end end end describe 'when the build fails' do convert_before do |src, dest| repo = src.repo_with_index 'repo', 'include::garbage.adoc[]' book = src.book 'Test' docs_repo = init_docs_repo src docs_repo.write 'garbage.txt', 'garbage' docs_repo.commit 'ignored by error reporting' book.source repo, 'index.asciidoc' book.source docs_repo, 'shared/attributes.asciidoc' dest.prepare_convert_all(src.conf).convert expect_failure: true end context 'the logs' do it 'contain the a sensible header for the docs' do expect(outputs[0]).to include(<<~LOGS.strip) Recent commits in docs/Test:HEAD:shared/attributes.asciidoc LOGS end let(:hash) { docs_repo.last_commit 'shared/attributes.asciidoc' } it 'contain the last commit that changed attributes.asciidoc' do expect(outputs[0]).to include(hash) end end end end end end