Skip to content

Commit fc1396b

Browse files
Update packs_generator_spec to test dynamic npm package selection
Updated tests to reflect that imports are now dynamically generated from either 'react-on-rails' or 'react-on-rails-pro' based on the pro subscription status via react_on_rails_npm_package function. Changes: - Updated tests in "when RSC support is enabled" context to expect imports from 'react-on-rails-pro' (lines 242, 260, 276, 294, 310, 344, 351) - Kept tests outside RSC context or in "when not using ReactOnRailsPro" expecting imports from 'react-on-rails' (line 326) - Added test in "when component with common file only" context to verify default (non-pro) behavior uses 'react-on-rails' package - Added new test context "when react_on_rails_pro? is explicitly false" with 3 tests to verify correct package imports when pro is unavailable All 70 tests pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent d8fba72 commit fc1396b

File tree

1 file changed

+46
-7
lines changed

1 file changed

+46
-7
lines changed

spec/dummy/spec/packs_generator_spec.rb

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@ def self.configuration
102102
expect(generated_server_bundle_content).not_to include("#{component_name}.client.jsx")
103103
expect(generated_server_bundle_content).not_to include("#{component_name}.server.jsx")
104104
end
105+
106+
it "uses react-on-rails package when pro is not available" do
107+
generated_server_bundle_content = File.read(generated_server_bundle_file_path)
108+
pack_content = File.read(component_pack)
109+
110+
expect(generated_server_bundle_content).to include("import ReactOnRails from 'react-on-rails';")
111+
expect(generated_server_bundle_content).not_to include("import ReactOnRails from 'react-on-rails-pro';")
112+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
113+
expect(pack_content).not_to include("import ReactOnRails from 'react-on-rails-pro/client';")
114+
end
105115
end
106116

107117
context "when component with client and common File" do
@@ -239,7 +249,7 @@ def self.configuration
239249
component_pack = "#{generated_directory}/#{component_name}.js"
240250
pack_content = File.read(component_pack)
241251
expected_content = <<~CONTENT.strip
242-
import registerServerComponent from 'react-on-rails/registerServerComponent/client';
252+
import registerServerComponent from 'react-on-rails-pro/registerServerComponent/client';
243253
244254
registerServerComponent("#{component_name}");
245255
CONTENT
@@ -257,7 +267,7 @@ def self.configuration
257267
component_name = "ReactClientComponentWithClientAndServer"
258268
component_pack = "#{generated_directory}/#{component_name}.js"
259269
pack_content = File.read(component_pack)
260-
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
270+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails-pro/client';")
261271
expect(pack_content).to include("ReactOnRails.register({#{component_name}});")
262272
expect(pack_content).not_to include("registerServerComponent")
263273
end
@@ -273,7 +283,7 @@ def self.configuration
273283
component_pack = "#{generated_directory}/#{component_name}.js"
274284
pack_content = File.read(component_pack)
275285
expected_content = <<~CONTENT.strip
276-
import registerServerComponent from 'react-on-rails/registerServerComponent/client';
286+
import registerServerComponent from 'react-on-rails-pro/registerServerComponent/client';
277287
278288
registerServerComponent("#{component_name}");
279289
CONTENT
@@ -291,7 +301,7 @@ def self.configuration
291301
component_name = "ReactClientComponent"
292302
component_pack = "#{generated_directory}/#{component_name}.js"
293303
pack_content = File.read(component_pack)
294-
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
304+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails-pro/client';")
295305
expect(pack_content).to include("ReactOnRails.register({#{component_name}});")
296306
expect(pack_content).not_to include("registerServerComponent")
297307
end
@@ -307,7 +317,7 @@ def self.configuration
307317
component_name = "ReactServerComponent"
308318
component_pack = "#{generated_directory}/#{component_name}.js"
309319
pack_content = File.read(component_pack)
310-
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
320+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails-pro/client';")
311321
expect(pack_content).to include("ReactOnRails.register({#{component_name}});")
312322
expect(pack_content).not_to include("registerServerComponent")
313323
end
@@ -341,14 +351,14 @@ def self.configuration
341351
)
342352
generated_server_bundle_content = File.read(generated_server_bundle_path)
343353
expected_content = <<~CONTENT.strip
344-
import ReactOnRails from 'react-on-rails';
354+
import ReactOnRails from 'react-on-rails-pro';
345355
346356
import ReactClientComponent from '../components/ReactServerComponents/ror_components/ReactClientComponent.jsx';
347357
import ReactServerComponent from '../components/ReactServerComponents/ror_components/ReactServerComponent.jsx';
348358
import ReactClientComponentWithClientAndServer from '../components/ReactServerComponents/ror_components/ReactClientComponentWithClientAndServer.server.jsx';
349359
import ReactServerComponentWithClientAndServer from '../components/ReactServerComponents/ror_components/ReactServerComponentWithClientAndServer.server.jsx';
350360
351-
import registerServerComponent from 'react-on-rails/registerServerComponent/server';
361+
import registerServerComponent from 'react-on-rails-pro/registerServerComponent/server';
352362
registerServerComponent({ReactServerComponent,
353363
ReactServerComponentWithClientAndServer});
354364
@@ -435,6 +445,35 @@ def create_new_component(name)
435445
end
436446
end
437447

448+
context "when react_on_rails_pro? is explicitly false" do
449+
let(:component_name) { "ComponentWithCommonOnly" }
450+
let(:component_pack) { "#{generated_directory}/#{component_name}.js" }
451+
452+
before do
453+
allow(ReactOnRails::Utils).to receive(:react_on_rails_pro?).and_return(false)
454+
stub_packer_source_path(component_name: component_name,
455+
packer_source_path: packer_source_path)
456+
described_class.instance.generate_packs_if_stale
457+
end
458+
459+
it "imports from react-on-rails in server bundle" do
460+
generated_server_bundle_content = File.read(generated_server_bundle_file_path)
461+
expect(generated_server_bundle_content).to include("import ReactOnRails from 'react-on-rails';")
462+
expect(generated_server_bundle_content).not_to include("import ReactOnRails from 'react-on-rails-pro';")
463+
end
464+
465+
it "imports from react-on-rails/client in component pack" do
466+
pack_content = File.read(component_pack)
467+
expect(pack_content).to include("import ReactOnRails from 'react-on-rails/client';")
468+
expect(pack_content).not_to include("import ReactOnRails from 'react-on-rails-pro/client';")
469+
end
470+
471+
it "does not import registerServerComponent" do
472+
pack_content = File.read(component_pack)
473+
expect(pack_content).not_to include("registerServerComponent")
474+
end
475+
end
476+
438477
context "when component with CSS module" do
439478
let(:component_name) { "ComponentWithCSSModule" }
440479
let(:component_pack) { "#{generated_directory}/#{component_name}.js" }

0 commit comments

Comments
 (0)