11# frozen_string_literal: true
22
3- require "async"
4- require "async/queue"
53require "rails_helper"
64require "support/script_tag_utils"
75
@@ -329,7 +327,6 @@ def response; end
329327 HTML
330328 end
331329
332- # Mock chunks can be Async::Queue or Array
333330 def mock_request_and_response ( mock_chunks = chunks , count : 1 )
334331 # Reset connection instance variables to ensure clean state for tests
335332 ReactOnRailsPro ::Request . instance_variable_set ( :@connection , nil )
@@ -342,16 +339,9 @@ def mock_request_and_response(mock_chunks = chunks, count: 1)
342339 chunks_read . clear
343340 mock_streaming_response ( %r{http://localhost:3800/bundles/[a-f0-9]{32}-test/render/[a-f0-9]{32}} , 200 ,
344341 count : count ) do |yielder |
345- if mock_chunks . is_a? ( Async ::Queue )
346- while ( chunk = mock_chunks . dequeue )
347- chunks_read << chunk
348- yielder . call ( "#{ chunk . to_json } \n " )
349- end
350- else
351- mock_chunks . each do |chunk |
352- chunks_read << chunk
353- yielder . call ( "#{ chunk . to_json } \n " )
354- end
342+ mock_chunks . each do |chunk |
343+ chunks_read << chunk
344+ yielder . call ( "#{ chunk . to_json } \n " )
355345 end
356346 end
357347 end
@@ -421,7 +411,6 @@ def mock_request_and_response(mock_chunks = chunks, count: 1)
421411 describe "stream_view_containing_react_components" do # rubocop:disable RSpec/MultipleMemoizedHelpers
422412 let ( :mocked_stream ) { instance_double ( ActionController ::Live ::Buffer ) }
423413 let ( :written_chunks ) { [ ] }
424- let ( :chunks_queue ) { Async ::Queue . new }
425414
426415 before do
427416 written_chunks . clear
@@ -439,55 +428,18 @@ def mock_request_and_response(mock_chunks = chunks, count: 1)
439428
440429 allow ( mocked_stream ) . to receive ( :write ) do |chunk |
441430 written_chunks << chunk
431+ # Ensures that any chunk received is written immediately to the stream
432+ expect ( written_chunks . count ) . to eq ( chunks_read . count ) # rubocop:disable RSpec/ExpectInHook
442433 end
443434 allow ( mocked_stream ) . to receive ( :close )
444435 mocked_response = instance_double ( ActionDispatch ::Response )
445436 allow ( mocked_response ) . to receive ( :stream ) . and_return ( mocked_stream )
446437 allow ( self ) . to receive ( :response ) . and_return ( mocked_response )
447- mock_request_and_response ( chunks_queue )
448- end
449-
450- def run_stream
451- queue = chunks_queue
452- Sync do |parent |
453- parent . async do
454- stream_view_containing_react_components ( template : template_path )
455- end
456-
457- writer = Object . new
458- chunks_to_write = chunks . dup
459- writer . define_singleton_method ( :write_next_chunk ) do
460- chunk = chunks_to_write . shift
461- if chunk . nil?
462- queue . close
463- parent . sleep 0.05
464- return nil
465- end
466-
467- queue . enqueue ( chunk )
468- parent . sleep 0.05
469- chunk
470- end
471- writer . define_singleton_method ( :write_rest_of_chunks ) do
472- while ( chunk = chunks_to_write . shift )
473- queue . enqueue ( chunk )
474- end
475- parent . sleep 0.1
476- end
477- yield ( writer )
478- end
438+ mock_request_and_response
479439 end
480440
481441 it "writes the chunk to stream as soon as it is received" do
482- run_stream do |writer |
483- expect ( self ) . to have_received ( :render_to_string )
484-
485- while writer . write_next_chunk
486- # Ensures that any chunk received is written immediately to the stream
487- expect ( written_chunks . count ) . to eq ( chunks_read . count )
488- end
489- end
490-
442+ stream_view_containing_react_components ( template : template_path )
491443 expect ( self ) . to have_received ( :render_to_string ) . once . with ( template : template_path )
492444 expect ( chunks_read . count ) . to eq ( chunks . count )
493445 expect ( written_chunks . count ) . to eq ( chunks . count )
0 commit comments