integtest/spec/helper/dsl/convert_all.rb (94 lines of code) (raw):
# frozen_string_literal: true
module Dsl
module ConvertAll
##
# Include a context into the current context that converts "all books" as
# configured by a conf file. Pass a block that takes a `Source` object and
# uses it to:
# 1. Create source repositories and write them
# 2. Configure the books that should be built
def convert_all_before_context(relative_conf: false, target_branch: nil,
init_from_shell: true)
# TODO: simplify this in the style of builders
convert_before do |src, dest|
yield src
dest.init_from_shell = init_from_shell
c = dest.prepare_convert_all(src.conf(relative_path: relative_conf))
c.target_branch(target_branch) if target_branch
c.convert
dest.checkout_conversion branch: target_branch
end
include_examples 'convert all'
end
shared_context 'convert all' do
let(:out) { outputs[0] }
include_examples 'builds all books'
include_examples 'convert all basics'
end
shared_examples 'builds all books' do
it 'prints that it is updating repositories' do
expect(out).to include('Updating repositories')
end
it 'prints that it is building all versions of every book' do
books.each_value do |book|
book.branches.each do |branch|
version = branch
if branch.is_a?(Hash)
branch.each do |_k, v|
version = v
end
end
expect(out).to include("#{book.title}: Building #{version}...")
expect(out).to include("#{book.title}: Finished #{version}")
end
end
end
include_examples 'commits changes'
end
shared_examples 'commits changes' do
it 'prints that it is commiting changes' do
expect(out).to include('Commiting changes')
end
it 'prints that it is pushing changes' do
expect(out).to include('Pushing changes')
end
end
shared_examples 'convert all basics' do
it 'creates redirects.conf' do
expect(dest_file('redirects.conf')).to file_exist
end
it 'creates html/branches.yaml' do
expect(dest_file('html/branches.yaml')).to file_exist
end
page_context 'the global index', 'html/index.html' do
it 'contains a link to the current verion of each book' do
books.each_value do |book|
expect(body).to include(book.link_to('current'))
end
end
end
file_context 'html/static/docs-v1.js' do
it 'is minified' do
expect(contents).to include(<<~JS.strip)
return a&&a.__esModule?{d:a.default}:{d:a}
JS
end
it "doesn't include a source map" do
expect(contents).not_to include('sourceMappingURL=')
end
end
file_context 'html/static/jquery.js' do
it 'is minified' do
expect(contents).to include(<<~JS.strip)
/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
JS
end
it "doesn't include a source map" do
expect(contents).not_to include('sourceMappingURL=')
end
end
file_context 'html/static/styles-v1.css' do
it 'is minified' do
expect(contents).to include(<<~CSS.strip)
*{font-family:Inter,sans-serif}
CSS
end
it "doesn't include a source map" do
expect(contents).not_to include('sourceMappingURL=')
end
end
end
end
end