#!/usr/bin/env ruby require 'soaspec' require 'fileutils' def create_file(options) filename = options[:filename] fail 'Need to pass filename' unless filename content = options[:content] fail 'Need to pass contents to insert into file' unless content if File.exist? filename old_content = File.read(filename) if old_content != content $stderr.puts "!! #{filename} already exists and differs from template" end else File.open(filename, 'w') do |f| f.puts content end puts 'Created: ' + filename end end def create_folder(folder) if File.exists? folder unless File.directory? folder $stderr.puts "!! #{folder} already exists and is not a directory" end else FileUtils.mkdir folder puts "Created folder: #{folder}/" end end puts 'Creating files for soaspec' gem_content = <<-EOF source 'https://rubygems.org' gem 'soaspec' EOF rake_content = <<-EOF # The list of task for a Rake file can be seen with `rake -T` require 'rspec/core/rake_task' # See See https://relishapp.com/rspec/rspec-core/docs/command-line/rake-task for details # This runs `rspec` command with the following options. Type `rake spec` to run this task RSpec::Core::RakeTask.new(:spec) do |t, task_args| t.pattern = "spec/*_spec.rb" # Run all specs in 'spec' folder ending in '_spec' # Next line shows output on the screen, Junit xml report and an HTML report t.rspec_opts = "--format documentation --format RspecJunitFormatter --out logs/spec.xml --format html --out logs/spec.html" t.fail_on_error = false end task :default => :spec # This runs the 'spec' task by default when no task is mentioned. E.g., if only `rake` is typed EOF spec_helper_content = <<-EOF require 'soaspec' EOF soap_spec_content = <<-EOF require 'spec_helper' soap_example = Soaspec::BasicSoapHandler.new('Courier post', wsdl: 'http://www.webservicex.com/globalweather.asmx?wsdl') soap_example.namespaces = { 'ns1' => 'http://www.webserviceX.NET' } soap_example.default_operation = :get_weather soap_example.template_name = 'soap_template' RSpec.context soap_example do describe Exchange.new(:default) do it { is_expected.to contain 'Data Not Found' } it_behaves_like 'success scenario' end end EOF soap_template_content = <<-EOF <%= test_values[:city_name] || 'Wellington' %> <%= test_values[:country] || 'New Zealand' %> EOF readme_content = <<-EOF # Prerequisites This creates files within an existing folder. It could add onto an existing project. For a new project create a folder and be at it's location on the command line ``` mkdir soaspec_test cd soaspec_test ``` Run `bundle install` to install the gems mentioned in the Gemfile. To avoid conflict with gems on the machine globally it may be better to specify gem location with: `bundle install --path ~/.gem` # Running tests On the command line type: `bundle exec rake spec` or simply `bundle exec rake` # Structure ## Tests Tests are within the 'spec' folder and end in '_spec'. Setup and teardown for tests is in 'spec/spec_helper' ## Templates These are the base requests with ERB inside them to create smartly changing requests accoring to the test.yml ## Libaries Libaries to be installed are in 'Gemfile'. Specific gem versions can be specified here and enforeced with `bundle exec rake` ## Reports Reports are shown in the 'logs' folder. By default Rake produces a junit, an html report, and a traffic.log file with the API request and responses in it EOF create_file(filename: 'Gemfile', content: gem_content) create_file(filename: 'Rakefile', content: rake_content) create_file(filename: 'README.md', content: readme_content) create_folder 'spec' create_folder 'template' create_folder 'logs' create_file(filename: 'spec/spec_helper.rb', content: spec_helper_content) create_file(filename: 'spec/soap_spec.rb', content: soap_spec_content) create_file(filename: 'template/soap_template.xml', content: soap_template_content)