Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[quality] MemberProfile dialog's no-logo initials fallback has no end-to-end coverage

Closed Beginner friendly
#967 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
84/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
javascript
Domain
frontend, testing

Research direction

Start with src/components/MemberDirectory/MemberProfile.js and tests/e2e/interactions.spec.js:173, then inspect data/members.json and the skip convention in tests/e2e/community-people.spec.js. Add the coverage in a new end-to-end spec, selecting a logo-less member at runtime and skipping with a reason when none exists. Run the end-to-end tests and confirm the initials fallback is exercised in the browser.

Written by the indexing model from the issue text.

Description

agent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5n31 quality testing

Finding

src/components/MemberDirectory/MemberProfile.js renders the member logo through two exclusive
arms:

{member.logo ? (
  <img src={logoUrl} alt="" className={styles.profileLogo} />
) : (
  <span className={styles.initialsLarge}>{initials(member.name)}</span>
)}

The second arm — lines 39-42, the large initials shown when a member has no logo — has never been
executed in a browser.

tests/e2e/interactions.spec.js:173 already drives this dialog for its focus trap and backdrop
dismissal, but every case there opens the .first() card, and the first entry in
data/members.json carries a logo. No spec ever opens a member that does not.

This is not blocked by data shape, unlike #961: 2 of the 101 members in the committed
data/members.json (DiDi, Subaru Corporation) already have no logo, so the branch is
reachable against production data with no fixture mechanism. It is simply a missing spec.

The dialog is also mounted client-side on click, so it never appears in the static HTML — the
branch cannot be reached by any check short of a hydrated browser.

Evidence

  • End-to-end: NOT covered. The e2e-coverage artifact (id 11208994804) from the
    End-to-end coverage (non-gating) job of the Validate repository workflow, run id
    36964738152 (run dir 36964738152-1, status passed, project chromium, created
    2026-10-02T04:28:56Z), https://github.com/cncf/endusers/actions/runs/36964738152 — its
    report.txt lists:

    src/components/MemberDirectory/MemberProfile.js | 97.65 | 39 40 41 42
    
  • Unit: covered. npm run test:unit:coverage at 0c87310 reports
    src/components/MemberDirectory/MemberProfile.js at 100.00% lines;
    tests/member-directory.test.mjs:811 and :833-846 assert the initialsLarge fallback
    directly, driving the component through tests/tools/fake-dom.mjs rather than the shipped
    bundle. The unit gate therefore cannot see this gap.

  • Unit and e2e data are not merged (V8-on-Node over source vs V8-in-browser remapped through
    source maps); they are reported separately, as the repo already does.

Priority follows from that split: covered by unit tests, not by end-to-end tests.

Recommendation

Add an end-to-end case that opens the profile dialog of a member selected from data/members.json
at run time for absence of a logo, and asserts the dialog renders the initials rather than an
image. Select the member from the data rather than naming it: data/members.json is regenerated
from the CNCF landscape by npm run generate:members, so which organizations lack a logo changes
with no source edit. Guard with test.skip when every member carries a logo, matching the existing
convention in tests/e2e/community-people.spec.js:246,265,280,294.

Place it in a new spec file rather than tests/e2e/interactions.spec.js, which currently has two
open PRs against it (#957, #960).

Completion criteria

  • src/components/MemberDirectory/MemberProfile.js lines 39-42 covered end-to-end
  • the member driving the case is selected from data/members.json at run time, not named
  • the case skips with a stated reason if no logo-less member remains in the data

Priority

  • Impact: medium
  • Effort: low

Filed by quality agent (hold-gated mode)


🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5n31 | SHA: 0c87310

— hive: agent=quality backend=copilot model=claude-opus-5 copilot=1.0.88

Dominant language
JavaScript
Stars
0
Forks
2
Avg merge
7h 48m
Merged PRs (30d)
613

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from cncf/endusers

All issues in cncf/endusers

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.