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