diff options
-rw-r--r-- | app/controllers/api_controller.rb | 58 | ||||
-rw-r--r-- | spec/controllers/api_controller_spec.rb | 3 | ||||
-rw-r--r-- | spec/views/public_body/show.rhtml_spec.rb | 4 |
3 files changed, 44 insertions, 21 deletions
diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index ed567640e..a5b70b8d2 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -27,26 +27,48 @@ class ApiController < ApplicationController def create_request json = ActiveSupport::JSON.decode(params[:request_json]) - existing_request = InfoRequest.find_by_existing_request(json["title"], - @public_body.id, - json["body"]) - info_request = InfoRequest.new(:title => json["title"], - :public_body_id => @public_body.id, - :described_state => "awaiting_response", - :external_user_name => json["external_user_name"], - :external_url => json["external_url"]) - outgoing_message = OutgoingMessage.new(json["body"]) - info_request.outgoing_messages << outgoing_messages - outgoing_message.info_request = info_request - # See if values were valid or not - if !existing_request.nil? || !info_request.valid? - # We don't want the error "Outgoing messages is invalid", as the outgoing message - # will be valid for a specific reason which we are displaying anyway. + request = InfoRequest.new( + :title => json["title"], + :public_body_id => @public_body.id, + :described_state => "waiting_response", + :external_user_name => json["external_user_name"], + :external_url => json["external_url"] + ) + + outgoing_message = OutgoingMessage.new( + :status => 'ready', + :message_type => 'initial_request', + :body => json["body"], + :last_sent_at => Time.now(), + :what_doing => 'normal_sort', + :info_request => request + ) + request.outgoing_messages << outgoing_message + + # Return an error if the request is invalid + if !request.valid? + # We don't want the error "Outgoing messages is invalid", as in this + # case the list of errors will also contain a more specific error + # describing the reason it is invalid. info_request.errors.delete("outgoing_messages") - render :json => {'errors' => :info_request.errors.to_s} - else - render :json => {'url' => 'http://goo.com'} + + render :json => { + 'errors' => request.errors.full_messages + } + return end + + request.save! + request.log_event("sent", + :email => nil, + :outgoing_message_id => outgoing_message.id, + :smtp_message_id => nil + ) + render :json => { + 'url' => make_url("request", request.url_title), + 'id' => request.id + } + end def add_correspondence diff --git a/spec/controllers/api_controller_spec.rb b/spec/controllers/api_controller_spec.rb index dec652361..9d072e359 100644 --- a/spec/controllers/api_controller_spec.rb +++ b/spec/controllers/api_controller_spec.rb @@ -19,6 +19,7 @@ describe ApiController, "when using the API" do response.content_type.should == "application/json" response_body = ActiveSupport::JSON.decode(response.body) + response_body["errors"].should be_nil response_body["url"].should =~ /^http/ InfoRequest.count(:conditions => ["public_body_id = ?", geraldine.id]).should == number_of_requests + 1 @@ -29,6 +30,6 @@ describe ApiController, "when using the API" do new_request.external_url.should == request_data["external_url"] new_request.title.should == request_data["title"] - new_request.last_event_forming_initial_request.outgoing_message.body.should == request_data["body"] + new_request.last_event_forming_initial_request.outgoing_message.body.should == request_data["body"].strip end end diff --git a/spec/views/public_body/show.rhtml_spec.rb b/spec/views/public_body/show.rhtml_spec.rb index a37d8be0d..8b7385954 100644 --- a/spec/views/public_body/show.rhtml_spec.rb +++ b/spec/views/public_body/show.rhtml_spec.rb @@ -102,8 +102,8 @@ def mock_event :info_request => mock_model(InfoRequest, :title => 'Title', :url_title => 'title', - :display_status => 'awaiting_response', - :calculate_status => 'awaiting_response', + :display_status => 'waiting_response', + :calculate_status => 'waiting_response', :public_body => @pb, :user => mock_model(User, :name => 'Test User', :url_name => 'testuser') ), |