1+ require 'test_helper'
2+
3+ class InstallerTest < ActiveSupport ::TestCase
4+ include RailsAppHelpers
5+
6+ test "installer" do
7+ with_new_rails_app do
8+ if Rails ::VERSION ::MAJOR >= 7 && File . read ( "Gemfile" ) . match? ( /importmap-rails/ )
9+ run_command ( "bin/rails" , "importmap:install" )
10+ end
11+ _out , _err = run_command ( "bin/rails" , "stimulus:install" )
12+
13+ assert_match %r(import "(./)?controllers") , File . read ( "app/javascript/application.js" )
14+ assert_equal File . read ( "#{ __dir__ } /../lib/install/app/javascript/controllers/application.js" ) , File . read ( "app/javascript/controllers/application.js" )
15+ assert_equal File . read ( "#{ __dir__ } /../lib/install/app/javascript/controllers/hello_controller.js" ) , File . read ( "app/javascript/controllers/hello_controller.js" )
16+
17+ if Rails ::VERSION ::MAJOR >= 7
18+ assert_equal File . read ( "#{ __dir__ } /../lib/install/app/javascript/controllers/index_for_importmap.js" ) , File . read ( "app/javascript/controllers/index.js" )
19+ assert_match %(pin "@hotwired/stimulus", to: "stimulus.min.js") , File . read ( "config/importmap.rb" )
20+ assert_match %(pin "@hotwired/stimulus-loading", to: "stimulus-loading.js") , File . read ( "config/importmap.rb" )
21+ assert_match %(pin_all_from "app/javascript/controllers", under: "controllers") , File . read ( "config/importmap.rb" )
22+ else
23+ assert_equal File . read ( "#{ __dir__ } /../lib/install/app/javascript/controllers/index_for_node.js" ) , File . read ( "app/javascript/controllers/index.js" )
24+ assert_match "@hotwired/stimulus" , File . read ( "package.json" )
25+ assert_match "@hotwired/stimulus" , File . read ( "yarn.lock" )
26+ end
27+ end
28+ end
29+
30+ test "installer with no javascript" do
31+ with_new_rails_app %w[ --skip-javascript ] do
32+ out , _err = run_command ( "bin/rails" , "stimulus:install" )
33+
34+ assert_match "You must either be running with node (package.json) or importmap-rails (config/importmap.rb) to use this gem." , out
35+ end
36+ end
37+
38+ test "installer with pre-existing application.js" do
39+ with_new_rails_app do
40+ if Rails ::VERSION ::MAJOR >= 7 && File . read ( "Gemfile" ) . match? ( /importmap-rails/ )
41+ run_command ( "bin/rails" , "importmap:install" )
42+ end
43+ File . write ( "app/javascript/application.js" , "// pre-existing" )
44+ _out , _err = run_command ( "bin/rails" , "stimulus:install" )
45+
46+ assert_match "// pre-existing" , File . read ( "app/javascript/application.js" )
47+ end
48+ end
49+
50+ if Gem ::Version . new ( Rails . version ) >= Gem ::Version . new ( "7.1" )
51+ test "installer with bun" do
52+ with_new_rails_app %w[ --javascript=bun ] do
53+ run_command ( "bin/rails" , "javascript:install:bun" )
54+ _out , _err = run_command ( "bin/rails" , "stimulus:install" )
55+
56+ assert_match %r(import "(./)?controllers") , File . read ( "app/javascript/application.js" )
57+ assert_equal File . read ( "#{ __dir__ } /../lib/install/app/javascript/controllers/application.js" ) , File . read ( "app/javascript/controllers/application.js" )
58+ assert_equal File . read ( "#{ __dir__ } /../lib/install/app/javascript/controllers/hello_controller.js" ) , File . read ( "app/javascript/controllers/hello_controller.js" )
59+
60+ assert_equal File . read ( "#{ __dir__ } /../lib/install/app/javascript/controllers/index_for_node.js" ) , File . read ( "app/javascript/controllers/index.js" )
61+
62+ assert_match "@hotwired/stimulus" , File . read ( "package.json" )
63+ end
64+ end
65+ end
66+
67+ private
68+ def with_new_rails_app ( options = [ ] , &block )
69+ super do
70+ if Dir . exist? ( "app/javascript" ) && !File . exist? ( "app/javascript/application.js" )
71+ File . write ( "app/javascript/application.js" , <<~JS , mode : "a+" )
72+ import "./controllers"
73+ JS
74+ end
75+
76+ block . call
77+ end
78+ end
79+ end
0 commit comments