@@ -21,6 +21,12 @@ class PlainReactOnRailsHelper
2121 { "HTTP_ACCEPT_LANGUAGE" => "en" }
2222 )
2323 }
24+
25+ allow ( ReactOnRails ::Utils ) . to receive_messages (
26+ react_on_rails_pro? : true ,
27+ react_on_rails_pro_version : "4.0.0" ,
28+ rsc_support_enabled? : false
29+ )
2430 end
2531
2632 let ( :hash ) do
@@ -370,10 +376,139 @@ def helper.append_javascript_pack_tag(name, **options)
370376 it { is_expected . to include force_load_script }
371377 end
372378 end
379+
380+ describe "with Pro license warning" do
381+ let ( :badge_html_string ) { "React On Rails Pro Required" }
382+
383+ before do
384+ allow ( Rails . logger ) . to receive ( :warn )
385+ end
386+
387+ context "when Pro license is NOT installed and force_load is true" do
388+ subject ( :react_app ) { react_component ( "App" , props : props , force_load : true ) }
389+
390+ before do
391+ allow ( ReactOnRails ::Utils ) . to receive ( :react_on_rails_pro? ) . and_return ( false )
392+ end
393+
394+ it { is_expected . to include ( badge_html_string ) }
395+
396+ it "logs a warning" do
397+ react_app
398+ expect ( Rails . logger ) . to have_received ( :warn ) . with ( a_string_matching ( /The 'force_load' feature requires/ ) )
399+ end
400+ end
401+
402+ context "when Pro license is NOT installed and global force_load is true" do
403+ subject ( :react_app ) { react_component ( "App" , props : props ) }
404+
405+ before do
406+ allow ( ReactOnRails ::Utils ) . to receive ( :react_on_rails_pro? ) . and_return ( false )
407+ end
408+
409+ around do |example |
410+ ReactOnRails . configure { |config | config . force_load = true }
411+ example . run
412+ ReactOnRails . configure { |config | config . force_load = false }
413+ end
414+
415+ it { is_expected . to include ( badge_html_string ) }
416+ end
417+
418+ context "when Pro license is NOT installed and force_load is false" do
419+ subject ( :react_app ) { react_component ( "App" , props : props , force_load : false ) }
420+
421+ before do
422+ allow ( ReactOnRails ::Utils ) . to receive ( :react_on_rails_pro? ) . and_return ( false )
423+ end
424+
425+ it { is_expected . not_to include ( badge_html_string ) }
426+
427+ it "does not log a warning" do
428+ react_app
429+ expect ( Rails . logger ) . not_to have_received ( :warn )
430+ end
431+ end
432+
433+ context "when Pro license IS installed and force_load is true" do
434+ subject ( :react_app ) { react_component ( "App" , props : props , force_load : true ) }
435+
436+ before do
437+ allow ( ReactOnRails ::Utils ) . to receive_messages (
438+ react_on_rails_pro? : true ,
439+ react_on_rails_pro_version : "4.0.0"
440+ )
441+ end
442+
443+ it { is_expected . not_to include ( badge_html_string ) }
444+
445+ it "does not log a warning" do
446+ react_app
447+ expect ( Rails . logger ) . not_to have_received ( :warn )
448+ end
449+ end
450+ end
451+ end
452+
453+ describe "#react_component_hash" do
454+ subject ( :react_app ) { react_component_hash ( "App" , props : props ) }
455+
456+ let ( :props ) { { name : "My Test Name" } }
457+
458+ before do
459+ allow ( SecureRandom ) . to receive ( :uuid ) . and_return ( 0 )
460+ allow ( ReactOnRails ::ServerRenderingPool ) . to receive ( :server_render_js_with_console_logging ) . and_return (
461+ "html" => { "componentHtml" => "<div>Test</div>" , "title" => "Test Title" } ,
462+ "consoleReplayScript" => ""
463+ )
464+ allow ( ReactOnRails ::ServerRenderingJsCode ) . to receive ( :js_code_renderer )
465+ . and_return ( ReactOnRails ::ServerRenderingJsCode )
466+ end
467+
468+ it "returns a hash with component and other keys" do
469+ expect ( react_app ) . to be_a ( Hash )
470+ expect ( react_app ) . to have_key ( "componentHtml" )
471+ expect ( react_app ) . to have_key ( "title" )
472+ end
473+
474+ context "with Pro license warning" do
475+ let ( :badge_html_string ) { "React On Rails Pro Required" }
476+
477+ before do
478+ allow ( Rails . logger ) . to receive ( :warn )
479+ end
480+
481+ context "when Pro license is NOT installed and force_load is true" do
482+ subject ( :react_app ) { react_component_hash ( "App" , props : props , force_load : true ) }
483+
484+ before do
485+ allow ( ReactOnRails ::Utils ) . to receive ( :react_on_rails_pro? ) . and_return ( false )
486+ end
487+
488+ it "adds badge to componentHtml" do
489+ expect ( react_app [ "componentHtml" ] ) . to include ( badge_html_string )
490+ end
491+ end
492+
493+ context "when Pro license IS installed and force_load is true" do
494+ subject ( :react_app ) { react_component_hash ( "App" , props : props , force_load : true ) }
495+
496+ before do
497+ allow ( ReactOnRails ::Utils ) . to receive_messages (
498+ react_on_rails_pro? : true ,
499+ react_on_rails_pro_version : "4.0.0"
500+ )
501+ end
502+
503+ it "does not add badge to componentHtml" do
504+ expect ( react_app [ "componentHtml" ] ) . not_to include ( badge_html_string )
505+ end
506+ end
507+ end
373508 end
374509
375510 describe "#redux_store" do
376- subject ( :store ) { redux_store ( "reduxStore" , props : props ) }
511+ subject ( :store ) { redux_store ( "reduxStore" , props : props , force_load : true ) }
377512
378513 let ( :props ) do
379514 { name : "My Test Name" }
@@ -394,6 +529,52 @@ def helper.append_javascript_pack_tag(name, **options)
394529 it {
395530 expect ( expect ( store ) . target ) . to script_tag_be_included ( react_store_script )
396531 }
532+
533+ context "with Pro license warning" do
534+ let ( :badge_html_string ) { "React On Rails Pro Required" }
535+
536+ before do
537+ allow ( Rails . logger ) . to receive ( :warn )
538+ end
539+
540+ context "when Pro license is NOT installed and force_load is true" do
541+ subject ( :store ) { redux_store ( "reduxStore" , props : props , force_load : true ) }
542+
543+ before do
544+ allow ( ReactOnRails ::Utils ) . to receive ( :react_on_rails_pro? ) . and_return ( false )
545+ end
546+
547+ it { is_expected . to include ( badge_html_string ) }
548+
549+ it "logs a warning" do
550+ store
551+ expect ( Rails . logger ) . to have_received ( :warn ) . with ( a_string_matching ( /The 'force_load' feature requires/ ) )
552+ end
553+ end
554+
555+ context "when Pro license is NOT installed and force_load is false" do
556+ subject ( :store ) { redux_store ( "reduxStore" , props : props , force_load : false ) }
557+
558+ before do
559+ allow ( ReactOnRails ::Utils ) . to receive ( :react_on_rails_pro? ) . and_return ( false )
560+ end
561+
562+ it { is_expected . not_to include ( badge_html_string ) }
563+ end
564+
565+ context "when Pro license IS installed and force_load is true" do
566+ subject ( :store ) { redux_store ( "reduxStore" , props : props , force_load : true ) }
567+
568+ before do
569+ allow ( ReactOnRails ::Utils ) . to receive_messages (
570+ react_on_rails_pro? : true ,
571+ react_on_rails_pro_version : "4.0.0"
572+ )
573+ end
574+
575+ it { is_expected . not_to include ( badge_html_string ) }
576+ end
577+ end
397578 end
398579
399580 describe "#server_render_js" , :js , type : :system do
0 commit comments