Skip to content

Commit

Permalink
Add Submission#queue action
Browse files Browse the repository at this point in the history
This saves a submission record with state `queued` for the current
request. This is where we'll create the background job.

As a result of the previous commit, this means the request in the
session isn't editable due to it not being returned by
`FoiRequest.unqueued` anymore.
  • Loading branch information
gbp committed May 1, 2018
1 parent b7b2e35 commit b144a2b
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 4 deletions.
23 changes: 21 additions & 2 deletions app/controllers/foi/submissions_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,41 @@ module Foi
class SubmissionsController < ApplicationController
include FindableFoiRequest

before_action :find_foi_request
before_action :find_foi_request, only: %i[new create]
before_action :find_foi_request_from_session, only: %i[show]
before_action :redirect_if_missing_contact
before_action :new_submission, only: %i[new create]
before_action :find_submission, only: %i[show]

def new; end

def create
redirect_to sent_foi_request_path
if @submission.queue
redirect_to sent_foi_request_path
else
render :new
end
end

def show; end

private

def find_foi_request_from_session
@foi_request = foi_request_from_session
end

def redirect_if_missing_contact
return if @foi_request.contact
redirect_to new_foi_request_contact_path
end

def new_submission
@submission = @foi_request.build_submission
end

def find_submission
@submission = @foi_request.submission
end
end
end
5 changes: 5 additions & 0 deletions app/models/submission.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,13 @@
#
class Submission < ApplicationRecord
UNQUEUED = 'unqueued'
QUEUED = 'queued'

has_one :foi_request, dependent: :destroy

validates :state, presence: true

def queue
update(state: QUEUED)
end
end
31 changes: 29 additions & 2 deletions spec/controllers/foi/submissions_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
include_context 'FOI Request Scope'

let(:foi_request) { build_stubbed(:foi_request) }
let(:submission) { build_stubbed(:submission) }

before do
allow(foi_request_scope).to receive(:find_by).
Expand Down Expand Up @@ -34,17 +35,43 @@

describe 'POST #create' do
subject { post :create, session: { request_id: '1' } }
before do
allow(foi_request).to receive(:build_submission).and_return(submission)
end

include_examples 'redirect if missing contact'

it 'redirects to foi_request sent' do
is_expected.to redirect_to(sent_foi_request_path)
context 'queueable' do
before { allow(submission).to receive(:queue).and_return(true) }

it 'must queue submission' do
expect(submission).to receive(:queue)
subject
end

it 'redirects to foi_request sent' do
is_expected.to redirect_to(sent_foi_request_path)
end
end

context 'unqueueable' do
before { allow(submission).to receive(:queue).and_return(false) }

it 'returns http success' do
is_expected.to have_http_status(200)
end
end
end

describe 'GET #show' do
subject { get :show, session: { request_id: '1' } }

before do
# temporary
allow(FoiRequest).to receive(:includes).
with(:contact).and_return(foi_request_scope)
end

include_examples 'redirect if missing contact'

it 'returns http success' do
Expand Down
14 changes: 14 additions & 0 deletions spec/models/submission_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,18 @@
expect(submission.errors[:state]).to_not be_empty
end
end

describe '#queue' do
let(:submission) { build(:submission) }

it 'changes the state' do
expect { submission.queue }.to change(submission, :state).
to(Submission::QUEUED)
end

it 'persists the change' do
expect { submission.queue }.to change(submission, :persisted?).
to(true)
end
end
end

0 comments on commit b144a2b

Please sign in to comment.