Skip to content

Commit c138545

Browse files
stefannibrasilcompwron
authored andcommitted
Add coverage for CreateCasaAdminService
CreateCasaAdminService creates admin users with org setup but has a placeholder spec only. This commit adds coverage for it since creating users is a critical functionality of the app.
1 parent e4f8113 commit c138545

File tree

1 file changed

+103
-2
lines changed

1 file changed

+103
-2
lines changed
Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,108 @@
1+
# frozen_string_literal: true
2+
13
require "rails_helper"
24

35
RSpec.describe CreateCasaAdminService, type: :service do
4-
# TODO: Add tests for CreateCasaAdminService
6+
let(:organization) { create(:casa_org) }
7+
let(:user) { build(:user) }
8+
let(:params) do
9+
ActionController::Parameters.new(
10+
{
11+
casa_admin: {
12+
email: "casa_admin23@example.com",
13+
display_name: "Bob Cat",
14+
phone_number: "+16306149615",
15+
date_of_birth: Date.new(1990, 1, 1),
16+
receive_reimbursement_email: "1",
17+
monthly_learning_hours_report: "1"
18+
}
19+
}
20+
).permit!
21+
end
22+
23+
describe "#build" do
24+
it "initializes a CasaAdmin with the given params" do
25+
admin = CreateCasaAdminService.new(organization, params, user)
26+
27+
casa_admin = admin.build
28+
29+
expect(casa_admin).to be_instance_of(CasaAdmin)
30+
expect(casa_admin).not_to be_persisted
31+
expect(casa_admin).to have_attributes(
32+
display_name: params[:casa_admin][:display_name],
33+
phone_number: params[:casa_admin][:phone_number],
34+
email: params[:casa_admin][:email],
35+
date_of_birth: params[:casa_admin][:date_of_birth],
36+
receive_reimbursement_email: true,
37+
monthly_learning_hours_report: true
38+
)
39+
end
40+
41+
it "initializes a CasaAdmin with custom fields" do
42+
admin = CreateCasaAdminService.new(organization, params, user)
43+
44+
casa_admin = admin.build
45+
46+
expect(casa_admin).to have_attributes(
47+
active: true,
48+
casa_org_id: organization.id,
49+
type: "CasaAdmin"
50+
)
51+
expect(casa_admin.password).to be_present
52+
end
53+
end
54+
55+
describe "#create!" do
56+
it "creates a CasaAdmin with the given params" do
57+
admin = CreateCasaAdminService.new(organization, params, user)
58+
admin.build
59+
60+
expect do
61+
admin.create!
62+
end.to change(CasaAdmin, :count).by(1)
63+
64+
casa_admin = CasaAdmin.last
65+
expect(casa_admin).to have_attributes(
66+
display_name: params[:casa_admin][:display_name],
67+
phone_number: params[:casa_admin][:phone_number],
68+
email: params[:casa_admin][:email],
69+
date_of_birth: params[:casa_admin][:date_of_birth],
70+
receive_reimbursement_email: true,
71+
monthly_learning_hours_report: true,
72+
active: true,
73+
casa_org_id: organization.id,
74+
password: nil
75+
)
76+
end
77+
78+
it "sends an invite from the user" do
79+
admin = CreateCasaAdminService.new(organization, params, user)
80+
admin.build
81+
82+
casa_admin = admin.create!
83+
84+
expect(casa_admin.invited_by_id).to eq(user.id)
85+
expect(casa_admin.invited_by_type).to eq("User")
86+
end
87+
88+
context "when there are errors" do
89+
it "does not create the CasaAdmin and returns the errors" do
90+
params = ActionController::Parameters.new(
91+
{
92+
casa_admin: {
93+
email: "invalid_email_format",
94+
display_name: "Bob Cat"
95+
}
96+
}
97+
).permit!
98+
99+
admin = CreateCasaAdminService.new(organization, params, user)
100+
admin.build
5101

6-
pending "add some tests for CreateCasaAdminService"
102+
expect do
103+
admin.create!
104+
end.to raise_error(ActiveRecord::RecordInvalid, /email is invalid/i)
105+
end
106+
end
107+
end
7108
end

0 commit comments

Comments
 (0)