From 881d393aff2598c4a0c4a23fee85ebe9fe478b03 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 19 Sep 2013 16:51:21 +0100 Subject: Add a can_make_batch_requests flag to user model Make it updatable via the user admin page. --- spec/controllers/admin_user_controller_spec.rb | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/admin_user_controller_spec.rb b/spec/controllers/admin_user_controller_spec.rb index a6e5a0d7e..99894a414 100644 --- a/spec/controllers/admin_user_controller_spec.rb +++ b/spec/controllers/admin_user_controller_spec.rb @@ -15,13 +15,32 @@ describe AdminUserController, "when administering users" do it "shows a user" do get :show, :id => users(:bob_smith_user) end - + it "logs in as another user" do get :login_as, :id => users(:bob_smith_user).id post_redirect = PostRedirect.get_last_post_redirect response.should redirect_to(:controller => 'user', :action => 'confirm', :email_token => post_redirect.email_token) end - + # See also "allows an admin to log in as another user" in spec/integration/admin_spec.rb end +describe AdminUserController, "when updating a user" do + + it "saves a change to 'can_make_batch_requests'" do + user = FactoryGirl.create(:user) + user.can_make_batch_requests?.should be_false + post :update, {:id => user.id, :admin_user => {:can_make_batch_requests => '1', + :name => user.name, + :email => user.email, + :admin_level => user.admin_level, + :ban_text => user.ban_text, + :about_me => user.about_me, + :no_limit => user.no_limit}} + flash[:notice].should == 'User successfully updated.' + response.should be_redirect + user = User.find(user.id) + user.can_make_batch_requests?.should be_true + end + +end -- cgit v1.2.3 From 7e6fdfc403c4c35052d5432a844bf9855e217db7 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 19 Sep 2013 17:19:21 +0100 Subject: Add a select_authorities action. --- spec/controllers/request_controller_spec.rb | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index def9dfc7e..1de917bb4 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2509,3 +2509,12 @@ describe RequestController, "when caching fragments" do end +describe RequestController, "#select_authorities" do + + it 'should be succesful' do + get :select_authorities + response.should be_success + end + +end + -- cgit v1.2.3 From d75607f15efe0886ee008c4425b824b485e612bc Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Mon, 23 Sep 2013 14:23:01 +0100 Subject: Handle not enabled, no user, unauthorised user. --- spec/controllers/request_controller_spec.rb | 58 +++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 1de917bb4..1a95a5ac5 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2511,9 +2511,61 @@ end describe RequestController, "#select_authorities" do - it 'should be succesful' do - get :select_authorities - response.should be_success + context "when batch requests is enabled" do + + before do + AlaveteliConfiguration.stub!(:allow_batch_requests).and_return(true) + end + + context "when the current user can make batch requests" do + + before do + @user = FactoryGirl.create(:user, :can_make_batch_requests => true) + end + + it 'should be successful' do + get :select_authorities, {}, {:user_id => @user.id} + response.should be_success + end + + end + + context "when the current user can't make batch requests" do + + render_views + + before do + @user = FactoryGirl.create(:user) + end + + it 'should return a 403 with an appropriate message' do + get :select_authorities, {}, {:user_id => @user.id} + response.code.should == '403' + response.body.should match("Users cannot usually make batch requests to multiple authorities at once") + end + + end + + context 'when there is no logged-in user' do + + it 'should return a redirect to the login page' do + get :select_authorities + post_redirect = PostRedirect.get_last_post_redirect + response.should redirect_to(:controller => 'user', :action => 'signin', :token => post_redirect.token) + end + end + + + end + + context "when batch requests is not enabled" do + + it 'should return a 404' do + Rails.application.config.stub!(:consider_all_requests_local).and_return(false) + get :select_authorities + response.code.should == '404' + end + end end -- cgit v1.2.3 From 6c824047da0f5aa98e6ca08cf3aae391c5225efe Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Tue, 3 Dec 2013 10:15:42 +0000 Subject: Add template for select_authorities Should retain a list of selected public bodies across searches. --- spec/controllers/request_controller_spec.rb | 34 +++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 1a95a5ac5..d29552b15 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -897,7 +897,7 @@ describe RequestController, "when handling prominence" do expect_hidden('request/hidden_correspondence') end - it 'should download attachments for an admin user', :focus => true do + it 'should download attachments for an admin user' do session[:user_id] = FactoryGirl.create(:admin_user).id get :get_attachment, :incoming_message_id => @incoming_message.id, :id => @info_request.id, @@ -959,7 +959,7 @@ describe RequestController, "when handling prominence" do response.should be_success end - it 'should download attachments for an admin user', :focus => true do + it 'should download attachments for an admin user' do session[:user_id] = FactoryGirl.create(:admin_user).id get :get_attachment, :incoming_message_id => @incoming_message.id, :id => @info_request.id, @@ -2514,6 +2514,8 @@ describe RequestController, "#select_authorities" do context "when batch requests is enabled" do before do + get_fixtures_xapian_index + load_raw_emails_data AlaveteliConfiguration.stub!(:allow_batch_requests).and_return(true) end @@ -2528,6 +2530,34 @@ describe RequestController, "#select_authorities" do response.should be_success end + it 'should render the "select_authorities" template' do + get :select_authorities, {}, {:user_id => @user.id} + response.should render_template('request/select_authorities') + end + + it 'should assign a list of search results to the view if passed a query' do + get :select_authorities, {:public_body_query => "Quango"}, {:user_id => @user.id} + assigns[:search_bodies].results.size.should == 1 + assigns[:search_bodies].results[0][:model].name.should == public_bodies(:geraldine_public_body).name + end + + it 'should assign a list of public bodies to the view if passed a list of ids' do + get :select_authorities, {:public_body_ids => [public_bodies(:humpadink_public_body).id]}, + {:user_id => @user.id} + assigns[:public_bodies].size.should == 1 + assigns[:public_bodies][0].name.should == public_bodies(:humpadink_public_body).name + end + + it 'should subtract a list of public bodies to remove from the list of bodies assigned to + the view' do + get :select_authorities, {:public_body_ids => [public_bodies(:humpadink_public_body).id, + public_bodies(:geraldine_public_body).id], + :remove_public_body_ids => [public_bodies(:geraldine_public_body).id]}, + {:user_id => @user.id} + assigns[:public_bodies].size.should == 1 + assigns[:public_bodies][0].name.should == public_bodies(:humpadink_public_body).name + end + end context "when the current user can't make batch requests" do -- cgit v1.2.3 From ad8772fde14c57f05e2585c8c02034e053a86319 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Tue, 3 Dec 2013 09:43:32 +0000 Subject: Add new_batch action Give it basic access control, and add some conditionals to the 'new' template around bits that use @info_request.public_body so that they render something different if @batch is assigned. --- spec/controllers/request_controller_spec.rb | 66 +++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index d29552b15..2e928eb3b 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2509,6 +2509,72 @@ describe RequestController, "when caching fragments" do end +describe RequestController, "#new_batch", :focus => true do + + context "when batch requests is enabled" do + + before do + AlaveteliConfiguration.stub!(:allow_batch_requests).and_return(true) + end + + context "when the current user can make batch requests" do + + before do + @user = FactoryGirl.create(:user, :can_make_batch_requests => true) + end + + it 'should be successful' do + get :new_batch, {}, {:user_id => @user.id} + response.should be_success + end + + it 'should render the "new" template' do + get :new_batch, {}, {:user_id => @user.id} + response.should render_template('request/new') + end + + end + + context "when the current user can't make batch requests" do + + render_views + + before do + @user = FactoryGirl.create(:user) + end + + it 'should return a 403 with an appropriate message' do + get :new_batch, {}, {:user_id => @user.id} + response.code.should == '403' + response.body.should match("Users cannot usually make batch requests to multiple authorities at once") + end + + end + + context 'when there is no logged-in user' do + + it 'should return a redirect to the login page' do + get :new_batch + post_redirect = PostRedirect.get_last_post_redirect + response.should redirect_to(:controller => 'user', :action => 'signin', :token => post_redirect.token) + end + end + + + end + + context "when batch requests is not enabled" do + + it 'should return a 404' do + Rails.application.config.stub!(:consider_all_requests_local).and_return(false) + get :new_batch + response.code.should == '404' + end + + end + +end + describe RequestController, "#select_authorities" do context "when batch requests is enabled" do -- cgit v1.2.3 From acb186466b20172a6804f86f8a082f148ec50fc6 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Tue, 24 Sep 2013 19:23:12 +0100 Subject: Create template and outgoing message Add validation, preview as in single request creation. Add comments noting further work to be done in this action. --- spec/controllers/request_controller_spec.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 2e928eb3b..d92eb6aa2 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2533,6 +2533,35 @@ describe RequestController, "#new_batch", :focus => true do response.should render_template('request/new') end + + it "should render 'preview' when given a good title and body" do + + post :new_batch, { :info_request => { :title => "What does it all mean?", + :tag_string => "" }, + :outgoing_message => { :body => "This is a silly letter." }, + :submitted_new_request => 1, + :preview => 1 }, { :user_id => @user.id } + response.should render_template('preview') + end + + it "should give an error and render 'new' template when a summary isn't given" do + post :new_batch, { :info_request => { :tag_string => "" }, + :outgoing_message => { :body => "This is a silly letter." }, + :submitted_new_request => 1, + :preview => 1 }, { :user_id => @user.id } + assigns[:info_request].errors[:title].should == ['Please enter a summary of your request'] + response.should render_template('new') + end + + it "should allow re-editing of a request" do + post :new_batch, { :info_request => { :tag_string => "" }, + :outgoing_message => { :body => "This is a silly letter." }, + :submitted_new_request => 1, + :preview => 0, + :reedit => 1}, { :user_id => @user.id } + response.should render_template('new') + end + end context "when the current user can't make batch requests" do -- cgit v1.2.3 From 0aba4dcbcb19be2c2c66e40f051ae9c4e0283b6e Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Wed, 23 Oct 2013 11:19:13 +0100 Subject: Require at least one public body in the params. --- spec/controllers/request_controller_spec.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index d92eb6aa2..2fa6603d2 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2521,23 +2521,29 @@ describe RequestController, "#new_batch", :focus => true do before do @user = FactoryGirl.create(:user, :can_make_batch_requests => true) + @public_body = FactoryGirl.create(:public_body) end it 'should be successful' do - get :new_batch, {}, {:user_id => @user.id} + get :new_batch, {:public_body_ids => [@public_body.id]}, {:user_id => @user.id} response.should be_success end it 'should render the "new" template' do - get :new_batch, {}, {:user_id => @user.id} + get :new_batch, {:public_body_ids => [@public_body.id]}, {:user_id => @user.id} response.should render_template('request/new') end + it 'should redirect to "select_authorities" if no public_body_ids param is passed' do + get :new_batch, {}, {:user_id => @user.id} + response.should redirect_to select_authorities_path + end it "should render 'preview' when given a good title and body" do post :new_batch, { :info_request => { :title => "What does it all mean?", :tag_string => "" }, + :public_body_ids => [@public_body.id], :outgoing_message => { :body => "This is a silly letter." }, :submitted_new_request => 1, :preview => 1 }, { :user_id => @user.id } @@ -2546,6 +2552,7 @@ describe RequestController, "#new_batch", :focus => true do it "should give an error and render 'new' template when a summary isn't given" do post :new_batch, { :info_request => { :tag_string => "" }, + :public_body_ids => [@public_body.id], :outgoing_message => { :body => "This is a silly letter." }, :submitted_new_request => 1, :preview => 1 }, { :user_id => @user.id } @@ -2555,6 +2562,7 @@ describe RequestController, "#new_batch", :focus => true do it "should allow re-editing of a request" do post :new_batch, { :info_request => { :tag_string => "" }, + :public_body_ids => [@public_body.id], :outgoing_message => { :body => "This is a silly letter." }, :submitted_new_request => 1, :preview => 0, -- cgit v1.2.3 From cb277edff24bd347db75e51c5bdb3e7ef5d1a498 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Wed, 23 Oct 2013 15:13:23 +0100 Subject: Factor out common params for clarity. --- spec/controllers/request_controller_spec.rb | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 2fa6603d2..2f1c2d07b 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2522,6 +2522,12 @@ describe RequestController, "#new_batch", :focus => true do before do @user = FactoryGirl.create(:user, :can_make_batch_requests => true) @public_body = FactoryGirl.create(:public_body) + @default_post_params = { :info_request => { :title => "What does it all mean?", + :tag_string => "" }, + :public_body_ids => [@public_body.id], + :outgoing_message => { :body => "This is a silly letter." }, + :submitted_new_request => 1, + :preview => 1 } end it 'should be successful' do @@ -2540,33 +2546,20 @@ describe RequestController, "#new_batch", :focus => true do end it "should render 'preview' when given a good title and body" do - - post :new_batch, { :info_request => { :title => "What does it all mean?", - :tag_string => "" }, - :public_body_ids => [@public_body.id], - :outgoing_message => { :body => "This is a silly letter." }, - :submitted_new_request => 1, - :preview => 1 }, { :user_id => @user.id } + post :new_batch, @default_post_params, { :user_id => @user.id } response.should render_template('preview') end it "should give an error and render 'new' template when a summary isn't given" do - post :new_batch, { :info_request => { :tag_string => "" }, - :public_body_ids => [@public_body.id], - :outgoing_message => { :body => "This is a silly letter." }, - :submitted_new_request => 1, - :preview => 1 }, { :user_id => @user.id } + @default_post_params[:info_request].delete(:title) + post :new_batch, @default_post_params, { :user_id => @user.id } assigns[:info_request].errors[:title].should == ['Please enter a summary of your request'] response.should render_template('new') end it "should allow re-editing of a request" do - post :new_batch, { :info_request => { :tag_string => "" }, - :public_body_ids => [@public_body.id], - :outgoing_message => { :body => "This is a silly letter." }, - :submitted_new_request => 1, - :preview => 0, - :reedit => 1}, { :user_id => @user.id } + params = @default_post_params.merge(:preview => 0, :reedit => 1) + post :new_batch, params, { :user_id => @user.id } response.should render_template('new') end -- cgit v1.2.3 From 539041a4404cb918b5d87ce3b858a20fba09f35a Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 24 Oct 2013 11:45:19 +0100 Subject: Handle a banned user making batch requests. --- spec/controllers/request_controller_spec.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 2f1c2d07b..38566fde0 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2563,6 +2563,21 @@ describe RequestController, "#new_batch", :focus => true do response.should render_template('new') end + context "when the user is banned" do + + before do + @user.ban_text = "bad behaviour" + @user.save! + end + + it 'should show the "banned" template' do + post :new_batch, @default_post_params, { :user_id => @user.id } + response.should render_template('user/banned') + assigns[:details].should == 'bad behaviour' + end + + end + end context "when the current user can't make batch requests" do -- cgit v1.2.3 From af739bfb229c66655c86d588ad37920f3584973f Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 24 Oct 2013 16:11:42 +0100 Subject: Use two bodies in specs. --- spec/controllers/request_controller_spec.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 38566fde0..df32a1397 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2522,21 +2522,23 @@ describe RequestController, "#new_batch", :focus => true do before do @user = FactoryGirl.create(:user, :can_make_batch_requests => true) @public_body = FactoryGirl.create(:public_body) + @other_public_body = FactoryGirl.create(:public_body) + @public_body_ids = [@public_body.id, @other_public_body.id] @default_post_params = { :info_request => { :title => "What does it all mean?", :tag_string => "" }, - :public_body_ids => [@public_body.id], + :public_body_ids => @public_body_ids, :outgoing_message => { :body => "This is a silly letter." }, :submitted_new_request => 1, :preview => 1 } end it 'should be successful' do - get :new_batch, {:public_body_ids => [@public_body.id]}, {:user_id => @user.id} + get :new_batch, {:public_body_ids => @public_body_ids}, {:user_id => @user.id} response.should be_success end it 'should render the "new" template' do - get :new_batch, {:public_body_ids => [@public_body.id]}, {:user_id => @user.id} + get :new_batch, {:public_body_ids => @public_body_ids}, {:user_id => @user.id} response.should render_template('request/new') end -- cgit v1.2.3 From cf11b959899d54cf3c7f4e018f11c2c89c83d4af Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 24 Oct 2013 16:00:10 +0100 Subject: Simple code for the happy path Create the batch and associate new requests with it, send the outgoing messages, and redirect to a page for the new batch. --- spec/controllers/request_controller_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index df32a1397..6652d8f1f 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2565,6 +2565,14 @@ describe RequestController, "#new_batch", :focus => true do response.should render_template('new') end + it 'should create an info request batch and redirect to the new batch on success' do + params = @default_post_params.merge(:preview => 0) + post :new_batch, params, { :user_id => @user.id } + new_info_request_batch = assigns[:info_request_batch] + new_info_request_batch.should_not be_nil + response.should redirect_to(info_request_batch_path(new_info_request_batch)) + end + context "when the user is banned" do before do -- cgit v1.2.3 From 4b2e3ef0b6f5b881597242a4afe1404415256f3b Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 24 Oct 2013 16:19:22 +0100 Subject: Make method names for finding existing objects clearer They're not finding by the existing object, they're finding an existing object. --- spec/controllers/track_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/controllers') diff --git a/spec/controllers/track_controller_spec.rb b/spec/controllers/track_controller_spec.rb index 57d084f6b..40865d2b9 100644 --- a/spec/controllers/track_controller_spec.rb +++ b/spec/controllers/track_controller_spec.rb @@ -10,7 +10,7 @@ describe TrackController, "when making a new track on a request" do :tracking_user_id= => nil) TrackThing.stub!(:create_track_for_request).and_return(@track_thing) TrackThing.stub!(:create_track_for_search_query).and_return(@track_thing) - TrackThing.stub!(:find_by_existing_track).and_return(nil) + TrackThing.stub!(:find_existing).and_return(nil) InfoRequest.stub!(:find_by_url_title!) do |url_title| if url_title == "myrequest" @ir -- cgit v1.2.3 From ce262657761c1c47c47e2f6cc7bf683543ebbdb7 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 24 Oct 2013 17:03:52 +0100 Subject: Add check for double submission. --- spec/controllers/request_controller_spec.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 6652d8f1f..c61e0c780 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2573,6 +2573,17 @@ describe RequestController, "#new_batch", :focus => true do response.should redirect_to(info_request_batch_path(new_info_request_batch)) end + it 'should prevent double submission of a batch request' do + params = @default_post_params.merge(:preview => 0) + post :new_batch, params, { :user_id => @user.id } + new_info_request_batch = assigns[:info_request_batch] + response.should redirect_to(info_request_batch_path(new_info_request_batch)) + post :new_batch, params, { :user_id => @user.id } + response.should render_template('new') + assigns[:existing_batch].should_not be_nil + end + + context "when the user is banned" do before do -- cgit v1.2.3 From 0fdfad30f1232458ffcd624c893387ce300b49bb Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 24 Oct 2013 18:07:48 +0100 Subject: Notices for success and errors. --- spec/controllers/request_controller_spec.rb | 50 ++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 16 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index c61e0c780..be5a97776 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2565,24 +2565,42 @@ describe RequestController, "#new_batch", :focus => true do response.should render_template('new') end - it 'should create an info request batch and redirect to the new batch on success' do - params = @default_post_params.merge(:preview => 0) - post :new_batch, params, { :user_id => @user.id } - new_info_request_batch = assigns[:info_request_batch] - new_info_request_batch.should_not be_nil - response.should redirect_to(info_request_batch_path(new_info_request_batch)) - end + context "on success" do - it 'should prevent double submission of a batch request' do - params = @default_post_params.merge(:preview => 0) - post :new_batch, params, { :user_id => @user.id } - new_info_request_batch = assigns[:info_request_batch] - response.should redirect_to(info_request_batch_path(new_info_request_batch)) - post :new_batch, params, { :user_id => @user.id } - response.should render_template('new') - assigns[:existing_batch].should_not be_nil - end + def make_request + @params = @default_post_params.merge(:preview => 0) + post :new_batch, @params, { :user_id => @user.id } + end + + it 'should create an info request batch and redirect to the new batch on success' do + make_request + new_info_request_batch = assigns[:info_request_batch] + new_info_request_batch.should_not be_nil + response.should redirect_to(info_request_batch_path(new_info_request_batch)) + end + it 'should prevent double submission of a batch request' do + make_request + post :new_batch, @params, { :user_id => @user.id } + response.should render_template('new') + assigns[:existing_batch].should_not be_nil + end + + it 'should display a success notice' do + make_request + notice_text = "

Your Freedom of Information requests have been sent!

" + flash[:notice].should match notice_text + end + + it 'should display notes about any bodies that could not be included' do + @other_public_body.request_email = '' + @other_public_body.save! + make_request + error_text = "Unfortunately, we do not have a working address for #{@other_public_body.name}." + flash[:error].should match error_text + end + + end context "when the user is banned" do -- cgit v1.2.3 From b68c23074b7849b30e8f96ea024ec14ec4b8f324 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Mon, 28 Oct 2013 11:41:43 +0000 Subject: Add a rudimentary view for an info request batch. --- .../info_request_batch_controller_spec.rb | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 spec/controllers/info_request_batch_controller_spec.rb (limited to 'spec/controllers') diff --git a/spec/controllers/info_request_batch_controller_spec.rb b/spec/controllers/info_request_batch_controller_spec.rb new file mode 100644 index 000000000..b5075c4e0 --- /dev/null +++ b/spec/controllers/info_request_batch_controller_spec.rb @@ -0,0 +1,32 @@ +# coding: utf-8 +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe InfoRequestBatchController, "when showing a request" do + + before do + @info_request_batch = FactoryGirl.create(:info_request_batch, :title => 'Matched title', + :body => 'Matched body') + @first_request = FactoryGirl.create(:info_request, :info_request_batch => @info_request_batch) + @second_request = FactoryGirl.create(:info_request, :info_request_batch => @info_request_batch) + @default_params = {:id => @info_request_batch.id} + end + + def make_request(params=@default_params) + get :show, params + end + + it 'should be successful' do + make_request + response.should be_success + end + + it 'should assign info_requests to the view' do + make_request + assigns[:info_requests].should == [@first_request, @second_request] + end + + it 'should assign an info_request_batch to the view' do + make_request + assigns[:info_request_batch].should == @info_request_batch + end +end -- cgit v1.2.3 From 433b03ec0c4bbf0dd024e1c96fad62ac36e4ab4f Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Thu, 31 Oct 2013 18:05:46 +0000 Subject: Javascript enhancements. Add or remove all buttons, ajax search as you type. --- spec/controllers/request_controller_spec.rb | 86 ++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 27 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index be5a97776..8a9cd93c2 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2509,7 +2509,7 @@ describe RequestController, "when caching fragments" do end -describe RequestController, "#new_batch", :focus => true do +describe RequestController, "#new_batch" do context "when batch requests is enabled" do @@ -2675,37 +2675,69 @@ describe RequestController, "#select_authorities" do @user = FactoryGirl.create(:user, :can_make_batch_requests => true) end - it 'should be successful' do - get :select_authorities, {}, {:user_id => @user.id} - response.should be_success - end + context 'when asked for HTML' do - it 'should render the "select_authorities" template' do - get :select_authorities, {}, {:user_id => @user.id} - response.should render_template('request/select_authorities') - end + it 'should be successful' do + get :select_authorities, {}, {:user_id => @user.id} + response.should be_success + end - it 'should assign a list of search results to the view if passed a query' do - get :select_authorities, {:public_body_query => "Quango"}, {:user_id => @user.id} - assigns[:search_bodies].results.size.should == 1 - assigns[:search_bodies].results[0][:model].name.should == public_bodies(:geraldine_public_body).name - end + it 'should render the "select_authorities" template' do + get :select_authorities, {}, {:user_id => @user.id} + response.should render_template('request/select_authorities') + end + + it 'should assign a list of search results to the view if passed a query' do + get :select_authorities, {:public_body_query => "Quango"}, {:user_id => @user.id} + assigns[:search_bodies].results.size.should == 1 + assigns[:search_bodies].results[0][:model].name.should == public_bodies(:geraldine_public_body).name + end + + it 'should assign a list of public bodies to the view if passed a list of ids' do + get :select_authorities, {:public_body_ids => [public_bodies(:humpadink_public_body).id]}, + {:user_id => @user.id} + assigns[:public_bodies].size.should == 1 + assigns[:public_bodies][0].name.should == public_bodies(:humpadink_public_body).name + end + + it 'should subtract a list of public bodies to remove from the list of bodies assigned to + the view' do + get :select_authorities, {:public_body_ids => [public_bodies(:humpadink_public_body).id, + public_bodies(:geraldine_public_body).id], + :remove_public_body_ids => [public_bodies(:geraldine_public_body).id]}, + {:user_id => @user.id} + assigns[:public_bodies].size.should == 1 + assigns[:public_bodies][0].name.should == public_bodies(:humpadink_public_body).name + end - it 'should assign a list of public bodies to the view if passed a list of ids' do - get :select_authorities, {:public_body_ids => [public_bodies(:humpadink_public_body).id]}, - {:user_id => @user.id} - assigns[:public_bodies].size.should == 1 - assigns[:public_bodies][0].name.should == public_bodies(:humpadink_public_body).name end - it 'should subtract a list of public bodies to remove from the list of bodies assigned to - the view' do - get :select_authorities, {:public_body_ids => [public_bodies(:humpadink_public_body).id, - public_bodies(:geraldine_public_body).id], - :remove_public_body_ids => [public_bodies(:geraldine_public_body).id]}, - {:user_id => @user.id} - assigns[:public_bodies].size.should == 1 - assigns[:public_bodies][0].name.should == public_bodies(:humpadink_public_body).name + context 'when asked for JSON', :focus => true do + + it 'should be successful' do + get :select_authorities, {:public_body_query => "Quan", :format => 'json'}, {:user_id => @user.id} + response.should be_success + end + + it 'should return a list of public body names and ids' do + get :select_authorities, {:public_body_query => "Quan", :format => 'json'}, + {:user_id => @user.id} + + JSON(response.body).should == [{ 'id' => public_bodies(:geraldine_public_body).id, + 'name' => public_bodies(:geraldine_public_body).name }] + end + + it 'should return an empty list if no search is passed' do + get :select_authorities, {:format => 'json' },{:user_id => @user.id} + JSON(response.body).should == [] + end + + it 'should return an empty list if there are no bodies' do + get :select_authorities, {:public_body_query => 'fknkskalnr', :format => 'json' }, + {:user_id => @user.id} + JSON(response.body).should == [] + end + end end -- cgit v1.2.3 From f31ff5e5cfd6247338ad769c713a7f21af4a0623 Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Wed, 27 Nov 2013 12:52:27 +0000 Subject: Refactor specs to make adding batch changes easier. --- spec/controllers/user_controller_spec.rb | 93 +++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 30 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/user_controller_spec.rb b/spec/controllers/user_controller_spec.rb index 0033309a5..7a9981a04 100644 --- a/spec/controllers/user_controller_spec.rb +++ b/spec/controllers/user_controller_spec.rb @@ -30,55 +30,88 @@ describe UserController, "when redirecting a show request to a canonical url" do end describe UserController, "when showing a user" do - render_views + before(:each) do - load_raw_emails_data - get_fixtures_xapian_index + @user = FactoryGirl.create(:user) end it "should be successful" do - get :show, :url_name => "bob_smith" + get :show, :url_name => @user.url_name response.should be_success end it "should render with 'show' template" do - get :show, :url_name => "bob_smith" + get :show, :url_name => @user.url_name response.should render_template('show') end - it "should distinguish between 'my profile' and 'my requests' for logged in users" do - session[:user_id] = users(:bob_smith_user).id - get :show, :url_name => "bob_smith", :view => 'requests' - response.body.should_not include("Change your password") - response.body.should match(/Your [0-9]+ Freedom of Information requests/) - get :show, :url_name => "bob_smith", :view => 'profile' - response.body.should include("Change your password") - response.body.should_not match(/Your [0-9]+ Freedom of Information requests/) + it "should assign the user" do + get :show, :url_name => @user.url_name + assigns[:display_user].should == @user end - it "should assign the user" do - get :show, :url_name => "bob_smith" - assigns[:display_user].should == users(:bob_smith_user) + context "when viewing the user's own profile" do + + render_views + + def make_request + get :show, {:url_name => @user.url_name, :view => 'profile'}, {:user_id => @user.id} + end + + it 'should not show requests but should show account options' do + make_request + response.body.should_not match(/Freedom of Information requests made by you/) + response.body.should include("Change your password") + end + end - it "should search the user's contributions" do - get :show, :url_name => "bob_smith" - assigns[:xapian_requests].results.map{|x|x[:model].info_request}.should =~ InfoRequest.all( - :conditions => "user_id = #{users(:bob_smith_user).id}") + context "when viewing a user's own requests" do + + render_views + + def make_request + get :show, {:url_name => @user.url_name, :view => 'requests'}, {:user_id => @user.id} + end + + it 'should show requests but no account options' do + make_request + response.body.should match(/Freedom of Information requests made by you/) + response.body.should_not include("Change your password") + end - get :show, :url_name => "bob_smith", :user_query => "money" - assigns[:xapian_requests].results.map{|x|x[:model].info_request}.should =~ [ - info_requests(:naughty_chicken_request), - info_requests(:another_boring_request), - ] end - it "should not show unconfirmed users" do - begin - get :show, :url_name => "unconfirmed_user" - rescue => e +end + +describe UserController, "when showing a user" do + + context 'when using fixture data' do + + before do + load_raw_emails_data + get_fixtures_xapian_index end - e.should be_an_instance_of(ActiveRecord::RecordNotFound) + + it "should search the user's contributions" do + get :show, :url_name => "bob_smith" + assigns[:xapian_requests].results.map{|x|x[:model].info_request}.should =~ InfoRequest.all( + :conditions => "user_id = #{users(:bob_smith_user).id}") + + get :show, :url_name => "bob_smith", :user_query => "money" + assigns[:xapian_requests].results.map{|x|x[:model].info_request}.should =~ [ + info_requests(:naughty_chicken_request), + info_requests(:another_boring_request), + ] + end + + it "should not show unconfirmed users" do + begin + get :show, :url_name => "unconfirmed_user" + rescue => e + end + e.should be_an_instance_of(ActiveRecord::RecordNotFound) + end end end -- cgit v1.2.3 From 0f43f36254c9bbd1a66f5fd0951d5c2517581e4d Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Wed, 27 Nov 2013 12:53:13 +0000 Subject: Display batch requests for user on 'my requests' page This is the most rudimentary possible way to give them access to the batch request urls, pending #1239 --- spec/controllers/user_controller_spec.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/user_controller_spec.rb b/spec/controllers/user_controller_spec.rb index 7a9981a04..cf361d898 100644 --- a/spec/controllers/user_controller_spec.rb +++ b/spec/controllers/user_controller_spec.rb @@ -58,9 +58,10 @@ describe UserController, "when showing a user" do get :show, {:url_name => @user.url_name, :view => 'profile'}, {:user_id => @user.id} end - it 'should not show requests but should show account options' do + it 'should not show requests, or batch requests, but should show account options' do make_request response.body.should_not match(/Freedom of Information requests made by you/) + assigns[:show_batches].should be_false response.body.should include("Change your password") end @@ -74,9 +75,10 @@ describe UserController, "when showing a user" do get :show, {:url_name => @user.url_name, :view => 'requests'}, {:user_id => @user.id} end - it 'should show requests but no account options' do + it 'should show requests, batch requests, but no account options' do make_request response.body.should match(/Freedom of Information requests made by you/) + assigns[:show_batches].should be_true response.body.should_not include("Change your password") end -- cgit v1.2.3 From e95b95e78891e2c0e7e0307464637b38ed8b5a4d Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Wed, 27 Nov 2013 17:44:35 +0000 Subject: Update notices for offline sending. --- spec/controllers/request_controller_spec.rb | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 8a9cd93c2..c8d2dfb34 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2588,18 +2588,10 @@ describe RequestController, "#new_batch" do it 'should display a success notice' do make_request - notice_text = "

Your Freedom of Information requests have been sent!

" + notice_text = "

Your Freedom of Information requests will be sent shortly!" flash[:notice].should match notice_text end - it 'should display notes about any bodies that could not be included' do - @other_public_body.request_email = '' - @other_public_body.save! - make_request - error_text = "Unfortunately, we do not have a working address for #{@other_public_body.name}." - flash[:error].should match error_text - end - end context "when the user is banned" do -- cgit v1.2.3 From dd25406c2c96eb1b59a825f866b22ee34365c06c Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Wed, 27 Nov 2013 17:55:03 +0000 Subject: Show public body list when batch has not been sent. --- .../info_request_batch_controller_spec.rb | 37 +++++++++++++++++----- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'spec/controllers') diff --git a/spec/controllers/info_request_batch_controller_spec.rb b/spec/controllers/info_request_batch_controller_spec.rb index b5075c4e0..2a282e9a1 100644 --- a/spec/controllers/info_request_batch_controller_spec.rb +++ b/spec/controllers/info_request_batch_controller_spec.rb @@ -4,10 +4,16 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') describe InfoRequestBatchController, "when showing a request" do before do + @first_public_body = FactoryGirl.create(:public_body) + @second_public_body = FactoryGirl.create(:public_body) @info_request_batch = FactoryGirl.create(:info_request_batch, :title => 'Matched title', - :body => 'Matched body') - @first_request = FactoryGirl.create(:info_request, :info_request_batch => @info_request_batch) - @second_request = FactoryGirl.create(:info_request, :info_request_batch => @info_request_batch) + :body => 'Matched body', + :public_bodies => [@first_public_body, + @second_public_body]) + @first_request = FactoryGirl.create(:info_request, :info_request_batch => @info_request_batch, + :public_body => @first_public_body) + @second_request = FactoryGirl.create(:info_request, :info_request_batch => @info_request_batch, + :public_body => @second_public_body) @default_params = {:id => @info_request_batch.id} end @@ -20,13 +26,28 @@ describe InfoRequestBatchController, "when showing a request" do response.should be_success end - it 'should assign info_requests to the view' do - make_request - assigns[:info_requests].should == [@first_request, @second_request] - end - it 'should assign an info_request_batch to the view' do make_request assigns[:info_request_batch].should == @info_request_batch end + + context 'when the batch has not been sent' do + + it 'should assign public_bodies to the view' do + make_request + assigns[:public_bodies].should == [@first_public_body, @second_public_body] + end + end + + context 'when the batch has been sent' do + + it 'should assign info_requests to the view' do + @info_request_batch.sent_at = Time.now + @info_request_batch.save! + make_request + assigns[:info_requests].should == [@first_request, @second_request] + end + + end + end -- cgit v1.2.3 From c96e91cbca59b28ace56536fbc9a573f32760d5e Mon Sep 17 00:00:00 2001 From: Louise Crow Date: Tue, 28 Jan 2014 09:47:55 +0000 Subject: Specify sort on results to return in consistent order. --- spec/controllers/info_request_batch_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/controllers') diff --git a/spec/controllers/info_request_batch_controller_spec.rb b/spec/controllers/info_request_batch_controller_spec.rb index 2a282e9a1..d08f02e10 100644 --- a/spec/controllers/info_request_batch_controller_spec.rb +++ b/spec/controllers/info_request_batch_controller_spec.rb @@ -45,7 +45,7 @@ describe InfoRequestBatchController, "when showing a request" do @info_request_batch.sent_at = Time.now @info_request_batch.save! make_request - assigns[:info_requests].should == [@first_request, @second_request] + assigns[:info_requests].sort.should == [@first_request, @second_request] end end -- cgit v1.2.3