@@ -81,6 +81,20 @@ def mock_missing_manifest_entry(bundle_name)
8181 ) ::Manifest ::MissingEntryError )
8282 end
8383
84+ def random_bundle_name
85+ "webpack-bundle-#{ SecureRandom . hex ( 4 ) } .js"
86+ end
87+
88+ # If bundle names are not provided, random unique names will be used for each bundle.
89+ # This ensures that if server_bundle and rsc_bundle are accidentally swapped in the code,
90+ # the tests will fail since each bundle has a distinct random name that won't match if used incorrectly.
91+ def mock_bundle_configs ( server_bundle_name : random_bundle_name , rsc_bundle_name : random_bundle_name )
92+ allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
93+ . and_return ( server_bundle_name )
94+ allow ( ReactOnRails ) . to receive_message_chain ( "configuration.rsc_bundle_js_file" )
95+ . and_return ( rsc_bundle_name )
96+ end
97+
8498 def mock_dev_server_running
8599 allow ( ReactOnRails ::PackerUtils . packer ) . to receive_message_chain ( "dev_server.running?" )
86100 . and_return ( true )
@@ -123,8 +137,7 @@ def mock_dev_server_running
123137 before do
124138 mock_bundle_in_manifest ( "webpack-bundle.js" , "/webpack/dev/webpack-bundle-0123456789abcdef.js" )
125139
126- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
127- . and_return ( "server-bundle.js" )
140+ mock_bundle_configs ( server_bundle_name : "server-bundle.js" )
128141 end
129142
130143 it { is_expected . to eq ( "#{ packer_public_output_path } /webpack-bundle-0123456789abcdef.js" ) }
@@ -183,8 +196,7 @@ def mock_dev_server_running
183196 context "with server file not in manifest" , packer_type . to_sym do
184197 it "returns the unhashed server path" do
185198 server_bundle_name = "server-bundle.js"
186- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
187- . and_return ( server_bundle_name )
199+ mock_bundle_configs ( server_bundle_name : server_bundle_name )
188200 mock_missing_manifest_entry ( server_bundle_name )
189201
190202 path = described_class . server_bundle_js_file_path
@@ -196,8 +208,7 @@ def mock_dev_server_running
196208 context "with server file in the manifest, used for client" , packer_type . to_sym do
197209 it "returns the correct path hashed server path" do
198210 Packer = ReactOnRails ::PackerUtils . packer # rubocop:disable Lint/ConstantDefinitionInBlock, RSpec/LeakyConstantDeclaration
199- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
200- . and_return ( "webpack-bundle.js" )
211+ mock_bundle_configs ( server_bundle_name : "webpack-bundle.js" )
201212 allow ( ReactOnRails ) . to receive_message_chain ( "configuration.same_bundle_for_client_and_server" )
202213 . and_return ( true )
203214 mock_bundle_in_manifest ( "webpack-bundle.js" , "webpack/development/webpack-bundle-123456.js" )
@@ -211,8 +222,7 @@ def mock_dev_server_running
211222
212223 context "with webpack-dev-server running, and same file used for server and client" do
213224 it "returns the correct path hashed server path" do
214- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
215- . and_return ( "webpack-bundle.js" )
225+ mock_bundle_configs ( server_bundle_name : "webpack-bundle.js" )
216226 allow ( ReactOnRails ) . to receive_message_chain ( "configuration.same_bundle_for_client_and_server" )
217227 . and_return ( true )
218228 mock_dev_server_running
@@ -228,8 +238,7 @@ def mock_dev_server_running
228238 context "with dev-server running, and server file in the manifest, and separate client/server files" ,
229239 packer_type . to_sym do
230240 it "returns the correct path hashed server path" do
231- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
232- . and_return ( "server-bundle.js" )
241+ mock_bundle_configs ( server_bundle_name : "server-bundle.js" )
233242 allow ( ReactOnRails ) . to receive_message_chain ( "configuration.same_bundle_for_client_and_server" )
234243 . and_return ( false )
235244 mock_bundle_in_manifest ( "server-bundle.js" , "webpack/development/server-bundle-123456.js" )
@@ -248,29 +257,23 @@ def mock_dev_server_running
248257
249258 context "with server file not in manifest" , packer_type . to_sym do
250259 it "returns the unhashed server path" do
251- server_bundle_name = "rsc-server-bundle.js"
252- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.rsc_bundle_js_file" )
253- . and_return ( server_bundle_name )
254- # TODO: fix after adding rsc_bundle_js_file config
255- mock_missing_manifest_entry ( "rsc-bundle.js" )
260+ server_bundle_name = "rsc-bundle.js"
261+ mock_bundle_configs ( rsc_bundle_name : server_bundle_name )
262+ mock_missing_manifest_entry ( server_bundle_name )
256263
257264 path = described_class . rsc_bundle_js_file_path
258265
259- expect ( path ) . to end_with ( "public/webpack/development/rsc-bundle.js " )
266+ expect ( path ) . to end_with ( "public/webpack/development/#{ server_bundle_name } " )
260267 end
261268 end
262269
263270 context "with server file in the manifest, used for client" , packer_type . to_sym do
264271 it "returns the correct path hashed server path" do
265272 Packer = ReactOnRails ::PackerUtils . packer # rubocop:disable Lint/ConstantDefinitionInBlock, RSpec/LeakyConstantDeclaration
266- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.rsc_bundle_js_file" )
267- . and_return ( "webpack-bundle.js" )
268- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
269- . and_return ( "webpack-server-bundle.js" )
273+ mock_bundle_configs ( rsc_bundle_name : "webpack-bundle.js" )
270274 allow ( ReactOnRails ) . to receive_message_chain ( "configuration.same_bundle_for_client_and_server" )
271275 . and_return ( true )
272- # TODO: fix after adding rsc_bundle_js_file config
273- mock_bundle_in_manifest ( "rsc-bundle.js" , "webpack/development/webpack-bundle-123456.js" )
276+ mock_bundle_in_manifest ( "webpack-bundle.js" , "webpack/development/webpack-bundle-123456.js" )
274277 allow ( Packer ) . to receive_message_chain ( "dev_server.running?" )
275278 . and_return ( false )
276279
@@ -281,15 +284,11 @@ def mock_dev_server_running
281284
282285 context "with webpack-dev-server running, and same file used for server and client" do
283286 it "returns the correct path hashed server path" do
284- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
285- . and_return ( "webpack-bundle.js" )
286- allow ( ReactOnRails ) . to receive_message_chain ( "configuration.server_bundle_js_file" )
287- . and_return ( "webpack-server-bundle.js" )
287+ mock_bundle_configs ( rsc_bundle_name : "webpack-bundle.js" )
288288 allow ( ReactOnRails ) . to receive_message_chain ( "configuration.same_bundle_for_client_and_server" )
289289 . and_return ( true )
290290 mock_dev_server_running
291- # TODO: fix after adding rsc_bundle_js_file config
292- mock_bundle_in_manifest ( "rsc-bundle.js" , "/webpack/development/webpack-bundle-123456.js" )
291+ mock_bundle_in_manifest ( "webpack-bundle.js" , "/webpack/development/webpack-bundle-123456.js" )
293292
294293 path = described_class . rsc_bundle_js_file_path
295294
@@ -298,25 +297,20 @@ def mock_dev_server_running
298297 end
299298 end
300299
301- # TODO: fix after adding rsc_bundle_js_file config
302- # context "with dev-server running, and server file in the manifest, and separate client/server files",
303- # packer_type.to_sym do
304- # it "returns the correct path hashed server path" do
305- # # TODO: fix after adding rsc_bundle_js_file config
306- # allow(ReactOnRails).to receive_message_chain("configuration.rsc_bundle_js_file")
307- # .and_return("rsc-server-bundle.js")
308- # allow(ReactOnRails).to receive_message_chain("configuration.server_bundle_js_file")
309- # .and_return("server-bundle.js")
310- # allow(ReactOnRails).to receive_message_chain("configuration.same_bundle_for_client_and_server")
311- # .and_return(false)
312- # mock_bundle_in_manifest("rsc-bundle.js", "webpack/development/server-bundle-123456.js")
313- # mock_dev_server_running
314-
315- # path = described_class.rsc_bundle_js_file_path
316-
317- # expect(path).to end_with("/public/webpack/development/server-bundle-123456.js")
318- # end
319- # end
300+ context "with dev-server running, and server file in the manifest, and separate client/server files" ,
301+ packer_type . to_sym do
302+ it "returns the correct path hashed server path" do
303+ mock_bundle_configs ( rsc_bundle_name : "rsc-bundle.js" )
304+ allow ( ReactOnRails ) . to receive_message_chain ( "configuration.same_bundle_for_client_and_server" )
305+ . and_return ( false )
306+ mock_bundle_in_manifest ( "rsc-bundle.js" , "webpack/development/server-bundle-123456.js" )
307+ mock_dev_server_running
308+
309+ path = described_class . rsc_bundle_js_file_path
310+
311+ expect ( path ) . to end_with ( "/public/webpack/development/server-bundle-123456.js" )
312+ end
313+ end
320314 end
321315 end
322316
0 commit comments