From 901b3d7a4b3f709b5b6837f3059fc01179911f0a Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Tue, 12 Oct 2021 14:57:52 +0100 Subject: [PATCH] Accept a basic create request with JSON params --- app/controllers/case_logs_controller.rb | 13 +++++-- spec/requests/case_log_controller_spec.rb | 44 +++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 spec/requests/case_log_controller_spec.rb diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index f039e2d56..2cb9d1a59 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -5,8 +5,11 @@ class CaseLogsController < ApplicationController end def create - @case_log = CaseLog.create! - redirect_to @case_log + @case_log = CaseLog.create!(create_params) + respond_to do |format| + format.html { redirect_to @case_log } + format.json { render json: @case_log } + end end # We don't have a dedicated non-editable show view @@ -66,4 +69,10 @@ private result end end + + def create_params + return {} unless params.dig(:case_log) + + params.require(:case_log).permit(CaseLog.new.attributes.keys) + end end diff --git a/spec/requests/case_log_controller_spec.rb b/spec/requests/case_log_controller_spec.rb new file mode 100644 index 000000000..fe8a30636 --- /dev/null +++ b/spec/requests/case_log_controller_spec.rb @@ -0,0 +1,44 @@ +require 'rails_helper' + +RSpec.describe CaseLogsController, type: :request do + describe "POST #create" do + let(:headers) do + { + "Content-Type" => "application/json", + "ACCEPT" => "application/json" + } + end + + let(:tenant_code) { "T365" } + let(:tenant_age) { 35 } + let(:property_postcode) { "SE11 6TY" } + + let(:params) do + { + "tenant_code": tenant_code, + "tenant_age": 35, + "property_postcode": property_postcode + } + end + + before do + post "/case_logs", headers: headers, params: params.to_json + end + + it "returns http success" do + expect(response).to have_http_status(:success) + end + + it "returns a serialized Case Log" do + json_response = JSON.parse(response.body) + expect(json_response.keys).to match_array(CaseLog.new.attributes.keys) + end + + it "creates a case log with the values passed" do + json_response = JSON.parse(response.body) + expect(json_response["tenant_code"]).to eq(tenant_code) + expect(json_response["tenant_age"]).to eq(tenant_age) + expect(json_response["property_postcode"]).to eq(property_postcode) + end + end +end