spec/controllers/js_base_spec.rb in rhoconnect-4.0.4 vs spec/controllers/js_base_spec.rb in rhoconnect-5.1.1

- old
+ new

@@ -4,153 +4,159 @@ describe "Rhoconnect::Controller::JsBase" do include Rack::Test::Methods include Rhoconnect - it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do - def app - @app = Rack::URLMap.new Rhoconnect.url_map - end + include_examples "SharedRhoconnectHelper", :rhoconnect_data => true - def remove_application_controller - Object.send(:remove_const, :ApplicationController) rescue nil + def app + @app = Rack::URLMap.new Rhoconnect.url_map + end + + def remove_application_controller + Object.send(:remove_const, :ApplicationController) rescue nil + end + + after(:all) do + Rhoconnect.use_node = false + end + + def bootstrap_rhoconnect(jsapp = false) + Rhoconnect::Server.set :environment, :test + Rhoconnect::Server.set :secret, "secure!" + Rhoconnect.use_node = true + if jsapp + Rhoconnect.bootstrap(get_jstestapp_path) + else + Rhoconnect.bootstrap(get_testapp_path) end + # reload ruby controllers + Dir[File.join(Rhoconnect.app_directory,'controllers','ruby','*.rb')].each do |controller_file| + load controller_file + end + # reload ruby models + Dir[File.join(Rhoconnect.app_directory,'models','ruby','*.rb')].each do |model_file| + load model_file + end + end + describe "ApplicationController" do after(:all) do - Rhoconnect.use_node = false + Rhoconnect.remove_from_url_map(ApplicationController) + remove_application_controller end - def bootstrap_rhoconnect(jsapp = false) - Rhoconnect::Server.set :environment, :test - Rhoconnect::Server.set :secret, "secure!" - Rhoconnect.use_node = true - if jsapp - Rhoconnect.bootstrap(get_jstestapp_path) - else - Rhoconnect.bootstrap(get_testapp_path) - end - # reload ruby controllers - Dir[File.join(Rhoconnect.app_directory,'controllers','ruby','*.rb')].each do |controller_file| - load controller_file - end - # reload ruby models - Dir[File.join(Rhoconnect.app_directory,'models','ruby','*.rb')].each do |model_file| - load model_file - end + it "should call Store api in ApplicationController" do + Rhoconnect.remove_from_url_map(ApplicationController) + remove_application_controller + bootstrap_rhoconnect(true) + do_post "/rc/#{Rhoconnect::API_VERSION}/app/login", "login" => 'storeapitest', "password" => 'testpass' + Store.get_value('loginkey').should == 'storeapitest' end - describe "ApplicationController" do - after(:each) do - Rhoconnect.remove_from_url_map(ApplicationController) - remove_application_controller - end + it "should use user defined :node_channel_timeout value for test environment" do + Rhoconnect.remove_from_url_map(ApplicationController) + remove_application_controller + bootstrap_rhoconnect(true) + Rhoconnect::NodeChannel.timeout.should == 60 + end + end - it "should call Store api in ApplicationController" do - Rhoconnect.remove_from_url_map(ApplicationController) - remove_application_controller - bootstrap_rhoconnect(true) - do_post "/rc/#{Rhoconnect::API_VERSION}/app/login", "login" => 'storeapitest', "password" => 'testpass' - Store.get_value('loginkey').should == 'storeapitest' - end + describe "Named Controller" do + before(:each) do + bootstrap_rhoconnect + do_post "/rc/#{Rhoconnect::API_VERSION}/app/login", "login" => @u.login, "password" => 'testpass' end - describe "Named Controller" do + it "should get / of js controller with route overridden" do + get '/app/v1/JsSample', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + last_response.should be_ok + body = JSON.parse(last_response.body) + body[2]['count'].should == 1 + body.last['insert'].should == {'1' => {'name' => 'iPhone'}} + end - before(:each) do - bootstrap_rhoconnect - do_post "/rc/#{Rhoconnect::API_VERSION}/app/login", "login" => @u.login, "password" => 'testpass' - end + it "should get /custom_route of js controller" do + get '/app/v1/JsSample/custom_route', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + last_response.body.should == 'testuser' + end - it "should get / of js controller with route overridden" do - get '/app/v1/JsSample', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - last_response.should be_ok - body = JSON.parse(last_response.body) - body[2]['count'].should == 1 - body.last['insert'].should == {'1' => {'name' => 'iPhone'}} - end + it "should get /source from custom route" do + get '/app/v1/JsSample/custom_route2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + last_response.body.should == 'JsSample' + end - it "should get /custom_route of js controller" do - get '/app/v1/JsSample/custom_route', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - last_response.body.should == 'testuser' - end + it "should get stash_result from js model" do + pending "stash_result not supported yet" + get '/app/v1/JsSample/custom_route3',{}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + res = JSON.parse(last_response.body) + res[2]["count"].should == 1 + end - it "should get /source from custom route" do - get '/app/v1/JsSample/custom_route2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - last_response.body.should == 'JsSample' - end + it "should register sync route" do + get '/app/v1/Sample2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + res = JSON.parse(last_response.body) + res[2]["count"].should == 1 + end - it "should get stash_result from js model" do - pending "stash_result not supported yet" - get '/app/v1/JsSample/custom_route3',{}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - res = JSON.parse(last_response.body) - res[2]["count"].should == 1 - end + it "should post to js controller" do + hsh = {'1'=>{'name'=>'testname','price'=>'$199'}} + post '/app/v1/JsSample',hsh, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + last_response.should be_ok + end - it "should register sync route" do - get '/app/v1/Sample2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - res = JSON.parse(last_response.body) - res[2]["count"].should == 1 - end + it "should put to js controller" do + put '/app/v1/JsSample/2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + last_response.body.should == '' + end - it "should post to js controller" do - hsh = {'1'=>{'name'=>'testname','price'=>'$199'}} - post '/app/v1/JsSample',hsh, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - last_response.should be_ok - end + it "should delete to js controller" do + @c1 = Client.create({:user_id => @u.id,:app_id => @a.id},{:source_name => 'JsSample'}) + set_doc_state(@c1, :cd => @data) + delete '/app/v1/JsSample/2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c1.id} + last_response.should be_ok + end - it "should put to js controller" do - put '/app/v1/JsSample/2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - last_response.body.should == '' - end + it "should call route that overrides default option" do + get '/app/v1/JsSample/no_client_route', {} + last_response.should be_ok + last_response.body.should == 'no client required!' + end - it "should delete to js controller" do - @c1 = Client.create({:user_id => @u.id,:app_id => @a.id},{:source_name => 'JsSample'}) - set_doc_state(@c1, :cd => @data) - delete '/app/v1/JsSample/2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c1.id} - last_response.should be_ok - end + it "should upload blob in multipart post" do + file1,file2 = 'upload1.txt' + @product1['txtfile-rhoblob'] = file1 + @product1['_id'] = 'tempobj1' + cud = {'create'=>{'1'=>{'name'=>'hello'}}, + :blob_fields => ['txtfile-rhoblob']}.to_json + post "/app/#{Rhoconnect::API_VERSION}/JsSample", + {:cud => cud,'txtfile-rhoblob-1' => + Rack::Test::UploadedFile.new(File.join(File.dirname(__FILE__),'..','testdata',file1), "application/octet-stream")}, + {Rhoconnect::CLIENT_ID_HEADER => @c.id} + last_response.should be_ok + get "/app/#{Rhoconnect::API_VERSION}/JsSample", {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} + json = JSON.parse(last_response.body) + json[5]['links'].should == { "1" => { "l" => "blob_created" } } + json[5]['delete'].should == { "blob_created" => { "name" => "hello", "txtfile-rhoblob" => "blob_created" } } + end - it "should call route that overrides default option" do - get '/app/v1/JsSample/no_client_route', {} - last_response.should be_ok - last_response.body.should == 'no client required!' - end + it "should push_objects to js controller" do + s = Source.load('JsSample', @s_params) + data = {'1' => @product1, '2' => @product2, '3' => @product3} + post "/app/#{Rhoconnect::API_VERSION}/JsSample/push_objects", + {:user_id => @u.id, :objects => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token} + last_response.should be_ok + verify_doc_result(s, {:md => data, :md_size=>'3'}) + end - it "should upload blob in multipart post" do - file1,file2 = 'upload1.txt' - @product1['txtfile-rhoblob'] = file1 - @product1['_id'] = 'tempobj1' - cud = {'create'=>{'1'=>{'name'=>'hello'}}, - :blob_fields => ['txtfile-rhoblob']}.to_json - post "/app/#{Rhoconnect::API_VERSION}/JsSample", - {:cud => cud,'txtfile-rhoblob-1' => - Rack::Test::UploadedFile.new(File.join(File.dirname(__FILE__),'..','testdata',file1), "application/octet-stream")}, - {Rhoconnect::CLIENT_ID_HEADER => @c.id} - last_response.should be_ok - get "/app/#{Rhoconnect::API_VERSION}/JsSample", {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id} - json = JSON.parse(last_response.body) - json[5]['links'].should == { "1" => { "l" => "blob_created" } } - json[5]['delete'].should == { "blob_created" => { "name" => "hello", "txtfile-rhoblob" => "blob_created" } } - end - - it "should push_objects to js controller" do - s = Source.load('JsSample', @s_params) - data = {'1' => @product1, '2' => @product2, '3' => @product3} - post "/app/#{Rhoconnect::API_VERSION}/JsSample/push_objects", - {:user_id => @u.id, :objects => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token} - last_response.should be_ok - verify_doc_result(s, {:md => data, :md_size=>'3'}) - end - - it "should push_deletes to js controller" do - data = {'1' => @product1, '2' => @product2, '3' => @product3} - s = Source.load('JsSample',@s_params) - set_doc_state(s, {:md => data, :md_size => '3'}) - data.delete('2') - post "/app/#{Rhoconnect::API_VERSION}/JsSample/push_deletes", - {:user_id => @u.id, :objects => ['2']}, {Rhoconnect::API_TOKEN_HEADER => @api_token} - last_response.should be_ok - verify_doc_result(s, {:md => data, :md_size=>'2'}) - end + it "should push_deletes to js controller" do + data = {'1' => @product1, '2' => @product2, '3' => @product3} + s = Source.load('JsSample',@s_params) + set_doc_state(s, {:md => data, :md_size => '3'}) + data.delete('2') + post "/app/#{Rhoconnect::API_VERSION}/JsSample/push_deletes", + {:user_id => @u.id, :objects => ['2']}, {Rhoconnect::API_TOKEN_HEADER => @api_token} + last_response.should be_ok + verify_doc_result(s, {:md => data, :md_size=>'2'}) end end end \ No newline at end of file