From ea427a462c2d925229fe21e1a92c06ce97be0484 Mon Sep 17 00:00:00 2001 From: John Costa Date: Thu, 12 Mar 2026 08:05:54 -0700 Subject: [PATCH] fix: make volunteer policy spec org assignments explicit The volunteer policy spec relied on implicit casa_org assignment from the factory default (CasaOrg.first || create(:casa_org)), which hits the database even inside build_stubbed. When FactoryBot's auto- incrementing stub IDs collide with real DB record IDs, ActiveRecord's equality check (class + ID) causes same_org? to return incorrect results non-deterministically. Introduce explicit let(:casa_org) and let(:other_org) shared across all stubbed users and records, bypassing the factory's DB-hitting default entirely and guaranteeing deterministic org identity. Resolves #6770 --- spec/policies/volunteer_policy_spec.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/spec/policies/volunteer_policy_spec.rb b/spec/policies/volunteer_policy_spec.rb index 5b7bb4ccb0..de10a79098 100644 --- a/spec/policies/volunteer_policy_spec.rb +++ b/spec/policies/volunteer_policy_spec.rb @@ -3,13 +3,15 @@ RSpec.describe VolunteerPolicy do subject { described_class } - let(:admin) { build_stubbed(:casa_admin) } - let(:supervisor) { build_stubbed(:supervisor) } - let(:volunteer) { build_stubbed(:volunteer) } + let(:casa_org) { build_stubbed(:casa_org) } + let(:other_org) { build_stubbed(:casa_org) } + let(:admin) { build_stubbed(:casa_admin, casa_org: casa_org) } + let(:supervisor) { build_stubbed(:supervisor, casa_org: casa_org) } + let(:volunteer) { build_stubbed(:volunteer, casa_org: casa_org) } permissions :edit? do context "same org" do - let(:record) { build_stubbed(:volunteer, casa_org: admin.casa_org) } + let(:record) { build_stubbed(:volunteer, casa_org: casa_org) } context "when user is a casa admin" do it "allows for same org" do @@ -31,7 +33,7 @@ end context "different org" do - let(:record) { build_stubbed(:volunteer, casa_org: build_stubbed(:casa_org)) } + let(:record) { build_stubbed(:volunteer, casa_org: other_org) } context "when user is a casa admin" do it "does not allow for different org" do @@ -55,7 +57,7 @@ permissions :index?, :activate?, :create?, :datatable?, :deactivate?, :new?, :show?, :update? do context "when user is a casa admin" do - let(:record) { build_stubbed(:volunteer, casa_org: admin.casa_org) } + let(:record) { build_stubbed(:volunteer, casa_org: casa_org) } it "allows" do expect(subject).to permit(admin, record) @@ -63,7 +65,7 @@ end context "when user is a supervisor" do - let(:record) { build_stubbed(:volunteer, casa_org: supervisor.casa_org) } + let(:record) { build_stubbed(:volunteer, casa_org: casa_org) } it "allows" do expect(subject).to permit(supervisor, record)