require 'spec_helper' require 'sham_rack' describe Honeybadger::Rack::UserFeedback do let(:main_app) do lambda do |env| env['honeybadger.error_id'] = honeybadger_id if defined?(honeybadger_id) [200, {}, ["<!-- HONEYBADGER FEEDBACK -->"]] end end let(:informer_app) { Honeybadger::Rack::UserFeedback.new(main_app) } let(:response) { Net::HTTP.get_response(URI.parse("http://example.com/")) } before do reset_config ShamRack.mount(informer_app, "example.com") end context "feedback feature is disabled by ping" do it "does not modify the output" do expect(response.body).to eq '<!-- HONEYBADGER FEEDBACK -->' end end context "feedback feature is enabled by ping" do before do Honeybadger.configuration.features['feedback'] = true end context "there is a honeybadger id" do let(:honeybadger_id) { 1 } it "modifies output" do rendered_length = informer_app.render_form(1).size expect(response.body).to match(/honeybadger_feedback_token/) expect(response["Content-Length"].to_i).to eq rendered_length end context "a project root is configured" do let(:tmp_dir) { File.expand_path('../../../tmp', __FILE__) } let(:template_dir) { File.join(tmp_dir, 'lib', 'honeybadger', 'templates') } let(:template_file) { File.join(template_dir, 'feedback_form.erb') } before do FileUtils.mkdir_p(template_dir) FileUtils.rm_f(template_file) Honeybadger.configure(true) do |config| config.project_root = tmp_dir end end context "custom template is implemented" do before do File.open(template_file, 'w') { |f| f.write 'custom feedback form' } end it "renders with custom template" do expect(response.body).to match(/custom feedback form/) end end end context "feedback feature is disabled by customer" do before do Honeybadger.configuration.feedback = false end it "does not modify the output" do expect(response.body).to eq '<!-- HONEYBADGER FEEDBACK -->' end end end context "there is no honeybadger id" do it "does not modify the output" do expect(response.body).to eq '<!-- HONEYBADGER FEEDBACK -->' end end end end