require 'spec_helper' require 'stackify-api-ruby' module Stackify RSpec.describe 'Rum - APM not loaded - Normal' do it 'returns rum script with complete information from ENV' do ENV['RETRACE_RUM_KEY'] = 'test-key' ENV['RETRACE_RUM_SCRIPT_URL'] = 'https://test.com/test.js' config = Stackify::Configuration.new config.app_name = 'test' config.env = 'test-env' rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "123-id" rum_script_url = 'https://test.com/test.js' rum_settings = { "ID" => '123-id', "Env" => Base64.strict_encode64('test-env'.encode('utf-8')), "Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function "Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8')) } expected_rum_script = "" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq reporting_url expect(rum.get_transaction_id).to eq transaction_id expect(rum_script.to_s).not_to be_empty expect(rum_script).to eq expected_rum_script ENV.delete('RETRACE_RUM_KEY') ENV.delete('RETRACE_RUM_SCRIPT_URL') end it 'returns rum script with complete information from Config' do config = Stackify::Configuration.new config.app_name = 'test' config.env = 'test-env' config.rum_script_url = 'https://test.com/test.js' config.rum_key = 'asd' rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "123-id" rum_script_url = 'https://test.com/test.js' rum_key = 'asd' rum_settings = { "ID" => '123-id', "Env" => Base64.strict_encode64('test-env'.encode('utf-8')), "Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function "Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8')) } expected_rum_script = "" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq reporting_url expect(rum.get_transaction_id).to eq transaction_id expect(rum_script.to_s).not_to be_empty expect(rum_script).to eq expected_rum_script end end RSpec.describe 'Rum - APM not loaded - Invalid' do it 'returns rum script with invalid rum script url from Config' do config = Stackify::Configuration.new config.app_name = 'test' config.env = 'test-env' config.rum_script_url = 'test.js' config.rum_key = 'asd' rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "123-id" rum_script_url = 'https://stckjs.stackify.com/stckjs.js' rum_key = 'asd' rum_settings = { "ID" => '123-id', "Env" => Base64.strict_encode64('test-env'.encode('utf-8')), "Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function "Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8')) } expected_rum_script = "" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq reporting_url expect(rum.get_transaction_id).to eq transaction_id expect(rum_script.to_s).not_to be_empty expect(rum_script).to eq expected_rum_script end it 'returns rum script with invalid rum key from Config' do config = Stackify::Configuration.new config.app_name = 'test' config.env = 'test-env' config.rum_script_url = 'test.js' config.rum_key = '`asd' rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "123-id" rum_script_url = 'https://stckjs.stackify.com/stckjs.js' rum_key = 'asd' rum_settings = { "ID" => '123-id', "Env" => Base64.strict_encode64('test-env'.encode('utf-8')), "Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function "Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8')) } expected_rum_script = "" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq reporting_url expect(rum.get_transaction_id).to eq transaction_id expect(rum_script.to_s).to be_empty expect(rum_script).not_to eq expected_rum_script expect(config.rum_key).to be_empty end it 'returns rum script with no app name' do config = Stackify::Configuration.new config.app_name = '' config.env = 'test-env' config.rum_script_url = 'test.js' config.rum_key = '`asd' rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "123-id" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq reporting_url expect(rum.get_transaction_id).to eq transaction_id expect(rum_script.to_s).to be_empty expect(config.rum_key).to be_empty expect(config.app_name).to be_empty end it 'returns rum script with no env' do config = Stackify::Configuration.new config.app_name = 'test' config.rum_script_url = 'test.js' config.rum_key = 'asd' rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "123-id" rum_script_url = 'https://stckjs.stackify.com/stckjs.js' rum_key = 'asd' rum_settings = { "ID" => '123-id', "Env" => Base64.strict_encode64('production'.encode('utf-8')), "Name" => Base64.strict_encode64('test'.strip.encode('utf-8')), # TODO: Add helper function "Trans" => Base64.strict_encode64('test reporting url'.encode('utf-8')) } expected_rum_script = "" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq reporting_url expect(rum.get_transaction_id).to eq transaction_id expect(rum_script.to_s).not_to be_empty expect(rum_script).to eq expected_rum_script expect(config.env).to eq :production end it 'returns rum script with no transaction id' do config = Stackify::Configuration.new config.app_name = 'test' config.env = 'test-env' config.rum_script_url = 'test.js' config.rum_key = 'asd' rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq reporting_url expect(rum.get_transaction_id).to eq "" expect(rum_script.to_s).to be_empty end it 'returns rum script with no reporting url' do config = Stackify::Configuration.new config.app_name = 'test' config.env = 'test-env' config.rum_script_url = 'test.js' config.rum_key = 'asd' rum = Stackify::Rum.new(config) reporting_url = "" transaction_id = "test-123" allow(rum).to receive(:get_reporting_url).and_return(reporting_url) allow(rum).to receive(:get_transaction_id).and_return(transaction_id) allow(Rum).to receive(:apm_loaded).and_return(false) rum_script = rum.insert_rum_script expect(rum.get_reporting_url).to eq "" expect(rum.get_transaction_id).to eq transaction_id expect(rum_script.to_s).to be_empty end end RSpec.describe 'Rum - APM loaded - Normal' do it 'returns rum script with complete information from ENV' do ENV['RETRACE_RUM_KEY'] = 'test-key' ENV['RETRACE_RUM_SCRIPT_URL'] = 'https://test.com/test.js' ENV['TZ'] = 'Europe/Paris' # For error config = Stackify::Configuration.new rum = Stackify::Rum.new(config) reporting_url = "test reporting url" transaction_id = "123-id" rum_script_url = 'https://test.com/test.js' rum_script = "" StackifyRubyAPM.start transaction = StackifyRubyAPM.transaction 'RUM Script Injection test' do rum_script = rum.insert_rum_script end.submit 200 StackifyRubyAPM.stop rum_settings = { "ID" => transaction.id(), "Env" => Base64.strict_encode64('test'.encode('utf-8')), "Name" => Base64.strict_encode64('Ruby Application'.strip.encode('utf-8')), # TODO: Add helper function "Trans" => Base64.strict_encode64('RUM Script Injection test'.encode('utf-8')) } expected_rum_script = "" ENV.delete('TZ') ENV.delete('RETRACE_RUM_KEY') ENV.delete('RETRACE_RUM_SCRIPT_URL') expect(rum_script.to_s).not_to be_empty expect(rum_script).to eq expected_rum_script end end end