diff options
Diffstat (limited to 'spec/integration')
-rw-r--r-- | spec/integration/admin_spec.rb | 23 | ||||
-rw-r--r-- | spec/integration/create_request_spec.rb | 44 | ||||
-rw-r--r-- | spec/integration/search_request_spec.rb | 7 |
3 files changed, 74 insertions, 0 deletions
diff --git a/spec/integration/admin_spec.rb b/spec/integration/admin_spec.rb new file mode 100644 index 000000000..caf741749 --- /dev/null +++ b/spec/integration/admin_spec.rb @@ -0,0 +1,23 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +require "base64" + +describe "When administering the site" do + it "allows an admin to log in as another user" do + # First log in as Joe Admin + admin_user = users(:admin_user) + admin_user.email_confirmed = true + admin_user.save! + post_via_redirect "/profile/sign_in", :user_signin => {:email => admin_user.email, :password => "jonespassword"} + response.should be_success + + # Now fetch the "log in as" link to log in as Bob + admin_username = MySociety::Config.get('ADMIN_USERNAME') + admin_password = MySociety::Config.get('ADMIN_PASSWORD') + get_via_redirect "/admin/user/login_as/#{users(:bob_smith_user).id}", nil, { + "Authorization" => "Basic " + Base64.encode64("#{admin_username}:#{admin_password}").strip + } + response.should be_success + session[:user_id].should == users(:bob_smith_user).id + end +end diff --git a/spec/integration/create_request_spec.rb b/spec/integration/create_request_spec.rb new file mode 100644 index 000000000..6f336d406 --- /dev/null +++ b/spec/integration/create_request_spec.rb @@ -0,0 +1,44 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe "When creating requests" do + it "should associate the request with the requestor, even if it is approved by an admin" do + # This is a test for https://github.com/sebbacon/alaveteli/issues/446 + + params = { :info_request => { :public_body_id => public_bodies(:geraldine_public_body).id, + :title => "Why is your quango called Geraldine?", :tag_string => "" }, + :outgoing_message => { :body => "This is a silly letter. It is too short to be interesting." }, + :submitted_new_request => 1, :preview => 0 + } + + # Initially we are not logged in. Try to create a new request. + post "/new", params + # We expect to be redirected to the login page + post_redirect = PostRedirect.get_last_post_redirect + response.should redirect_to(:controller => 'user', :action => 'signin', :token => post_redirect.token) + follow_redirect! + response.should render_template("user/sign") + + # Now log in as an unconfirmed user. + post "/profile/sign_in", :user_signin => {:email => users(:unconfirmed_user).email, :password => "jonespassword"}, :token => post_redirect.token + # This will trigger a confirmation mail. Get the PostRedirect for later. + response.should render_template("user/confirm") + post_redirect = PostRedirect.get_last_post_redirect + + # Now log in as an admin user, then follow the confirmation link in the email that was sent to the unconfirmed user + admin_user = users(:admin_user) + admin_user.email_confirmed = true + admin_user.save! + post_via_redirect "/profile/sign_in", :user_signin => {:email => admin_user.email, :password => "jonespassword"} + response.should be_success + get "/c/" + post_redirect.email_token + follow_redirect! + response.location.should =~ %r(/request/(.+)/new) + response.location =~ %r(/request/(.+)/new) + url_title = $1 + info_request = InfoRequest.find_by_url_title(url_title) + info_request.should_not be_nil + + # Make sure the request is still owned by the user who made it, not the admin who confirmed it + info_request.user_id.should == users(:unconfirmed_user).id + end +end diff --git a/spec/integration/search_request_spec.rb b/spec/integration/search_request_spec.rb index b62f0a4c4..17a7b4aaa 100644 --- a/spec/integration/search_request_spec.rb +++ b/spec/integration/search_request_spec.rb @@ -12,6 +12,13 @@ describe "When searching" do response.body.should include(""mouse stilton"") end + it "should redirect requests with search in query string to URL-based page" do + url = '/search/all?query=bob' + request_via_redirect("post", url) + response.request.url.should_not include(url) + response.request.url.should include("/search/bob/all") + end + it "should correctly execute simple search" do request_via_redirect("post", "/search", :query => 'bob' |