lib/reportir.rb in reportir-0.3.3 vs lib/reportir.rb in reportir-0.3.4
- old
+ new
@@ -1,43 +1,84 @@
require "reportir/version"
require 's3_uploader'
require 'aws-sdk'
+#TODO: RSpec::Core::Formatters.register
+
module Reportir
@@step = 0
@@tests = [] # has to be array for front-end
def upload_result_to_s3_as_static_site
- check_for_env_vars
+ return upload_everything_to_s3 if upload_to_s3_possible?
+ save_report_locally
+ end
+
+ def save_report_locally
+ copy_template_to_temp_dir
+ write_javascript_models
+ save_final_markup
+ puts "Upload to s3 not possible. Missing ENV vars. Report saved to #{local_root}"
+ end
+
+ def upload_everything_to_s3
upload_template unless template_uploaded?
clear_previous_results_from_s3
save_final_markup
write_javascript_models
upload_to_s3
delete_tmp_files_for_this_test
end
+
+ def s3_screenshot(method)
+ create_current_test #TODO: before-filter??
+ @@step = @@step+=1
+ image_name = "#{@@step}-#{method}"
+ local_path = "#{local_test_root}/#{image_name}.png"
+ FileUtils.mkdir_p(local_test_root) unless Dir.exists?(local_test_root)
+ @browser.screenshot.save(local_path)
+ current_test[:screenshots] << { name: image_name, src: "#{public_path_for_this_test}/#{image_name}.png" }
+ end
private
+ def copy_template_to_temp_dir
+ FileUtils.cp_r(static_site_template_path+'/.', local_root)
+ end
+
def upload_template
- puts ''
- puts ''
puts '====== UPLOADING TEMPLATE ========='
upload_directory(static_site_template_path, '')
end
def template_uploaded?
bucket.object('index.html').exists?
end
+ def upload_to_s3_possible?
+ check_for_env_vars
+ true
+ rescue Reportir::Error
+ return false
+ end
+
def check_for_env_vars
- raise Reportir::Error.new 'Missing ENV AWS_DEFAULT_BUCKET' unless ENV['AWS_DEFAULT_BUCKET']
- raise Reportir::Error.new 'Missing ENV AWS_SECRET_ACCESS_KEY' unless ENV['AWS_SECRET_ACCESS_KEY']
- raise Reportir::Error.new 'Missing ENV AWS_ACCESS_KEY_ID' unless ENV['AWS_ACCESS_KEY_ID']
- raise Reportir::Error.new 'Missing ENV AWS_DEFAULT_REGION' unless ENV['AWS_DEFAULT_REGION']
+ raise Reportir::Error.new 'Missing ENV AWS_DEFAULT_BUCKET' unless aws_config[:bucket]
+ raise Reportir::Error.new 'Missing ENV AWS_SECRET_ACCESS_KEY' unless aws_config[:secret]
+ raise Reportir::Error.new 'Missing ENV AWS_ACCESS_KEY_ID' unless aws_config[:key]
+ raise Reportir::Error.new 'Missing ENV AWS_DEFAULT_REGION' unless aws_config[:region]
end
+ def aws_config
+ {
+ bucket: ENV['AWS_DEFAULT_BUCKET'],
+ secret: ENV['AWS_SECRET_ACCESS_KEY'],
+ key: ENV['AWS_ACCESS_KEY_ID'],
+ region: ENV['AWS_DEFAULT_REGION']
+ }
+ end
+
def delete_tmp_files_for_this_test
FileUtils.rm_rf local_test_root
end
def save_final_markup
@@ -47,63 +88,47 @@
current_test[:add_links] << { name: 'Markup from Last Page', path: "#{public_path_for_this_test}/final.html" }
end
def write_javascript_models
string = %{
- var navigation = #{array_of_test_names.to_json};\n
- var tests = #{@@tests.to_json};\n
+ var navigation = #{array_of_test_names.to_json};
+ var tests = #{@@tests.to_json};
}
File.open(local_model_file_path, "w") { |f| f.write(string) }
end
def clear_previous_results_from_s3
puts "deleting all previous test data from s3"
- ::Aws::S3::Bucket.new(ENV['AWS_DEFAULT_BUCKET']).delete_objects({
+ ::Aws::S3::Bucket.new(aws_config[:bucket]).delete_objects({
delete: {
objects: [{ key: "#{public_path_for_this_test}" }],
quiet: true
}
})
end
def upload_to_s3
- puts ''
- puts ''
puts '====== UPLOADING RESULTS ========='
bucket.object('js/models.js').upload_file(local_model_file_path)
puts "Uploading #{local_model_file_path} to /js/models.js"
upload_directory(local_test_root, public_path_for_this_test)
- puts ''
- puts ''
puts '====== S3 UPLOAD COMPLETE ========='
puts 'URL: ' + static_site_url
puts '==================================='
- puts ''
- puts ''
end
- def s3_screenshot(method)
- create_current_test #TODO: before-filter??
- @@step = @@step+=1
- image_name = "#{@@step}-#{method}"
- local_path = "#{local_test_root}/#{image_name}.png"
- FileUtils.mkdir_p(local_test_root) unless Dir.exists?(local_test_root)
- @browser.screenshot.save(local_path)
- current_test[:screenshots] << { name: image_name, src: "#{public_path_for_this_test}/#{image_name}.png" }
- end
-
def bucket
- @bucket ||= ::Aws::S3::Resource.new.bucket(ENV['AWS_DEFAULT_BUCKET'])
+ @bucket ||= ::Aws::S3::Resource.new.bucket(aws_config[:bucket])
end
def upload_directory(local, remote)
- ::S3Uploader.upload_directory(local, ENV['AWS_DEFAULT_BUCKET'], {
+ ::S3Uploader.upload_directory(local, aws_config[:bucket], {
:destination_dir => remote,
:threads => 5,
- s3_key: ENV['AWS_ACCESS_KEY_ID'],
- s3_secret: ENV['AWS_SECRET_ACCESS_KEY'],
- region: ENV['AWS_DEFAULT_REGION'] })
+ s3_key: aws_config[:key],
+ s3_secret: aws_config[:secret],
+ region: aws_config[:region] })
end
def static_site_template_path
Gem.find_files('reportir')[1] +'/static_site_template'
end
@@ -121,11 +146,11 @@
def array_of_test_names
@@tests.map{|t| t[:name] }
end
def local_model_file_path
- "#{local_root}/models.js"
+ "#{local_root}/js/models.js"
end
def local_test_root
"#{local_root}/#{public_path_for_this_test}"
end
@@ -146,10 +171,10 @@
::RSpec.current_example.metadata[:test_name] || ::RSpec.current_example.metadata[:full_description].gsub(/[^\w\s]/,'').gsub(/\s/,'_')
end
def static_site_url
# TODO: use aws-sdk for this.
- "http://#{ENV['AWS_DEFAULT_BUCKET']}.s3-website-#{ENV['AWS_DEFAULT_REGION']}.amazonaws.com"
+ "http://#{aws_config[:bucket]}.s3-website-#{aws_config[:region]}.amazonaws.com"
end
class Error < ::StandardError; end
end