aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/admin_raw_email_controller.rb37
-rw-r--r--app/controllers/admin_request_controller.rb28
-rw-r--r--app/views/admin_general/index.html.erb4
-rw-r--r--app/views/admin_incoming_message/_actions.html.erb (renamed from app/views/admin_request/_incoming_message_actions.html.erb)2
-rw-r--r--app/views/admin_incoming_message/edit.html.erb2
-rw-r--r--app/views/admin_raw_email/show.html.erb (renamed from app/views/admin_request/show_raw_email.html.erb)2
-rw-r--r--app/views/admin_request/show.html.erb2
-rw-r--r--config/routes.rb9
-rw-r--r--spec/controllers/admin_raw_email_controller_spec.rb14
-rw-r--r--spec/controllers/admin_request_controller_spec.rb28
-rw-r--r--spec/integration/admin_spec.rb59
11 files changed, 104 insertions, 83 deletions
diff --git a/app/controllers/admin_raw_email_controller.rb b/app/controllers/admin_raw_email_controller.rb
new file mode 100644
index 000000000..cfff2d0b6
--- /dev/null
+++ b/app/controllers/admin_raw_email_controller.rb
@@ -0,0 +1,37 @@
+# app/controllers/admin_raw_email_controller.rb:
+# Controller for managing raw emails from the admin interface.
+#
+# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
+# Email: hello@mysociety.org; WWW: http://www.mysociety.org/
+
+class AdminRawEmailController < AdminController
+
+ def show
+ @raw_email = RawEmail.find(params[:id])
+ # For the holding pen, try to guess where it should be ...
+ @holding_pen = false
+ if (@raw_email.incoming_message.info_request == InfoRequest.holding_pen_request && !@raw_email.incoming_message.empty_from_field?)
+ @holding_pen = true
+
+ # 1. Use domain of email to try and guess which public body it
+ # is associated with, so we can display that.
+ email = @raw_email.incoming_message.from_email
+ domain = PublicBody.extract_domain_from_email(email)
+
+ if domain.nil?
+ @public_bodies = []
+ else
+ @public_bodies = PublicBody.find(:all, :order => "name",
+ :conditions => [ "lower(request_email) like lower('%'||?||'%')", domain ])
+ end
+
+ # 2. Match the email address in the message without matching the hash
+ @info_requests = InfoRequest.guess_by_incoming_email(@raw_email.incoming_message)
+
+ # 3. Give a reason why it's in the holding pen
+ last_event = InfoRequestEvent.find_by_incoming_message_id(@raw_email.incoming_message.id)
+ @rejected_reason = last_event.params[:rejected_reason] || "unknown reason"
+ end
+ end
+
+end
diff --git a/app/controllers/admin_request_controller.rb b/app/controllers/admin_request_controller.rb
index 6d6bf56e5..4869ea778 100644
--- a/app/controllers/admin_request_controller.rb
+++ b/app/controllers/admin_request_controller.rb
@@ -175,34 +175,6 @@ class AdminRequestController < AdminController
redirect_to admin_request_url(info_request)
end
- def show_raw_email
- @raw_email = RawEmail.find(params[:id])
- # For the holding pen, try to guess where it should be ...
- @holding_pen = false
- if (@raw_email.incoming_message.info_request == InfoRequest.holding_pen_request && !@raw_email.incoming_message.empty_from_field?)
- @holding_pen = true
-
- # 1. Use domain of email to try and guess which public body it
- # is associated with, so we can display that.
- email = @raw_email.incoming_message.from_email
- domain = PublicBody.extract_domain_from_email(email)
-
- if domain.nil?
- @public_bodies = []
- else
- @public_bodies = PublicBody.find(:all, :order => "name",
- :conditions => [ "lower(request_email) like lower('%'||?||'%')", domain ])
- end
-
- # 2. Match the email address in the message without matching the hash
- @info_requests = InfoRequest.guess_by_incoming_email(@raw_email.incoming_message)
-
- # 3. Give a reason why it's in the holding pen
- last_event = InfoRequestEvent.find_by_incoming_message_id(@raw_email.incoming_message.id)
- @rejected_reason = last_event.params[:rejected_reason] || "unknown reason"
- end
- end
-
def download_raw_email
@raw_email = RawEmail.find(params[:id])
diff --git a/app/views/admin_general/index.html.erb b/app/views/admin_general/index.html.erb
index ba9396ceb..0991ea2f5 100644
--- a/app/views/admin_general/index.html.erb
+++ b/app/views/admin_general/index.html.erb
@@ -37,9 +37,9 @@
<tr>
<td>
<% if message.get_body_for_quoting.strip.size == 0 %>
- <%= link_to "(no body)", admin_request_show_raw_email_path(message.raw_email_id) %>
+ <%= link_to "(no body)", admin_raw_email_path(message.raw_email_id) %>
<% else %>
- <%= link_to excerpt(message.get_body_for_quoting, "", :radius => 60), admin_request_show_raw_email_path(message.raw_email_id) %>
+ <%= link_to excerpt(message.get_body_for_quoting, "", :radius => 60), admin_raw_email_path(message.raw_email_id) %>
<% end %>
</td>
<td class="span2">
diff --git a/app/views/admin_request/_incoming_message_actions.html.erb b/app/views/admin_incoming_message/_actions.html.erb
index 672ce3ae2..5541f2819 100644
--- a/app/views/admin_request/_incoming_message_actions.html.erb
+++ b/app/views/admin_incoming_message/_actions.html.erb
@@ -47,7 +47,7 @@
<div class="control-group">
<label class="control-label">Inspect email</label>
<div class="controls">
- <%= link_to "View raw email", admin_request_show_raw_email_path(incoming_message.raw_email_id), :class => "btn" %>
+ <%= link_to "View raw email", admin_raw_email_path(incoming_message.raw_email_id), :class => "btn" %>
</div>
</div>
<% end %>
diff --git a/app/views/admin_incoming_message/edit.html.erb b/app/views/admin_incoming_message/edit.html.erb
index 1088edcab..210d3bbd6 100644
--- a/app/views/admin_incoming_message/edit.html.erb
+++ b/app/views/admin_incoming_message/edit.html.erb
@@ -1,5 +1,5 @@
<%= render :partial => 'intro', :locals => {:incoming_message => @incoming_message } %>
-<%= render :partial => 'admin_request/incoming_message_actions', :locals => { :incoming_message => @incoming_message } %>
+<%= render :partial => 'actions', :locals => { :incoming_message => @incoming_message } %>
<fieldset class="form-horizontal">
<legend>Prominence</legend>
<%= form_tag admin_incoming_update_path(@incoming_message), :class => "form form-inline" do %>
diff --git a/app/views/admin_request/show_raw_email.html.erb b/app/views/admin_raw_email/show.html.erb
index da22b6069..83c81b8fb 100644
--- a/app/views/admin_request/show_raw_email.html.erb
+++ b/app/views/admin_raw_email/show.html.erb
@@ -52,7 +52,7 @@
</p>
<div>
- <%= render :partial => 'incoming_message_actions', :locals => { :incoming_message => @raw_email.incoming_message } %>
+ <%= render :partial => 'admin_incoming_message/actions', :locals => { :incoming_message => @raw_email.incoming_message } %>
</div>
<h2>Raw email</h2>
diff --git a/app/views/admin_request/show.html.erb b/app/views/admin_request/show.html.erb
index 2ca4f5733..b21dcc05e 100644
--- a/app/views/admin_request/show.html.erb
+++ b/app/views/admin_request/show.html.erb
@@ -297,7 +297,7 @@
<thead>
<tr>
<td colspan="2" class="well">
- <%= render :partial => 'incoming_message_actions', :locals => { :incoming_message => incoming_message } %>
+ <%= render :partial => 'admin_incoming_message/actions', :locals => { :incoming_message => incoming_message } %>
</td>
</tr>
</thead>
diff --git a/config/routes.rb b/config/routes.rb
index 61b4e83db..11c23be44 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -221,7 +221,6 @@ Alaveteli::Application.routes.draw do
post 'generate_upload_url', :on => :member
end
end
- match '/admin/request/show_raw_email/:id' => 'admin_request#show_raw_email', :as => :admin_request_show_raw_email
match '/admin/request/download_raw_email/:id' => 'admin_request#download_raw_email', :as => :admin_request_download_raw_email
match '/admin/request/mark_event_as_clarification' => 'admin_request#mark_event_as_clarification', :as => :admin_request_clarification
match '/admin/request/hide/:id' => 'admin_request#hide_request', :as => :admin_request_hide
@@ -235,6 +234,14 @@ Alaveteli::Application.routes.draw do
end
####
+ #### AdminRawEmail controller
+ scope '/admin', :as => 'admin' do
+ resources :raw_emails,
+ :controller => 'admin_raw_email',
+ :only => [:show]
+ end
+ ####
+
#### AdminIncomingMessage controller
match '/admin/incoming/destroy' => 'admin_incoming_message#destroy', :as => :admin_incoming_destroy
match '/admin/incoming/redeliver' => 'admin_incoming_message#redeliver', :as => :admin_incoming_redeliver
diff --git a/spec/controllers/admin_raw_email_controller_spec.rb b/spec/controllers/admin_raw_email_controller_spec.rb
new file mode 100644
index 000000000..c1e939ee1
--- /dev/null
+++ b/spec/controllers/admin_raw_email_controller_spec.rb
@@ -0,0 +1,14 @@
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+describe AdminRawEmailController do
+
+ describe :show do
+
+ it 'renders the show template' do
+ raw_email = FactoryGirl.create(:incoming_message).raw_email
+ get :show, :id => raw_email.id
+ end
+
+ end
+
+end
diff --git a/spec/controllers/admin_request_controller_spec.rb b/spec/controllers/admin_request_controller_spec.rb
index 0d84c6146..51e4a6dbe 100644
--- a/spec/controllers/admin_request_controller_spec.rb
+++ b/spec/controllers/admin_request_controller_spec.rb
@@ -77,34 +77,6 @@ describe AdminRequestController, "when administering the holding pen" do
load_raw_emails_data
end
- it "shows a rejection reason for an incoming message from an invalid address" do
- ir = info_requests(:fancy_dog_request)
- ir.allow_new_responses_from = 'authority_only'
- ir.handle_rejected_responses = 'holding_pen'
- ir.save!
- receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "frob@nowhere.com")
- get :show_raw_email, :id => InfoRequest.holding_pen_request.get_last_public_response.raw_email.id
- response.should contain "Only the authority can reply to this request"
- end
-
- it "guesses a misdirected request" do
- ir = info_requests(:fancy_dog_request)
- ir.handle_rejected_responses = 'holding_pen'
- ir.allow_new_responses_from = 'authority_only'
- ir.save!
- mail_to = "request-#{ir.id}-asdfg@example.com"
- receive_incoming_mail('incoming-request-plain.email', mail_to)
- interesting_email = InfoRequest.holding_pen_request.get_last_public_response.raw_email.id
- # now we add another message to the queue, which we're not interested in
- receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "")
- InfoRequest.holding_pen_request.incoming_messages.length.should == 2
- get :show_raw_email, :id => interesting_email
- response.should contain "Could not identify the request"
- assigns[:info_requests][0].should == ir
- end
-
-
-
it "shows a suitable default 'your email has been hidden' message" do
ir = info_requests(:fancy_dog_request)
get :show, :id => ir.id
diff --git a/spec/integration/admin_spec.rb b/spec/integration/admin_spec.rb
index ceb010143..c9135336d 100644
--- a/spec/integration/admin_spec.rb
+++ b/spec/integration/admin_spec.rb
@@ -5,17 +5,15 @@ describe "When administering the site" do
before do
AlaveteliConfiguration.stub!(:skip_admin_auth).and_return(false)
+ confirm(:admin_user)
+ @admin = login(:admin_user)
end
it "allows an admin to log in as another user" do
- # First log in as Joe Admin
- confirm(:admin_user)
- admin = login(:admin_user)
-
- # Now fetch the "log in as" link to log in as Bob
- admin.get_via_redirect "/en/admin/user/login_as/#{users(:bob_smith_user).id}"
- admin.response.should be_success
- admin.session[:user_id].should == users(:bob_smith_user).id
+ # post to the "log in as" url to log in as Bob
+ @admin.post_via_redirect "/en/admin/users/#{users(:bob_smith_user).id}/login_as"
+ @admin.response.should be_success
+ @admin.session[:user_id].should == users(:bob_smith_user).id
end
it 'does not allow a non-admin user to login as another user' do
@@ -26,8 +24,6 @@ describe "When administering the site" do
end
it "allows redelivery of an incoming message to a closed request" do
- confirm(:admin_user)
- admin = login(:admin_user)
ir = info_requests(:fancy_dog_request)
close_request(ir)
InfoRequest.holding_pen_request.incoming_messages.length.should == 0
@@ -36,10 +32,9 @@ describe "When administering the site" do
InfoRequest.holding_pen_request.incoming_messages.length.should == 1
new_im = InfoRequest.holding_pen_request.incoming_messages[0]
ir.incoming_messages.length.should == 1
- post_params = {'redeliver_incoming_message_id' => new_im.id,
- 'url_title' => ir.url_title}
- admin.post '/en/admin/incoming/redeliver', post_params
- admin.response.location.should == 'http://www.example.com/en/admin/requests/101'
+ post_params = { 'url_title' => ir.url_title }
+ @admin.post "/en/admin/incoming_messages/#{new_im.id}/redeliver", post_params
+ @admin.response.location.should == 'http://www.example.com/en/admin/requests/101'
ir = InfoRequest.find_by_url_title(ir.url_title)
ir.incoming_messages.length.should == 2
@@ -47,8 +42,6 @@ describe "When administering the site" do
end
it "allows redelivery of an incoming message to more than one request" do
- confirm(:admin_user)
- admin = login(:admin_user)
ir1 = info_requests(:fancy_dog_request)
close_request(ir1)
@@ -60,15 +53,41 @@ describe "When administering the site" do
InfoRequest.holding_pen_request.incoming_messages.length.should == 1
new_im = InfoRequest.holding_pen_request.incoming_messages[0]
- post_params = {'redeliver_incoming_message_id' => new_im.id,
- 'url_title' => "#{ir1.url_title},#{ir2.url_title}"}
- admin.post '/en/admin/incoming/redeliver', post_params
+ post_params = { 'url_title' => "#{ir1.url_title},#{ir2.url_title}" }
+ @admin.post "/en/admin/incoming_messages/#{new_im.id}/redeliver", post_params
ir1.reload
ir1.incoming_messages.length.should == 2
ir2.reload
ir2.incoming_messages.length.should == 2
- admin.response.location.should == 'http://www.example.com/en/admin/requests/106'
+ @admin.response.location.should == 'http://www.example.com/en/admin/requests/106'
InfoRequest.holding_pen_request.incoming_messages.length.should == 0
end
+ describe 'when administering the holding pen' do
+
+ it "shows a rejection reason for an incoming message from an invalid address" do
+ ir = FactoryGirl.create(:info_request, :allow_new_responses_from => 'authority_only',
+ :handle_rejected_responses => 'holding_pen')
+ receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "frob@nowhere.com")
+ raw_email = InfoRequest.holding_pen_request.get_last_public_response.raw_email
+ @admin.get "/en/admin/raw_emails/#{raw_email.id}"
+ @admin.response.should contain "Only the authority can reply to this request"
+ end
+
+ it "guesses a misdirected request" do
+ ir = FactoryGirl.create(:info_request, :allow_new_responses_from => 'authority_only',
+ :handle_rejected_responses => 'holding_pen')
+ mail_to = "request-#{ir.id}-asdfg@example.com"
+ receive_incoming_mail('incoming-request-plain.email', mail_to)
+ interesting_email = InfoRequest.holding_pen_request.get_last_public_response.raw_email
+ # now we add another message to the queue, which we're not interested in
+ receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "")
+ InfoRequest.holding_pen_request.incoming_messages.length.should == 2
+ @admin.get "/en/admin/raw_emails/#{interesting_email.id}"
+ @admin.response.should contain "Could not identify the request"
+ @admin.response.should contain ir.title
+ end
+
+
+ end
end