I have this controller method: def create_stk eval <<-EOS @#{@controller_varname} = @class_controller.find(@params[:id]) if params[@controller_varname][:stk].content_type.chomp == 'application/pdf' then @#{@controller_varname}.stk = params[@controller_varname][:stk].read if @#{@controller_varname}.save flash['notice'] = 'STK #{Inflector.titleize(@controller_varname)} berhasil dibuat.' redirect_to :controller => 'element' else render_action 'create_stk' end else flash[:notice] = 'Dokumen yang dikirim harus berformat pdf.' redirect_to :action => 'new_stk', :id => @params[:id] end EOS end
I want to test it with functional test. First I have to tell you what the controller is doing? It just accept file that somebody send, check the type ( must be pdf ), then put in attribute of database record that already exists. So I want to test if somebody does not send pdf file, the view must display some warnings. But how do you emulate sending file in controller test. Here is the test method: def test_send_invalid_stk post :create_stk, { :id => @don_dafii_order.id, :thermo_detector => { :stk => '' }} end
:stk is the file parameter. If I execute this, it complains there is no content_type method for string.
Thank you.