aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/api_controller.rb58
-rw-r--r--spec/controllers/api_controller_spec.rb3
-rw-r--r--spec/views/public_body/show.rhtml_spec.rb4
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')
),