Skip to content

Commit de5c1c4

Browse files
committed
spec spec/controllers/concerns/court_date_params_spec.rb
1 parent a0a25af commit de5c1c4

File tree

1 file changed

+211
-2
lines changed

1 file changed

+211
-2
lines changed
Lines changed: 211 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,216 @@
11
require "rails_helper"
22

33
RSpec.describe CourtDateParams, type: :controller do
4-
# TODO: Add tests for CourtDateParams
4+
let(:host) do
5+
Class.new do
6+
include CourtDateParams
57

6-
pending "add some tests for CourtDateParams"
8+
attr_accessor :params
9+
10+
def initialize(params)
11+
@params = params
12+
end
13+
end
14+
end
15+
16+
it "exists and defines private API" do
17+
expect(described_class).to be_a(Module)
18+
expect(host.private_instance_methods)
19+
.to include(:sanitized_court_date_params, :court_date_params)
20+
end
21+
22+
describe "#sanitized_court_date_params" do
23+
let(:casa_case) { create(:casa_case) }
24+
let(:controller) { host.new(params) }
25+
26+
context "when case_court_orders_attributes contains blank entries" do
27+
let(:params) do
28+
ActionController::Parameters.new(
29+
court_date: {
30+
date: "2025-10-15",
31+
case_court_orders_attributes: {
32+
"0" => {text: "Valid order", implementation_status: "not_implemented"},
33+
"1" => {text: "", implementation_status: ""},
34+
"2" => {text: "Another valid order", implementation_status: "partially_implemented"}
35+
}
36+
}
37+
)
38+
end
39+
40+
it "removes entries where both text and implementation_status are blank" do
41+
result = controller.send(:sanitized_court_date_params, casa_case)
42+
expect(result[:case_court_orders_attributes].keys).to contain_exactly("0", "2")
43+
end
44+
45+
it "sets casa_case_id for remaining entries" do
46+
result = controller.send(:sanitized_court_date_params, casa_case)
47+
expect(result[:case_court_orders_attributes]["0"][:casa_case_id]).to eq(casa_case.id)
48+
expect(result[:case_court_orders_attributes]["2"][:casa_case_id]).to eq(casa_case.id)
49+
end
50+
end
51+
52+
context "when case_court_orders_attributes has text but blank implementation_status" do
53+
let(:params) do
54+
ActionController::Parameters.new(
55+
court_date: {
56+
date: "2025-10-15",
57+
case_court_orders_attributes: {
58+
"0" => {text: "Order with text only", implementation_status: ""}
59+
}
60+
}
61+
)
62+
end
63+
64+
it "keeps the entry" do
65+
result = controller.send(:sanitized_court_date_params, casa_case)
66+
expect(result[:case_court_orders_attributes].keys).to include("0")
67+
end
68+
end
69+
70+
context "when case_court_orders_attributes has implementation_status but blank text" do
71+
let(:params) do
72+
ActionController::Parameters.new(
73+
court_date: {
74+
date: "2025-10-15",
75+
case_court_orders_attributes: {
76+
"0" => {text: "", implementation_status: "implemented"}
77+
}
78+
}
79+
)
80+
end
81+
82+
it "keeps the entry" do
83+
result = controller.send(:sanitized_court_date_params, casa_case)
84+
expect(result[:case_court_orders_attributes].keys).to include("0")
85+
end
86+
end
87+
88+
context "when case_court_orders_attributes is nil" do
89+
let(:params) do
90+
ActionController::Parameters.new(
91+
court_date: {
92+
date: "2025-10-15"
93+
}
94+
)
95+
end
96+
97+
it "does not raise an error" do
98+
expect { controller.send(:sanitized_court_date_params, casa_case) }.not_to raise_error
99+
end
100+
end
101+
102+
context "when case_court_orders_attributes is present" do
103+
let(:params) do
104+
ActionController::Parameters.new(
105+
court_date: {
106+
date: "2025-10-15",
107+
case_court_orders_attributes: {
108+
"0" => {text: "Test order", implementation_status: "not_implemented"}
109+
}
110+
}
111+
)
112+
end
113+
114+
it "returns the court_date parameter" do
115+
result = controller.send(:sanitized_court_date_params, casa_case)
116+
expect(result[:date]).to eq("2025-10-15")
117+
end
118+
end
119+
end
120+
121+
describe "#court_date_params" do
122+
let(:casa_case) { create(:casa_case) }
123+
let(:controller) { host.new(params) }
124+
125+
context "with all permitted attributes" do
126+
let(:hearing_type) { create(:hearing_type, casa_org: casa_case.casa_org) }
127+
let(:judge) { create(:judge, casa_org: casa_case.casa_org) }
128+
let(:params) do
129+
ActionController::Parameters.new(
130+
court_date: {
131+
date: "2025-10-15",
132+
hearing_type_id: hearing_type.id,
133+
judge_id: judge.id,
134+
court_report_due_date: "2025-10-10",
135+
case_court_orders_attributes: {
136+
"0" => {
137+
text: "Test order",
138+
implementation_status: "not_implemented",
139+
id: "123",
140+
casa_case_id: casa_case.id,
141+
_destroy: "false"
142+
}
143+
}
144+
}
145+
)
146+
end
147+
148+
it "permits all allowed attributes" do
149+
result = controller.send(:court_date_params, casa_case)
150+
expect(result.permitted?).to be true
151+
expect(result[:date]).to eq("2025-10-15")
152+
expect(result[:hearing_type_id]).to eq(hearing_type.id)
153+
expect(result[:judge_id]).to eq(judge.id)
154+
expect(result[:court_report_due_date]).to eq("2025-10-10")
155+
end
156+
157+
it "permits nested case_court_orders_attributes" do
158+
result = controller.send(:court_date_params, casa_case)
159+
order_attrs = result[:case_court_orders_attributes]["0"]
160+
expect(order_attrs[:text]).to eq("Test order")
161+
expect(order_attrs[:implementation_status]).to eq("not_implemented")
162+
expect(order_attrs[:id]).to eq("123")
163+
expect(order_attrs[:casa_case_id]).to eq(casa_case.id)
164+
expect(order_attrs[:_destroy]).to eq("false")
165+
end
166+
end
167+
168+
context "with unpermitted attributes" do
169+
let(:params) do
170+
ActionController::Parameters.new(
171+
court_date: {
172+
date: "2025-10-15",
173+
unauthorized_field: "should not be permitted",
174+
case_court_orders_attributes: {
175+
"0" => {
176+
text: "Test order",
177+
implementation_status: "not_implemented",
178+
unauthorized_nested_field: "should not be permitted"
179+
}
180+
}
181+
}
182+
)
183+
end
184+
185+
it "filters out unpermitted attributes" do
186+
result = controller.send(:court_date_params, casa_case)
187+
expect(result.to_h.keys).not_to include("unauthorized_field")
188+
end
189+
190+
it "filters out unpermitted nested attributes" do
191+
result = controller.send(:court_date_params, casa_case)
192+
order_attrs = result[:case_court_orders_attributes]["0"]
193+
expect(order_attrs.to_h.keys).not_to include("unauthorized_nested_field")
194+
end
195+
end
196+
197+
context "when sanitized_court_date_params removes blank orders" do
198+
let(:params) do
199+
ActionController::Parameters.new(
200+
court_date: {
201+
date: "2025-10-15",
202+
case_court_orders_attributes: {
203+
"0" => {text: "Valid order", implementation_status: "not_implemented"},
204+
"1" => {text: "", implementation_status: ""}
205+
}
206+
}
207+
)
208+
end
209+
210+
it "only includes non-blank orders in the result" do
211+
result = controller.send(:court_date_params, casa_case)
212+
expect(result[:case_court_orders_attributes].keys).to eq(["0"])
213+
end
214+
end
215+
end
7216
end

0 commit comments

Comments
 (0)