class MultipartProgressTest

Public Instance Methods

test_basic_setup() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 292
def test_basic_setup
  test_logger.debug('test_basic_setup')

  cgi, request, response = new_request(100000)
  assert_not_nil(request.session)
  assert_not_nil(request.session[:uploads], "uploads collection not set")
  assert_not_nil(request.session[:uploads][cgi.upload_id], "upload id not set")
  progress = request.session[:uploads][cgi.upload_id]
  assert_equal(true, progress.finished?)
end
test_domain_language_double() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 202
def test_domain_language_double
  c = Controllers::DoubleUploadController.new
  assert_respond_to(c, :one)
  assert_respond_to(c, :two)
  assert_respond_to(c, :upload_status)
  assert_respond_to(c, :finish_upload_status)
end
test_domain_language_double_seperate() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 218
def test_domain_language_double_seperate
  c = Controllers::DoubleSeperateController.new
  assert_respond_to(c, :one)
  assert_respond_to(c, :two)
  assert_respond_to(c, :upload_status)
  assert_respond_to(c, :finish_upload_status)
end
test_domain_language_double_status() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 210
def test_domain_language_double_status
  c = Controllers::DoubleStatusUploadController.new
  assert_respond_to(c, :one)
  assert_respond_to(c, :two)
  assert_respond_to(c, :custom_status)
  assert_respond_to(c, :finish_upload_status)
end
test_domain_language_single() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 195
def test_domain_language_single
  c = Controllers::SingleUploadController.new
  assert_respond_to(c, :one)
  assert_respond_to(c, :upload_status)
  assert_respond_to(c, :finish_upload_status)
end
test_finish_status_finish_param() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 270
def test_finish_status_finish_param
  test_logger.debug('test_finish_status_param')

  res = process(:action => :finish_param_string, :upload_id => 1)
  assert_match(/stop\('a string'\)/s, res.body)
  assert_no_redirect res

  res = process(:action => :finish_param_dict, :upload_id => 1)
  assert_match(/stop\(\{a: 'b'\}\)/s, res.body)
  assert_no_redirect res

  res = process(:action => :finish_param_number, :upload_id => 1)
  assert_match(/stop\(123\)/s, res.body)
  assert_no_redirect res

  res = process(:action => :finish_param_number_redirect, :upload_id => 1)
  test_logger.debug('test_finish_status_param: ' + res.body)
  assert_match(/stop\(123\)/s, res.body)
  assert_match(/replace\('\http:\/\/localhost\/redirected\/'\).*?/s, res.body)
  assert_no_redirect res
end
test_finish_status_norendered() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 226
def test_finish_status_norendered
  # Fails to render the upload finish script because there is no view associated with this action
  test_logger.debug('test_finish_status_norendered')

  res = process(:action => 'norendered', :upload_id => 1)
  assert_match(/ActionView::ActionViewError/s, res.body)
  
  res = process(:action => :upload_status, :upload_id => 1)
  assert_match(/Upload finished/s, res.body)

  res = process(:action => :norendered)
  assert_match(/ActionView::ActionViewError/s, res.body)
end
test_finish_status_redirected() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 255
def test_finish_status_redirected
  test_logger.debug('test_finish_status_redirected')

  res = process(:action => :redirected, :upload_id => 1)
  assert_match(/location\.replace/s, res.body)
  
  res = process(:action => :redirected)
  assert_no_match(/location\.replace/s, res.body)
  assert_match(/\/redirected\//s, res.headers['location'])
  assert_match(/302 .*$/, res.headers['Status'])

  res = process(:action => :upload_status, :upload_id => 1)
  assert_match(/Upload finished/s, res.body)
end
test_finish_status_rendered() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 240
def test_finish_status_rendered
  test_logger.debug('test_finish_status_rendered')

  res = process(:action => :rendered, :upload_id => 1)
  assert_match(/stop\(\)/s, res.body)
  assert_no_match(/rendered/s, res.body)
  
  res = process(:action => :upload_status, :upload_id => 1)
  assert_match(/Upload finished/s, res.body)
  
  res = process(:action => :rendered)
  assert_no_match(/stop\(\)/s, res.body)
  assert_match(/rendered/, res.body)
end
test_params() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 303
def test_params
  test_logger.debug('test_params')

  cgi, request, response = new_request(1000)
  assert(!request.params.empty?)
  assert(!request.params['param1'].empty?)
end
test_share_session() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 311
def test_share_session
  cgi, request, response = new_request(100000) do |cgi, req|
    if cgi.stdinput.tell > 50000
      # force a save
      cgi.stdinput.save_progress rescue flunk('Something else is wrong, our wrapper isnt setup, is ActionController::Base.logger set?')

      other_session = CGI::Session.new(cgi, cgi.session_options.merge({'session_id' => cgi.session_id}))
      assert_not_nil(other_session[:uploads])
      assert_not_nil(other_session[:uploads][cgi.upload_id])
      assert_in_delta(cgi.stdinput.session[:uploads][cgi.upload_id].bitrate, other_session[:uploads][cgi.upload_id].bitrate, 1000.0, "Seperate session does not share data from original session")

      other_session.close
    end
  end
end
test_upload_ids() click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 327
def test_upload_ids
  c = Controllers::MockController.new
  (1..222).each do |id|
    c.params = {}

    assert_equal((id-1).to_s, c.last_upload_id, "last_upload_id is out of sync")
    assert_equal(id.to_s, c.next_upload_id, "next_upload_id is out of sync")
    assert_equal(id.to_s, c.current_upload_id, "current_upload_id is out of sync")

    c.params = {:upload_id => (id-1).to_s}
    assert_equal((id-1).to_s, c.current_upload_id, "current_upload_id is out of sync")

    c.session[:uploads][id] = {}
  end
end

Private Instance Methods

assert_no_redirect(res) click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 358
def assert_no_redirect(res)
  assert_nil(res.redirected_to)
  assert_nil(res.headers['location'])
  assert_match(/200 .*$/, res.headers['Status'])
end
new_request(size=1000, url='/test', &block) click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 344
def new_request(size=1000, url='/test', &block)
  test_logger.debug('Creating MockCGI')
  cgi = MockCGI.new(size, url) do |cgi|
    block.call(cgi) if block_given?
  end

  assert(cgi.private_methods.include?("read_multipart_with_progress")) 
  return [cgi, ActionController::CgiRequest.new(cgi), ActionController::CgiResponse.new(cgi)]
end
process(options = {}) click to toggle source
# File lib/upload_progress/test/multipart_progress_testx.rb, line 354
def process(options = {})
  Controllers::UploadController.process(*(new_request(1000, '/upload?' + options.map {|k,v| "#{k}=#{v}"}.join('&'))[1..2]))
end