|
1 | 1 | # frozen_string_literal: true |
2 | 2 |
|
3 | 3 | require 'fileutils' |
4 | | -require 'stringio' |
5 | 4 | require 'tmpdir' |
6 | 5 |
|
7 | | -RSpec.describe 'bin/validate_configs' do |
| 6 | +RSpec.describe 'bin/validate_configs' do # rubocop:disable RSpec/DescribeClass |
8 | 7 | let(:script_path) { File.expand_path('../../bin/validate_configs', __dir__) } |
| 8 | + let(:config_path) { File.join('lib', 'html2rss', 'configs', 'example.com', 'search.yml') } |
| 9 | + let(:success_output) do |
| 10 | + a_string_including( |
| 11 | + "ok #{config_path}", |
| 12 | + '1 configs validated successfully.' |
| 13 | + ) |
| 14 | + end |
9 | 15 |
|
10 | 16 | it 'passes validation for parameterized configs when defaults are present' do |
11 | | - config = <<~YAML |
| 17 | + with_temp_config do |dir| |
| 18 | + expect { run_script(dir) }.to output(success_output).to_stdout |
| 19 | + .and output('').to_stderr |
| 20 | + end |
| 21 | + end |
| 22 | + |
| 23 | + def with_temp_config |
| 24 | + Dir.mktmpdir do |dir| |
| 25 | + write_config(dir) |
| 26 | + yield dir |
| 27 | + end |
| 28 | + end |
| 29 | + |
| 30 | + def write_config(dir) |
| 31 | + FileUtils.mkdir_p(File.join(dir, File.dirname(config_path))) |
| 32 | + File.write(File.join(dir, config_path), valid_config) |
| 33 | + end |
| 34 | + |
| 35 | + def run_script(dir) |
| 36 | + Dir.chdir(dir) { load script_path } |
| 37 | + end |
| 38 | + |
| 39 | + def valid_config |
| 40 | + <<~YAML |
12 | 41 | parameters: |
13 | 42 | query: |
14 | 43 | type: string |
|
23 | 52 | title: |
24 | 53 | selector: "h2" |
25 | 54 | YAML |
26 | | - |
27 | | - Dir.mktmpdir do |dir| |
28 | | - FileUtils.mkdir_p(File.join(dir, 'lib', 'html2rss', 'configs', 'example.com')) |
29 | | - File.write(File.join(dir, 'lib', 'html2rss', 'configs', 'example.com', 'search.yml'), config) |
30 | | - |
31 | | - stdout = StringIO.new |
32 | | - stderr = StringIO.new |
33 | | - original_stdout = $stdout |
34 | | - original_stderr = $stderr |
35 | | - $stdout = stdout |
36 | | - $stderr = stderr |
37 | | - |
38 | | - Dir.chdir(dir) { load script_path } |
39 | | - |
40 | | - expect(stdout.string).to include('ok lib/html2rss/configs/example.com/search.yml') |
41 | | - expect(stdout.string).to include('1 configs validated successfully.') |
42 | | - expect(stderr.string).to be_empty |
43 | | - ensure |
44 | | - $stdout = original_stdout |
45 | | - $stderr = original_stderr |
46 | | - end |
47 | 55 | end |
48 | 56 | end |
0 commit comments