spec/interactor/rails_spec.rb in interactor-rails-2.2.1 vs spec/interactor/rails_spec.rb in interactor-rails-2.3.0
- old
+ new
@@ -1,24 +1,20 @@
module Interactor
describe "Rails" do
- def last_command_started
- # Account for older versions of Aruba as required by Rails 3.0
- Aruba::Api.method_defined?(:last_command_started) ? super : last_command
- end
-
before do
- run_command_and_stop <<-CMD
+ run_command_and_stop <<~CMD
bundle exec rails new example \
- --skip-yarn \
- --skip-gemfile \
--skip-git \
--skip-keeps \
--skip-action-mailer \
- --skip-active-record \
- --skip-puma \
+ --skip-action-mailbox \
+ --skip-action-text \
--skip-action-cable \
- --skip-sprockets \
+ --skip-active-record \
+ --skip-active-job \
+ --skip-active-storage \
+ --skip-asset-pipeline \
--skip-spring \
--skip-listen \
--skip-coffee \
--skip-javascript \
--skip-turbolinks \
@@ -26,47 +22,49 @@
--skip-test \
--skip-system-test \
--skip-bundle \
--skip-bootsnap \
--quiet
- CMD
+ CMD
+
cd "example"
- write_file "Gemfile", <<-EOF
+ write_file "Gemfile", <<~FILE
gem "rails"
gem "interactor-rails", path: "#{ROOT}"
- EOF
+ FILE
+
run_command_and_stop "bundle install"
end
context "rails generate" do
context "interactor" do
it "generates an interactor and spec" do
run_command_and_stop "bundle exec rails generate interactor place_order"
path = "app/interactors/place_order.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-class PlaceOrder
- include Interactor
+ expect(path).to have_file_content(<<~FILE)
+ class PlaceOrder
+ include Interactor
- def call
- # TODO
- end
-end
-EOF
+ def call
+ # TODO
+ end
+ end
+ FILE
- path = 'spec/interactors/place_order_spec.rb'
+ path = "spec/interactors/place_order_spec.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-require 'spec_helper'
+ expect(path).to have_file_content(<<~FILE)
+ require "spec_helper"
-RSpec.describe PlaceOrder, type: :interactor do
- describe '.call' do
- pending "add some examples to (or delete) \#{__FILE__}"
- end
-end
-EOF
+ RSpec.describe PlaceOrder, type: :interactor do
+ describe ".call" do
+ pending "add some examples to (or delete) \#{__FILE__}"
+ end
+ end
+ FILE
end
it "requires a name" do
run_command_and_stop "bundle exec rails generate interactor"
@@ -77,78 +75,78 @@
it "handles namespacing" do
run_command_and_stop "bundle exec rails generate interactor invoice/place_order"
path = "app/interactors/invoice/place_order.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-class Invoice::PlaceOrder
- include Interactor
+ expect(path).to have_file_content(<<~FILE)
+ class Invoice::PlaceOrder
+ include Interactor
- def call
- # TODO
- end
-end
-EOF
+ def call
+ # TODO
+ end
+ end
+ FILE
path = "spec/interactors/invoice/place_order_spec.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-require 'spec_helper'
+ expect(path).to have_file_content(<<~FILE)
+ require "spec_helper"
-RSpec.describe Invoice::PlaceOrder, type: :interactor do
- describe '.call' do
- pending "add some examples to (or delete) \#{__FILE__}"
- end
-end
-EOF
+ RSpec.describe Invoice::PlaceOrder, type: :interactor do
+ describe ".call" do
+ pending "add some examples to (or delete) \#{__FILE__}"
+ end
+ end
+ FILE
end
end
context "interactor:organizer" do
it "generates an organizer" do
- run_command_and_stop <<-CMD
+ run_command_and_stop <<~CMD
bundle exec rails generate interactor:organizer place_order
- CMD
+ CMD
path = "app/interactors/place_order.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-class PlaceOrder
- include Interactor::Organizer
+ expect(path).to have_file_content(<<~FILE)
+ class PlaceOrder
+ include Interactor::Organizer
- # organize Interactor1, Interactor2
-end
-EOF
+ # organize Interactor1, Interactor2
+ end
+ FILE
path = "spec/interactors/place_order_spec.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-require 'spec_helper'
+ expect(path).to have_file_content(<<~FILE)
+ require "spec_helper"
-RSpec.describe PlaceOrder, type: :interactor do
- describe '.call' do
- pending "add some examples to (or delete) \#{__FILE__}"
- end
-end
-EOF
+ RSpec.describe PlaceOrder, type: :interactor do
+ describe ".call" do
+ pending "add some examples to (or delete) \#{__FILE__}"
+ end
+ end
+ FILE
end
it "generates an organizer with interactors" do
- run_command_and_stop <<-CMD
+ run_command_and_stop <<~CMD
bundle exec rails generate interactor:organizer place_order \
charge_card fulfill_order
- CMD
+ CMD
path = "app/interactors/place_order.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-class PlaceOrder
- include Interactor::Organizer
+ expect(path).to have_file_content(<<~FILE)
+ class PlaceOrder
+ include Interactor::Organizer
- organize ChargeCard, FulfillOrder
-end
-EOF
+ organize ChargeCard, FulfillOrder
+ end
+ FILE
end
it "requires a name" do
run_command_and_stop "bundle exec rails generate interactor:organizer"
@@ -159,41 +157,88 @@
it "handles namespacing" do
run_command_and_stop "bundle exec rails generate interactor:organizer invoice/place_order"
path = "app/interactors/invoice/place_order.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-class Invoice::PlaceOrder
- include Interactor::Organizer
+ expect(path).to have_file_content(<<~FILE)
+ class Invoice::PlaceOrder
+ include Interactor::Organizer
- # organize Interactor1, Interactor2
-end
-EOF
+ # organize Interactor1, Interactor2
+ end
+ FILE
path = "spec/interactors/invoice/place_order_spec.rb"
expect(path).to be_an_existing_file
- expect(path).to have_file_content(<<-EOF)
-require 'spec_helper'
+ expect(path).to have_file_content(<<~FILE)
+ require "spec_helper"
-RSpec.describe Invoice::PlaceOrder, type: :interactor do
- describe '.call' do
- pending "add some examples to (or delete) \#{__FILE__}"
- end
-end
-EOF
+ RSpec.describe Invoice::PlaceOrder, type: :interactor do
+ describe ".call" do
+ pending "add some examples to (or delete) \#{__FILE__}"
+ end
+ end
+ FILE
end
end
+
+ it "prefers rails_helper if available" do
+ write_file "spec/rails_helper.rb", <<~FILE
+ require "spec_helper"
+ FILE
+
+ run_command_and_stop "bundle exec rails generate interactor place_order"
+
+ path = "spec/interactors/place_order_spec.rb"
+ expect(path).to be_an_existing_file
+ expect(path).to have_file_content(<<~FILE)
+ require "rails_helper"
+
+ RSpec.describe PlaceOrder, type: :interactor do
+ describe ".call" do
+ pending "add some examples to (or delete) \#{__FILE__}"
+ end
+ end
+ FILE
+ ensure
+ remove("spec/rails_helper.rb")
+ end
end
+ it "support test unit instead of rspec" do
+ # Enable test-unit support since it is skipped while generating the app.
+ write_file "config/initializers/test_unit.rb", <<~FILE
+ require "rails/test_unit/railtie"
+ FILE
+
+ run_command_and_stop "bundle exec rails generate interactor invoice/place_order"
+
+ path = "spec/interactors/invoice/place_order_spec.rb"
+ expect(path).not_to be_an_existing_file
+
+ path = "test/interactors/invoice/place_order_test.rb"
+ expect(path).to be_an_existing_file
+
+ expect(path).to have_file_content(<<~FILE)
+ require "test_helper"
+
+ class Invoice::PlaceOrderTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+ end
+ FILE
+ ensure
+ remove("config/initializers/test_unit.rb")
+ end
+
it "auto-loads interactors" do
run_command_and_stop "bundle exec rails generate interactor place_order"
-
run_command_and_stop "bundle exec rails runner PlaceOrder"
end
it "auto-loads organizers" do
run_command_and_stop "bundle exec rails generate interactor:organizer place_order"
-
run_command_and_stop "bundle exec rails runner PlaceOrder"
end
end
end