Skip to content

Commit

Permalink
Create executable bug report Rails application (#593)
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 authored Jul 19, 2024
1 parent 14b965f commit 9b17a3b
Show file tree
Hide file tree
Showing 3 changed files with 122 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 @@ -31,6 +31,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 @@ -194,6 +194,14 @@ yarn build

Now you can reference your version of turbo-rails in your Rails projects packaged with your local version of Turbo.

## 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).
111 changes: 111 additions & 0 deletions bug_report_template.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
require "bundler/inline"

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

gem "rails"
gem "propshaft"
gem "puma"
gem "sqlite3", "~> 1.4"
gem "turbo-rails"

gem "capybara"
gem "cuprite", 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 9b17a3b

Please sign in to comment.