diff --git a/app/models/person.rb b/app/models/person.rb index 407121cee7..3ab3122e48 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -197,13 +197,14 @@ def known_email_2_type? = email_2_type.in?(CONTACT_TYPES) attributes address_city: "addresses.city" attributes address_state: "addresses.state" attributes address_zip: "addresses.zip_code" + attributes address_country: "addresses.country" attributes address_phone: "addresses.phone" attributes all: [ :first_name, :legal_first_name, :last_name, :email, :email_2, "user.first_name", "user.last_name", "user.email", "user.phone", "contact_methods.value", "addresses.street_address", "addresses.city", "addresses.state", - "addresses.zip_code", "addresses.phone" ] + "addresses.zip_code", "addresses.country", "addresses.phone" ] options :all, type: :text, default: true, default_operator: :or end @@ -220,10 +221,11 @@ def known_email_2_type? = email_2_type.in?(CONTACT_TYPES) attributes address_city: "addresses.city" attributes address_state: "addresses.state" attributes address_zip: "addresses.zip_code" + attributes address_country: "addresses.country" attributes address_phone: "addresses.phone" attributes all: [ "contact_methods.value", "addresses.street_address", "addresses.city", "addresses.state", - "addresses.zip_code", "addresses.phone" ] + "addresses.zip_code", "addresses.country", "addresses.phone" ] options :all, type: :text, default: true, default_operator: :or end diff --git a/app/views/people/_search_boxes.html.erb b/app/views/people/_search_boxes.html.erb index 03a845881a..26f47b790b 100644 --- a/app/views/people/_search_boxes.html.erb +++ b/app/views/people/_search_boxes.html.erb @@ -74,7 +74,7 @@ <%= render "shared/filter_text", param: :contact_info, label: "Contact info", submit: true, wrapper_class: "w-full", - tooltip: "Searches phone, address, city, state, and ZIP." %> + tooltip: "Searches phone, address, city, state, ZIP, and country." %> <% end %> diff --git a/db/seeds/features/2026-10-25-search-people-by-address-country.yml b/db/seeds/features/2026-10-25-search-people-by-address-country.yml new file mode 100644 index 0000000000..ffad6298ec --- /dev/null +++ b/db/seeds/features/2026-10-25-search-people-by-address-country.yml @@ -0,0 +1,8 @@ +name: "Search people by their address country" +area: people +display_status: admin_facing +released_on: 2026-10-25 +pr_number: 2837 +summary: >- + The people search's contact info now matches the country on a person's address, so + typing "India" — or address_country:"South Africa" — finds the people who live there. diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb index e13a437648..8b4ea334e2 100644 --- a/spec/models/person_spec.rb +++ b/spec/models/person_spec.rb @@ -705,6 +705,21 @@ def phone_numbers expect(Person.search_name_email('alice@example')).to include(person_alice) end + it 'search_contact matches an address country' do + create(:address, addressable: person_bob, country: 'South Africa') + + expect(Person.search_contact('South Africa')).to contain_exactly(person_bob) + expect(Person.search_contact('address_country:"South Africa"')).to contain_exactly(person_bob) + end + + it 'filters by contact_info matching an address country' do + create(:address, addressable: person_bob, country: 'South Africa') + create(:address, addressable: person_alice, country: 'India') + + expect(Person.search_by_params(contact_info: 'address_country:"South Africa"')).to contain_exactly(person_bob) + expect(Person.search_by_params(contact_info: 'India')).to contain_exactly(person_alice) + end + it 'filters by shared_contact_info matching a full name' do results = Person.search_by_params(shared_contact_info: 'Alice Smith') expect(results).to include(person_alice)