🐛 Fixed "labels is not defined" error when creating comped members via API#26837
🐛 Fixed "labels is not defined" error when creating comped members via API#26837troyciesco merged 4 commits intomainfrom
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
WalkthroughThe member-bread service's 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
📝 Coding Plan
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ast-grep (0.41.1)ghost/core/test/e2e-api/admin/members.test.js[] Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
62d8213 to
d0dd703
Compare
cmraible
left a comment
There was a problem hiding this comment.
LGTM! I just pushed a single e2e-api test to cover this, mostly just to prevent incidental regressions in the future 🚢
There was a problem hiding this comment.
🧹 Nitpick comments (1)
ghost/core/test/e2e-api/admin/members.test.js (1)
1283-1354: LGTM! Well-structured test that directly verifies the bug fix.The test correctly exercises the code path where a comped member is created with labels, which previously would fail with "labels is not defined on the model" error. The Stripe mocking pattern follows existing tests, and the assertions verify both the
compedstatus and label presence.One optional enhancement for consistency with other comped tests in this file:
💡 Optional: Add member event assertions for more comprehensive coverage
assert.ok(member.labels.find(l => l.name === 'Complimentary'), 'Member should have Complimentary label'); + // Verify member status events (optional - for parity with other comped tests) + await assertMemberEvents({ + eventType: 'MemberStatusEvent', + memberId: member.id, + asserts: [{ + from_status: null, + to_status: 'free' + }, { + from_status: 'free', + to_status: 'comped' + }] + }); });,
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ghost/core/test/e2e-api/admin/members.test.js` around lines 1283 - 1354, Add an optional assertion to verify member status events by calling assertMemberEvents after the existing label assertions in the "Can create a comped member with labels via API" test; specifically, invoke assertMemberEvents with eventType 'MemberStatusEvent', the created member's id (member.id), and asserts array checking transitions from null→'free' and 'free'→'comped' so the test matches parity with other comped tests and ensures status-change events are recorded.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@ghost/core/test/e2e-api/admin/members.test.js`:
- Around line 1283-1354: Add an optional assertion to verify member status
events by calling assertMemberEvents after the existing label assertions in the
"Can create a comped member with labels via API" test; specifically, invoke
assertMemberEvents with eventType 'MemberStatusEvent', the created member's id
(member.id), and asserts array checking transitions from null→'free' and
'free'→'comped' so the test matches parity with other comped tests and ensures
status-change events are recorded.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: f1d07c38-02cd-4315-a434-18963e1ed4ce
⛔ Files ignored due to path filters (1)
ghost/core/test/e2e-api/admin/__snapshots__/members.test.js.snapis excluded by!**/*.snap
📒 Files selected for processing (1)
ghost/core/test/e2e-api/admin/members.test.js
refs ONC-1553 Verifies the fix for passing sharedOptions to setComplimentarySubscription
2ebcec4 to
da978ed
Compare
…#120) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/sredevopsorg/ghost-on-kubernetes](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes) | minor | `v6.19.3` → `v6.22.1` | --- ### Release Notes <details> <summary>sredevopsorg/ghost-on-kubernetes (ghcr.io/sredevopsorg/ghost-on-kubernetes)</summary> ### [`v6.22.1`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/releases/tag/v6.22.1) [Compare Source](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/compare/v6.22.0...v6.22.1) #### What's Changed - Update event types for GHOST\_VERSION setup by [@​ngeorger](https://redirect.github.com/ngeorger) in [#​676](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/676) - Add Trivy vulnerability scanner workflow by [@​ngeorger](https://redirect.github.com/ngeorger) in [#​677](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/677) - chore(deps): update actions/checkout action to v6 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​679](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/679) - chore(deps): update aquasecurity/trivy-action action to v0.35.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​678](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/678) - chore(deps): update node.js to [`2365189`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/2365189) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​682](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/682) - chore(deps): update step-security/harden-runner action to v2.16.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​681](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/681) - chore(deps): update github/codeql-action action to v4.34.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​680](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/680) **Full Changelog**: <sredevopsorg/ghost-on-kubernetes@v6.22.0...v6.22.1> #### From upstream [@​tryghost](https://redirect.github.com/tryghost) 🔒 Added file type validation and content-type control for file uploads ([TryGhost/Ghost#26869](https://redirect.github.com/TryGhost/Ghost/pull/26869)) - Princi Vershwal 🎨 Updated Source to v1.5.2 - Ghost CI 🎨 Updated Casper to v5.10.1 - Ghost CI 🎨 Updated private page access and signup flow ([TryGhost/Ghost#26762](https://redirect.github.com/TryGhost/Ghost/pull/26762)) - John O'Nolan 🎨 Changed email verification error messages to be configurable via hostSettings ([TryGhost/Ghost#26631](https://redirect.github.com/TryGhost/Ghost/pull/26631)) - Jannis Fedoruk-Betschki 🐛 Fixed font rendering when converting SVGs with text elements to PNG format ([TryGhost/Ghost#26863](https://redirect.github.com/TryGhost/Ghost/pull/26863)) - Chris Raible 🐛 Fixed "labels is not defined" error when creating comped members via API ([TryGhost/Ghost#26837](https://redirect.github.com/TryGhost/Ghost/pull/26837)) - Troy Ciesco 🐛 Fixed translations for Inbox Links button ([TryGhost/Ghost#26839](https://redirect.github.com/TryGhost/Ghost/pull/26839)) - Evan Hahn 🐛 Fixed domain warming when warming has completed ([TryGhost/Ghost#26817](https://redirect.github.com/TryGhost/Ghost/pull/26817)) - Sam Lord 🌐 Added missed string wrapping for Portal's offer page ([TryGhost/Ghost#26884](https://redirect.github.com/TryGhost/Ghost/pull/26884)) - Cathy Sarisky 🌐 Added new Chinese language strings ([TryGhost/Ghost#26871](https://redirect.github.com/TryGhost/Ghost/pull/26871)) - tommywong-theinitium View the changelog for full details: <TryGhost/Ghost@v6.22.0...v6.22.1> ### [`v6.22.0`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/releases/tag/v6.22.0) [Compare Source](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/compare/v6.21.2...v6.22.0) #### What's Changed - Enhance CI workflow with Dockerfile-docker checks by [@​ngeorger](https://redirect.github.com/ngeorger) in [#​669](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/669) - ci: Automate building new '-docker' releases when there's a release. by [@​markstos](https://redirect.github.com/markstos) in [#​639](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/639) - Wf triggers fixes by [@​ngeorger](https://redirect.github.com/ngeorger) in [#​670](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/670) - fix(check-ghost-releases): use GitHub Packages API for LAST\_BUILT by [@​markstos](https://redirect.github.com/markstos) in [#​671](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/671) - chore(deps): update gcr.io/distroless/nodejs22-debian13:latest docker digest to [`b2a1685`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/b2a1685) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​673](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/673) - chore(deps): update gcr.io/distroless/nodejs22-debian13:debug-nonroot docker digest to [`6731730`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/6731730) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​672](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/672) - Wf patch logic by [@​ngeorger](https://redirect.github.com/ngeorger) in [#​674](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/674) **Full Changelog**: <sredevopsorg/ghost-on-kubernetes@v6.21.2...v6.22.0> ### [`v6.21.2`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/releases/tag/v6.21.2) [Compare Source](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/compare/v6.21.0...v6.21.2) #### What's Changed - ✨ Add healthcheck to Dockerfile. by [@​markstos](https://redirect.github.com/markstos) in [#​655](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/655) - Update base image to specific SHA for runtime by [@​ngeorger](https://redirect.github.com/ngeorger) in [#​665](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/665) - chore(deps): update sigstore/cosign-installer action to v4.1.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​666](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/666) - chore(deps): update actions/download-artifact action to v8.0.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​667](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/667) **Full Changelog**: <sredevopsorg/ghost-on-kubernetes@v6.21.0...v6.21.2> ### [`v6.21.0`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/releases/tag/v6.21.0) [Compare Source](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/compare/v6.20.0...v6.21.0) #### What's Changed - chore: update Ghost and MySQL user IDs to 65532 for non-root executio… by [@​ngeorger](https://redirect.github.com/ngeorger) in [#​652](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/652) - chore(deps): update docker/login-action action to v4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​653](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/653) - ✨ Add jemalloc to reduce memory consumption by [@​markstos](https://redirect.github.com/markstos) in [#​654](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/654) - chore(deps): update docker/setup-buildx-action action to v4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​656](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/656) - chore(deps): update docker/metadata-action action to v6 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​663](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/663) - chore(deps): update docker/build-push-action action to v7 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​662](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/662) - chore(deps): update step-security/harden-runner action to v2.15.1 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​661](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/661) - chore(deps): update github/codeql-action action to v4.32.6 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​660](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/660) - chore(deps): update node.js to [`30c0fec`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/30c0fec) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​659](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/659) - chore(deps): update gcr.io/distroless/nodejs22-debian13:latest docker digest to [`b9b6d4a`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/b9b6d4a) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​658](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/658) - chore(deps): update gcr.io/distroless/nodejs22-debian13:debug-nonroot docker digest to [`9bc6ba5`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/9bc6ba5) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​657](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/657) #### From upstream [@​tryghost](https://redirect.github.com/tryghost) ✨ Expanded available cards in welcome email editor ([TryGhost/Ghost#26645](https://redirect.github.com/TryGhost/Ghost/pull/26645)) - Evan Hahn 🐛 Fixed double-prefixed asset URLs when using CDN - Rob Lester 🐛 Fixed contributor user menu Posts link navigating to wrong route ([TryGhost/Ghost#26716](https://redirect.github.com/TryGhost/Ghost/pull/26716)) - Kevin Ansfield 🐛 Fixed contributor posts list not being scrollable ([TryGhost/Ghost#26715](https://redirect.github.com/TryGhost/Ghost/pull/26715)) - Kevin Ansfield 🐛 Fixed missing server-side label search in recipient & segment selects ([TryGhost/Ghost#26699](https://redirect.github.com/TryGhost/Ghost/pull/26699)) - Kevin Ansfield 🐛 Fixed #-prefixed member label select ordering when scrolling ([TryGhost/Ghost#26702](https://redirect.github.com/TryGhost/Ghost/pull/26702)) - Kevin Ansfield **Full Changelog**: <sredevopsorg/ghost-on-kubernetes@v6.20.0...v6.21.0> ### [`v6.20.0`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/releases/tag/v6.20.0) #### What's Changed - chore(deps): update github/codeql-action action to v4.32.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​630](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/630) - chore(deps): update docker/build-push-action action to v6.19.2 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​629](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/629) - docs: Document Dockerfile-docker.dockerfile by [@​markstos](https://redirect.github.com/markstos) in [#​638](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/638) - chore(deps): update actions/dependency-review-action action to v4.8.3 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​641](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/641) - chore(deps): update github/codeql-action action to v4.32.4 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​642](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/642) - chore(deps): update gcr.io/distroless/nodejs22-debian13:latest docker digest to [`72d4913`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/72d4913) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​647](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/647) - chore(deps): update node.js to [`b597724`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/b597724) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​644](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/644) - chore(deps): update gcr.io/distroless/nodejs22-debian13:debug-nonroot docker digest to [`874d16e`](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/commit/874d16e) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​646](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/646) - chore(deps): update github artifact actions (major) by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​648](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/648) - chore(deps): update step-security/harden-runner action to v2.15.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​645](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/645) - chore(deps): update actions/dependency-review-action action to v4.9.0 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​650](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/650) - chore(deps): update github/codeql-action action to v4.32.5 by [@​renovate](https://redirect.github.com/renovate)\[bot] in [#​649](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/649) #### New Contributors - [@​markstos](https://redirect.github.com/markstos) made their first contribution in [#​638](https://redirect.github.com/sredevopsorg/ghost-on-kubernetes/pull/638) **Full Changelog**: <sredevopsorg/ghost-on-kubernetes@v6.19.1...v6.20.0> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/mwgustin/homeops). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My40OC4xIiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
closes https://linear.app/tryghost/issue/ONC-1553
add()method inmemberBREADServicepassed the fulloptionsobject (includingwithRelated: ['labels', 'newsletters']) tosetComplimentarySubscription().sharedOptions(context + transacting only), matching the pattern already used forlinkStripeCustomer().Summary
When creating a comped member via the Admin API with a
stripe_customer_idpointing to a Stripe customer that has existing subscriptions,setComplimentarySubscription()received the full options object includingwithRelated: ['labels', 'newsletters']. Inside that method,member.related('stripeSubscriptions').fetch(options)attempted to eager-loadlabelsonStripeCustomerSubscriptionmodels, which don't have that relation — throwing "labels is not defined on the model".Impact
The bug's impact depends on the Stripe customer's existing subscriptions:
comped: true: The comp conversion never runs. The member ends up withpaidstatus instead ofcomped, and the API returns a 500. This is a real data issue — the member doesn't get their complimentary access.linkStripeCustomer()before the error occurs, so the member is properly set up. However, the API still returns a 500 to the caller.StripeCustomerSubscriptionmodels to eager-load on.Fix
Uses
sharedOptions(onlycontext+transacting) instead of the fulloptionswhen callingsetComplimentarySubscription()on line 406 ofmember-bread-service.js. This matches the pattern already established for thelinkStripeCustomer()call on line 381.