Skip to content

Commit 9ff149a

Browse files
stefannibrasilcompwron
authored andcommitted
Add request spec for PlacementsController
The PlacementsController is a full CRUD for Youth placement records but only has a pending controller placeholder spec. This commit adds coverage for it.
1 parent 029cf40 commit 9ff149a

File tree

2 files changed

+121
-7
lines changed

2 files changed

+121
-7
lines changed

spec/controllers/placements_controller_spec.rb

Lines changed: 0 additions & 7 deletions
This file was deleted.

spec/requests/placements_spec.rb

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
require "rails_helper"
2+
3+
RSpec.describe "Placements", type: :request do
4+
let(:casa_org) { build(:casa_org) }
5+
let(:admin) { create(:casa_admin, casa_org:) }
6+
let(:casa_case) { create(:casa_case, casa_org:) }
7+
8+
before do
9+
sign_in admin
10+
end
11+
12+
describe "GET /index" do
13+
it "displays the placement information" do
14+
get casa_case_placements_path(casa_case)
15+
16+
expect(response).to have_http_status(:success)
17+
expect(response.body).to include("Placement History")
18+
expect(response.body).to include(casa_case.case_number)
19+
end
20+
end
21+
22+
describe "GET /show" do
23+
it "displays the placement details" do
24+
placement_type = build(:placement_type, casa_org:, name: "Reunification")
25+
placement = create(:placement, casa_case:, placement_type:)
26+
27+
get casa_case_placement_path(casa_case, placement)
28+
29+
expect(response).to have_http_status(:success)
30+
expect(response.body).to include("Placement")
31+
expect(response.body).to include("Reunification")
32+
expect(response.body).to include(casa_case.case_number)
33+
end
34+
end
35+
36+
describe "GET /new" do
37+
it "returns a successful response" do
38+
get new_casa_case_placement_path(casa_case)
39+
40+
expect(response).to have_http_status(:success)
41+
end
42+
end
43+
44+
describe "GET /edit" do
45+
it "returns a successful response" do
46+
placement = create(:placement, casa_case:)
47+
48+
get edit_casa_case_placement_path(casa_case, placement)
49+
50+
expect(response).to have_http_status(:success)
51+
end
52+
end
53+
54+
describe "POST /create" do
55+
context "when the params are valid" do
56+
it "creates the placement successfully and redirects to the placement" do
57+
placement_type = create(:placement_type, casa_org:, name: "Adoption by relative")
58+
59+
params = {
60+
placement: {
61+
placement_started_at: Date.new(2026, 2, 1),
62+
placement_type_id: placement_type.id
63+
}
64+
}
65+
66+
expect do
67+
post casa_case_placements_path(casa_case), params: params
68+
end.to change(Placement, :count).by(1)
69+
70+
expect(response).to have_http_status(:redirect)
71+
expect(flash[:notice]).to match(/placement was successfully created/i)
72+
follow_redirect!
73+
expect(response.body).to include("Placement")
74+
expect(response.body).to include("Adoption by relative")
75+
expect(response.body).to include(casa_case.case_number)
76+
end
77+
end
78+
end
79+
80+
describe "PATCH /update" do
81+
context "when the params are valid" do
82+
it "updates the placement successfully" do
83+
placement = create(:placement, casa_case:, placement_started_at: Date.new(2026, 4, 1))
84+
85+
params = {placement: {placement_started_at: Date.new(2026, 1, 1)}}
86+
patch casa_case_placement_path(casa_case, placement), params: params
87+
88+
expect(response).to redirect_to(casa_case_placements_path(casa_case))
89+
expect(placement.reload.placement_started_at).to eq(Date.new(2026, 1, 1))
90+
expect(flash[:notice]).to match(/placement was successfully updated/i)
91+
end
92+
end
93+
94+
context "when the params are invalid" do
95+
it "returns an unprocessable_content response" do
96+
placement = create(:placement, casa_case:, placement_started_at: Date.new(2026, 4, 1))
97+
98+
params = {placement: {placement_started_at: 1000.years.ago}}
99+
patch casa_case_placement_path(casa_case, placement), params: params
100+
101+
expect(response).to have_http_status(:unprocessable_content)
102+
end
103+
end
104+
end
105+
106+
describe "DELETE /destroy" do
107+
it "deletes the placement successfully" do
108+
placement = create(:placement, casa_case:)
109+
110+
expect do
111+
delete casa_case_placement_path(casa_case, placement)
112+
end.to change(Placement, :count).by(-1)
113+
114+
expect(response).to have_http_status(:redirect)
115+
expect(flash[:notice]).to match(/placement was successfully deleted/i)
116+
follow_redirect!
117+
expect(response.body).to include("Placement History")
118+
expect(response.body).to include(casa_case.case_number)
119+
end
120+
end
121+
end

0 commit comments

Comments
 (0)