integtest/spec/helper/dsl.rb (53 lines of code) (raw):
# frozen_string_literal: true
require 'net/http'
require_relative 'dsl/convert_all'
require_relative 'dsl/convert_single'
require_relative 'dsl/file_contexts'
##
# Defines methods to create contexts and shared examples used in the tests.
module Dsl
##
# Setup some conversion that runs before this context. Prefer
# convert_all_before_context if you need to test `--all` once and prefer
# convert_single_before_context if you need to test `--doc`. Use this
# directly only if you need to test `--all` multiple times.
def convert_before
include_context 'source and dest'
before(:context) do
yield @src, @dest
end
end
RSpec.shared_context 'source and dest' do
before(:context) do
@tmp = Dir.mktmpdir
@src = Source.new @tmp
@dest = Dest.new @tmp
end
after(:context) do
FileUtils.remove_entry @tmp
end
let(:src) { @src }
let(:books) { @src.books }
let(:outputs) { @dest.convert_outputs }
let(:statuses) { @dest.convert_statuses }
##
# Build a path to a file in the destination. Needed by file_context.
def dest_file(file)
@dest.path(file)
end
end
RSpec.shared_examples 'the root' do
context 'the root' do
let(:root_uri) { 'http://localhost:8000' }
let(:root) { Net::HTTP.get_response(URI(root_uri)) }
it 'redirects to the guide root' do
expect(root).to redirect_to(eq("#{root_uri}/guide/index.html"))
end
end
end
RSpec.shared_examples 'the favicon' do
context 'the favicon' do
let(:favicon) do
Net::HTTP.get_response(URI('http://localhost:8000/favicon.ico'))
end
let(:path) { '/docs_build/resources/web/static/favicon.ico' }
let(:expected_bits) { File.open dest_file(path), 'rb', &:read }
it 'serves the favicon' do
expect(favicon).to serve(eq(expected_bits))
end
end
end
include ConvertAll
include ConvertSingle
include FileContexts
end