From b72931689d69e103b1ae996a88c9275f6bc2017a Mon Sep 17 00:00:00 2001 From: Justin Gordon Date: Wed, 8 Apr 2026 19:56:27 -1000 Subject: [PATCH 1/3] Add comprehensive --rsc-pro generator tests for routes, components, and configs The --rsc-pro test context was missing several important assertions that the --rsc context had. This adds tests verifying that --rsc-pro mode correctly: - Creates node-renderer.js for Pro SSR - Adds RSC bundle watcher to Procfile.dev - Replaces HelloWorld with HelloServer (controller, routes, components) - Adds hello_server and rsc_payload routes - Creates rscWebpackConfig.js Closes #2793 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../generators/install_generator_spec.rb | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb b/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb index 11a6641d7e..66331ee352 100644 --- a/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb +++ b/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb @@ -1732,6 +1732,48 @@ class ActiveSupport::TestCase end end + it "creates node-renderer.js" do + assert_file "client/node-renderer.js" do |content| + expect(content).to include("reactOnRailsProNodeRenderer") + expect(content).to include("require('react-on-rails-pro-node-renderer')") + end + end + + it "adds RSC bundle watcher to Procfile.dev" do + assert_file "Procfile.dev" do |content| + expect(content).to include("RSC_BUNDLE_ONLY=true") + expect(content).to include("rsc-bundle:") + expect(content).to include("bin/shakapacker-watch --watch") + end + end + + it "creates HelloServer instead of HelloWorld" do + assert_no_file "app/javascript/src/HelloWorld/ror_components/HelloWorld.client.jsx" + assert_no_file "app/javascript/src/HelloWorld/ror_components/HelloWorld.server.jsx" + assert_no_file "app/controllers/hello_world_controller.rb" + assert_file "config/routes.rb" do |content| + expect(content).not_to include("hello_world") + end + + assert_file "app/javascript/src/HelloServer/ror_components/HelloServer.jsx" + assert_file "app/javascript/src/HelloServer/components/HelloServer.jsx" + assert_file "app/javascript/src/HelloServer/components/LikeButton.jsx" + end + + it "adds HelloServer route and RSC payload route" do + assert_file "config/routes.rb" do |content| + expect(content).to include("hello_server") + expect(content).to include("rsc_payload") + end + end + + it "creates rscWebpackConfig.js" do + assert_file "config/webpack/rscWebpackConfig.js" do |content| + expect(content).to include("rsc-bundle") + expect(content).to include("react-server") + end + end + it "sets DEFAULT_ROUTE to hello_server in bin/dev" do assert_file "bin/dev" do |content| expect(content).to include('DEFAULT_ROUTE = "hello_server"') From 6eaf87ccee89fd525a6f8eb9dd60d2a609ff5b84 Mon Sep 17 00:00:00 2001 From: Justin Gordon Date: Thu, 9 Apr 2026 22:35:26 -1000 Subject: [PATCH 2/3] Add missing rscWebpackConfig.js assertions to --rsc-pro test Both --rsc and --rsc-pro use the same template, so the assertions should match. Adds the 3 missing checks: require path, default unwrap, and serverWebpackConfig(true) call. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../spec/react_on_rails/generators/install_generator_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb b/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb index 66331ee352..8191557b82 100644 --- a/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb +++ b/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb @@ -1769,6 +1769,9 @@ class ActiveSupport::TestCase it "creates rscWebpackConfig.js" do assert_file "config/webpack/rscWebpackConfig.js" do |content| + expect(content).to include("const serverWebpackModule = require('./serverWebpackConfig')") + expect(content).to include("const serverWebpackConfig = serverWebpackModule.default || serverWebpackModule") + expect(content).to include("serverWebpackConfig(true)") expect(content).to include("rsc-bundle") expect(content).to include("react-server") end From 1b5b1d17b8d945a2427f80a925c6bb13e4779fbf Mon Sep 17 00:00:00 2001 From: Justin Gordon Date: Sat, 11 Apr 2026 20:43:42 -1000 Subject: [PATCH 3/3] Add missing serverWebpackConfig.js assertions to --rsc-pro test The --rsc context had two serverWebpackConfig.js tests (RSCWebpackPlugin import and rscBundle parameter) that weren't carried over to --rsc-pro. Since both modes generate the same serverWebpackConfig.js, these assertions should be mirrored to fully close the coverage gap. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../generators/install_generator_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb b/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb index 8191557b82..9c09bb1aa8 100644 --- a/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb +++ b/react_on_rails/spec/react_on_rails/generators/install_generator_spec.rb @@ -1777,6 +1777,20 @@ class ActiveSupport::TestCase end end + it "serverWebpackConfig includes RSCWebpackPlugin import" do + assert_file "config/webpack/serverWebpackConfig.js" do |content| + expect(content).to include("RSCWebpackPlugin") + expect(content).to include("react-on-rails-rsc/WebpackPlugin") + end + end + + it "serverWebpackConfig has rscBundle parameter" do + assert_file "config/webpack/serverWebpackConfig.js" do |content| + expect(content).to match(/configureServer\s*=\s*\(rscBundle\s*=\s*false\)/) + expect(content).to include("if (!rscBundle)") + end + end + it "sets DEFAULT_ROUTE to hello_server in bin/dev" do assert_file "bin/dev" do |content| expect(content).to include('DEFAULT_ROUTE = "hello_server"')