Skip to content

Commit

Permalink
Create executable bug report Rails application
Browse files Browse the repository at this point in the history
This template draws inspiration from Rails' [bug report templates][].

[bug report templates]: https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#create-an-executable-test-case
  • Loading branch information
seanpdoyle committed Mar 15, 2024
1 parent 102a491 commit 457a487
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ jobs:
rubygems: latest
bundler-cache: true

- name: Run Bug Template Tests
run: ruby bug_report_template.rb || ruby bug_report_template.rb

- name: Run tests
id: test
run: bundle exec rake TESTOPT=-vdc
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ The [`Turbo::Broadcastable::TestHelper`](./lib/turbo/broadcastable/test_helper.r

Run the tests with `./bin/test`.

## Contributing

Having a way to reproduce your issue will help people confirm, investigate, and ultimately fix your issue. You can do this by providing an executable test case. To make this process easier, we have prepared an [executable bug report Rails application](./bug_report_template.rb) for you to use as a starting point.

This template includes the boilerplate code to set up a System Test case. Copy the content of the template into a `.rb` file and make the necessary changes to demonstrate the issue. You can execute it by running `ruby the_file.rb` in your terminal. If all goes well, you should see your test case failing.

You can then share your executable test case as a gist or paste the content into the issue description.

## License

Turbo is released under the [MIT License](https://opensource.org/licenses/MIT).
114 changes: 114 additions & 0 deletions bug_report_template.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
require "bundler/inline"

gemfile(true) do
source "https://rubygems.org"

git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem "rails"
gem "propshaft"
gem "puma"
gem "sqlite3"
gem "turbo-rails"

gem "capybara"
gem "cuprite", "~> 0.9", require: "capybara/cuprite"
end

ENV["DATABASE_URL"] = "sqlite3::memory:"
ENV["RAILS_ENV"] = "test"

require "active_record/railtie"
# require "active_storage/engine"
require "action_controller/railtie"
require "action_view/railtie"
# require "action_mailer/railtie"
# require "active_job/railtie"
require "action_cable/engine"
# require "action_mailbox/engine"
# require "action_text/engine"
require "rails/test_unit/railtie"

class App < Rails::Application
config.load_defaults Rails::VERSION::STRING.to_f

config.root = __dir__
config.hosts << "example.org"
config.eager_load = false
config.session_store :cookie_store, key: "cookie_store_key"
config.secret_key_base = "secret_key_base"
config.consider_all_requests_local = true
config.action_cable.cable = {"adapter" => "async"}
config.turbo.draw_routes = false

Rails.logger = config.logger = Logger.new($stdout)

routes.append do
root to: "application#index"
end
end

Rails.application.initialize!

ActiveRecord::Schema.define do
create_table :messages, force: true do |t|
t.text :body, null: false
end
end

class Message < ActiveRecord::Base
end

class ApplicationController < ActionController::Base
include Rails.application.routes.url_helpers

class_attribute :template, default: DATA.read

def index
render inline: template, formats: :html
end
end

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :cuprite, using: :chrome, screen_size: [1400, 1400], options: { js_errors: true }
end

Capybara.configure do |config|
config.server = :puma, {Silent: true}
config.default_normalize_ws = true
end

require "rails/test_help"

class TurboSystemTest < ApplicationSystemTestCase
test "reproduces bug" do
visit root_path

assert_text "Loaded with Turbo"
end
end

__END__

<!DOCTYPE html>
<html>
<head>
<%= csrf_meta_tags %>

<script type="importmap">
{
"imports": {
"@hotwired/turbo-rails": "<%= asset_path("turbo.js") %>"
}
}
</script>

<script type="module">
import "@hotwired/turbo-rails"

addEventListener("turbo:load", () => document.body.innerHTML = "Loaded with Turbo")
</script>
</head>

<body>Loaded without Turbo</body>
</html>

0 comments on commit 457a487

Please sign in to comment.