• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

BacLuc / ecamp3 / 28472643035
36%
devel: 36%

Build:
Build:
LAST BUILD BRANCH: add-component-e2e-tests
DEFAULT BRANCH: devel
Ran 30 Jun 2026 08:09PM UTC
Jobs 3
Files 697
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

30 Jun 2026 08:07PM UTC coverage: 35.752% (+0.02%) from 35.729%
28472643035

push

github

BacLuc
feat(collaborators): search known profiles when inviting (#340)

Inviting a collaborator previously required typing the exact email address
from memory. This adds the ability to search the people you already share a
camp with by firstname, surname, nickname or email and pick one, which fills
in the invite email. Typing a brand-new email address still works.

Backend
- New App\Doctrine\Filter\ProfileSearchFilter adds a single `search` query
  parameter to GET /profiles. It matches the term case-insensitively and
  partially against firstname, surname, nickname and email at the same time
  (OR), on top of the existing user scoping (only profiles you share a camp
  with). LIKE special characters are escaped.
- Migration Version20260627120000 enables pg_trgm and creates functional GIN
  trigram indexes on LOWER(firstname/surname/nickname/email) so the
  LOWER(col) LIKE LOWER(:term) comparisons are served by a bitmap index scan
  instead of a sequential scan. The indexes are prefixed with `unmanaged_` so
  CustomPostgreSQLSchemaManager hides them from the schema diff and
  doctrine:schema:validate stays green (functional/opclass indexes cannot be
  expressed in ORM mapping).
- Verified with EXPLAIN ANALYZE on ~20'000 generated profiles
  (app:generate-data) that the planner uses a BitmapOr over all four trigram
  indexes, both for the isolated predicate and for the full scoped endpoint
  query as a user related to all profiles.
- reject non-UTF-8 profile search terms with 400 instead of 500

Frontend
- The collaborator invite dialog now uses a server-driven combobox: it
  debounces the input, queries /profiles?search=, shows the matching people
  with name and email, and on selection uses the email as the value. Free-text
  email entry is preserved for inviting people you have not met yet.

Tests
- API: ListProfilesTest covers searching each field, partial and
  case-insensitive matches, result restriction, combination with the camp
  filter, and that the ... (continued)

845 of 4776 branches covered (17.69%)

Branch coverage included in aggregate %.

21 of 53 new or added lines in 2 files covered. (39.62%)

52 existing lines in 3 files now uncovered.

4880 of 11237 relevant lines covered (43.43%)

979.73 hits per line

Uncovered Changes

Lines Coverage ∆ File
30
0.0
0.0% frontend/src/components/collaborator/CollaboratorCreate.vue
2
91.3
0.0% api/src/Doctrine/Filter/ProfileSearchFilter.php

Coverage Regressions

Lines Coverage ∆ File
33
0.0
0.0% frontend/src/views/auth/Register.vue
13
0.0
0.0% frontend/src/components/collaborator/CollaboratorCreate.vue
6
85.44
-1.92% pdf/src/campPrint/RichText.vue
Jobs
ID Job ID Ran Files Coverage
1 pdf - 28472643035.1 30 Jun 2026 08:09PM UTC 68
73.09
GitHub Action Run
2 api - 28472643035.2 30 Jun 2026 08:12PM UTC 240
88.35
GitHub Action Run
3 frontend - 28472643035.3 30 Jun 2026 08:11PM UTC 389
15.23
GitHub Action Run
Source Files on build 28472643035
  • Tree
  • List 697
  • Changed 3
  • Source Changed 3
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #28472643035
  • 1559c2f1 on github
  • Prev Build on feat/340-search-profile-campcollaboration (#28283723163)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc