From 8fcfaacbc404504ce7cc4e5208005106f5bcb00a Mon Sep 17 00:00:00 2001 From: "Salvador Fuentes Jr." <9240+fuentesjr@users.noreply.github.com> Date: Thu, 16 Jul 2026 18:03:52 -0700 Subject: [PATCH 1/4] test: replace UserParameters spec stub with real tests (#5563) --- spec/values/user_parameters_spec.rb | 131 +++++++++++++++++++--------- 1 file changed, 91 insertions(+), 40 deletions(-) diff --git a/spec/values/user_parameters_spec.rb b/spec/values/user_parameters_spec.rb index 73db21c75d..0c5704be2b 100644 --- a/spec/values/user_parameters_spec.rb +++ b/spec/values/user_parameters_spec.rb @@ -1,75 +1,126 @@ require "rails_helper" RSpec.describe UserParameters do - def build_params(attrs) - ActionController::Parameters.new(user: attrs) + subject { described_class.new(params) } + + let(:params) { + ActionController::Parameters.new( + user: ActionController::Parameters.new( + email: "user@example.com", + casa_org_id: 1, + display_name: "User Name", + phone_number: "1234567890", + date_of_birth: "2000-01-01", + password: "password123", + active: "1", + receive_reimbursement_email: "1", + type: "Volunteer", + monthly_learning_hours_report: "1", + address_attributes: {id: 1, content: "123 Main St"} + ) + ) + } + + it "permits the allowed user attributes" do + aggregate_failures do + expect(subject["email"]).to eq("user@example.com") + expect(subject["casa_org_id"]).to eq(1) + expect(subject["display_name"]).to eq("User Name") + expect(subject["phone_number"]).to eq("1234567890") + expect(subject["date_of_birth"]).to eq("2000-01-01") + expect(subject["password"]).to eq("password123") + expect(subject["active"]).to eq("1") + expect(subject["receive_reimbursement_email"]).to eq("1") + expect(subject["type"]).to eq("Volunteer") + expect(subject["monthly_learning_hours_report"]).to eq("1") + expect(subject["address_attributes"].to_h).to eq("id" => 1, "content" => "123 Main St") + end end - describe "#without" do - it "removes the given keys and is chainable" do - params = build_params(display_name: "Jane", active: "false", type: "Volunteer") - - result = described_class.new(params).without(:active, :type) + it "filters out attributes that are not permitted" do + params[:user][:admin] = true + expect(subject["admin"]).to be_nil + end - expect(result).to be_a(described_class) - expect(result.to_h).to eq("display_name" => "Jane") - end + it "raises when the user key is missing" do + expect { + described_class.new(ActionController::Parameters.new(other: {})) + }.to raise_error(ActionController::ParameterMissing) + end - it "removes keys even when the params only has string keys" do - params = build_params(display_name: "Jane", active: "false") + describe "#with_organization" do + let(:organization) { build_stubbed(:casa_org) } - result = described_class.new(params).without(:active) + it "sets casa_org_id to the organization's id and returns self" do + result = subject.with_organization(organization) - expect(result.to_h).to eq("display_name" => "Jane") + expect(result).to equal(subject) + expect(subject["casa_org_id"]).to eq(organization.id) end + end + + describe "#with_password" do + it "sets the password and returns self" do + result = subject.with_password("new-password") - it "supports further chaining after without" do - params = build_params(display_name: "Jane", active: "false", password: "old") + expect(result).to equal(subject) + expect(subject["password"]).to eq("new-password") + end + end - result = described_class.new(params).without(:active).with_password("new-password") + describe "#with_type" do + it "sets the type and returns self" do + result = subject.with_type("Supervisor") - expect(result.to_h).to eq("display_name" => "Jane", "password" => "new-password") + expect(result).to equal(subject) + expect(subject["type"]).to eq("Supervisor") end end describe "#without_type" do - it "removes the type key" do - params = build_params(display_name: "Jane", type: "Volunteer") + it "removes the type key and returns self" do + result = subject.without_type - result = described_class.new(params).without_type - - expect(result.to_h).to eq("display_name" => "Jane") + expect(result).to equal(subject) + expect(subject.key?("type")).to be false end end describe "#without_active" do - it "removes the active key" do - params = build_params(display_name: "Jane", active: "false") - - result = described_class.new(params).without_active + it "removes the active key and returns self" do + result = subject.without_active - expect(result.to_h).to eq("display_name" => "Jane") + expect(result).to equal(subject) + expect(subject.key?("active")).to be false end end - describe "#with_organization" do - it "sets casa_org_id" do - params = build_params(display_name: "Jane") - organization = create(:casa_org) - - result = described_class.new(params).with_organization(organization) + describe "#with_only" do + it "slices params down to only the given keys and returns self" do + result = subject.with_only(:email, :type) - expect(result.to_h).to eq("display_name" => "Jane", "casa_org_id" => organization.id) + expect(result).to equal(subject) + expect(subject.keys).to contain_exactly("email", "type") end end - describe "#with_password" do - it "sets password" do - params = build_params(display_name: "Jane") + describe "#without" do + it "removes the key when given a symbol" do + subject.without(:active) + + expect(subject["active"]).to be_nil + end + + it "removes the key when given a string" do + subject.without("active") + + expect(subject["active"]).to be_nil + end - result = described_class.new(params).with_password("secret123") + it "returns self so it can be chained" do + result = subject.without(:active) - expect(result.to_h).to eq("display_name" => "Jane", "password" => "secret123") + expect(result).to equal(subject) end end end From 40b7e960d0556546b50d347510536971f75e33c8 Mon Sep 17 00:00:00 2001 From: "Salvador Fuentes Jr." <9240+fuentesjr@users.noreply.github.com> Date: Thu, 16 Jul 2026 18:03:52 -0700 Subject: [PATCH 2/4] test: replace SupervisorParameters spec stub with real tests (#5563) --- spec/values/supervisor_parameters_spec.rb | 29 +++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/spec/values/supervisor_parameters_spec.rb b/spec/values/supervisor_parameters_spec.rb index 626673901c..6c137e1960 100644 --- a/spec/values/supervisor_parameters_spec.rb +++ b/spec/values/supervisor_parameters_spec.rb @@ -1,7 +1,32 @@ require "rails_helper" RSpec.describe SupervisorParameters do - # TODO: Add tests for SupervisorParameters + subject { described_class.new(params) } - pending "add some tests for SupervisorParameters" + let(:params) { + ActionController::Parameters.new( + supervisor: ActionController::Parameters.new( + email: "supervisor@example.com", + display_name: "Supervisor Name" + ) + ) + } + + it "wraps params under the supervisor root key" do + expect(subject["email"]).to eq("supervisor@example.com") + expect(subject["display_name"]).to eq("Supervisor Name") + end + + it "raises when the supervisor key is missing" do + expect { + described_class.new(ActionController::Parameters.new(user: {})) + }.to raise_error(ActionController::ParameterMissing) + end + + it "inherits builder methods from UserParameters" do + result = subject.with_password("new-password") + + expect(result).to equal(subject) + expect(subject["password"]).to eq("new-password") + end end From 50b3c49067389851754deeeeaf06e7817b4b701f Mon Sep 17 00:00:00 2001 From: "Salvador Fuentes Jr." <9240+fuentesjr@users.noreply.github.com> Date: Thu, 16 Jul 2026 18:03:52 -0700 Subject: [PATCH 3/4] test: replace CasaAdminParameters spec stub with real tests (#5563) --- spec/values/casa_admin_parameters_spec.rb | 29 +++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/spec/values/casa_admin_parameters_spec.rb b/spec/values/casa_admin_parameters_spec.rb index 99b0240ac8..fae27e1b18 100644 --- a/spec/values/casa_admin_parameters_spec.rb +++ b/spec/values/casa_admin_parameters_spec.rb @@ -1,7 +1,32 @@ require "rails_helper" RSpec.describe CasaAdminParameters do - # TODO: Add tests for CasaAdminParameters + subject { described_class.new(params) } - pending "add some tests for CasaAdminParameters" + let(:params) { + ActionController::Parameters.new( + casa_admin: ActionController::Parameters.new( + email: "admin@example.com", + display_name: "Admin Name" + ) + ) + } + + it "wraps params under the casa_admin root key" do + expect(subject["email"]).to eq("admin@example.com") + expect(subject["display_name"]).to eq("Admin Name") + end + + it "raises when the casa_admin key is missing" do + expect { + described_class.new(ActionController::Parameters.new(user: {})) + }.to raise_error(ActionController::ParameterMissing) + end + + it "inherits builder methods from UserParameters" do + result = subject.with_password("new-password") + + expect(result).to equal(subject) + expect(subject["password"]).to eq("new-password") + end end From bd1b9aca22966e6126b41520bc75606e779a8255 Mon Sep 17 00:00:00 2001 From: "Salvador Fuentes Jr." <9240+fuentesjr@users.noreply.github.com> Date: Thu, 16 Jul 2026 18:03:52 -0700 Subject: [PATCH 4/4] test: replace AllCasaAdminParameters spec stub with real tests (#5563) --- spec/values/all_casa_admin_parameters_spec.rb | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/spec/values/all_casa_admin_parameters_spec.rb b/spec/values/all_casa_admin_parameters_spec.rb index dc79d9dbfb..f3fce9e0b9 100644 --- a/spec/values/all_casa_admin_parameters_spec.rb +++ b/spec/values/all_casa_admin_parameters_spec.rb @@ -1,7 +1,39 @@ require "rails_helper" RSpec.describe AllCasaAdminParameters do - # TODO: Add tests for AllCasaAdminParameters + subject { described_class.new(params) } - pending "add some tests for AllCasaAdminParameters" + let(:params) { + ActionController::Parameters.new( + all_casa_admin: ActionController::Parameters.new( + email: "all_admin@example.com", + password: "password123" + ) + ) + } + + it "permits the allowed attributes" do + expect(subject["email"]).to eq("all_admin@example.com") + expect(subject["password"]).to eq("password123") + end + + it "filters out attributes that are not permitted" do + params[:all_casa_admin][:admin] = true + expect(subject["admin"]).to be_nil + end + + it "raises when the all_casa_admin key is missing" do + expect { + described_class.new(ActionController::Parameters.new(user: {})) + }.to raise_error(ActionController::ParameterMissing) + end + + describe "#with_password" do + it "sets the password and returns self" do + result = subject.with_password("new-password") + + expect(result).to equal(subject) + expect(subject["password"]).to eq("new-password") + end + end end