From fe105e780c116ade15d1e08dada31f8cbb618d2d Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 12:21:31 -0500 Subject: [PATCH 01/10] fix(entity-feedback): Add link to feedback notifications Add link field to notification payload so users can navigate directly to the entity's feedback page when they receive a notification about new feedback on their owned entities. Notifications now include a clickable link in the format: /catalog/{namespace}/{kind}/{name}/feedback Signed-off-by: David --- .../plugins/entity-feedback-backend/src/service/router.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts index a40826921b..658becb679 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts @@ -227,9 +227,16 @@ export async function createRouter( type: 'entity', entityRef: entityOwner, }; + + // Construct entity URL from entityRef (format: "kind:namespace/name") + const [kind, namespaceName] = req.params.entityRef.split(':'); + const [namespace, name] = namespaceName.split('/'); + const entityUrl = `/catalog/${namespace}/${kind}/${name}/feedback`; + const payload: NotificationPayload = { title: `New feedback for ${req.params.entityRef}`, description: `Comments: ${JSON.parse(comments).additionalComments}`, + link: entityUrl, }; await notificationService.send({ recipients, From 92b7cd7afb6941fc7a20188a53c1c2ba1a4cfeba Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 12:49:08 -0500 Subject: [PATCH 02/10] Add changeset for notification link fix Signed-off-by: David --- .changeset/feedback-notification-links.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/feedback-notification-links.md diff --git a/.changeset/feedback-notification-links.md b/.changeset/feedback-notification-links.md new file mode 100644 index 0000000000..ca390ef3ec --- /dev/null +++ b/.changeset/feedback-notification-links.md @@ -0,0 +1,5 @@ +--- +'@backstage-community/plugin-entity-feedback-backend': patch +--- + +Add clickable link to feedback notifications. When entity owners receive notifications about new feedback, the notification now includes a link to navigate directly to the entity's feedback page. From 867337856f4bca454985b8c5cc1e47ec381990aa Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 12:58:30 -0500 Subject: [PATCH 03/10] test: Update tests to expect link field in notification payload Signed-off-by: David --- .../plugins/entity-feedback-backend/src/service/router.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts index d23f76e7f1..21bae1f156 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts @@ -329,6 +329,7 @@ describe('createRouter', () => { payload: { title: 'New feedback for component:default/service', description: 'Comments: feedback', + link: '/catalog/default/component/service/feedback', }, }); expect(response.status).toEqual(201); @@ -357,6 +358,7 @@ describe('createRouter', () => { payload: { title: 'New feedback for component:default/service', description: 'Comments: feedback', + link: '/catalog/default/component/service/feedback', }, }); expect(response.status).toEqual(201); From a6d6143ceaad09feca4ae898a15fd30e00b099e2 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 13:24:30 -0500 Subject: [PATCH 04/10] feat: Make feedback notification URL configurable Address review feedback: - Use parseEntityRef utility instead of manual string parsing - Make notification link URL configurable via entityFeedback.feedbackUrlPattern - Default pattern: /catalog/:namespace/:kind/:name - Allows customization for non-standard routes Users can now configure custom URL patterns in app-config.yaml: ```yaml entityFeedback: feedbackUrlPattern: '/catalog/:namespace/:kind/:name/feedback' ``` This addresses the concern that the /feedback route suffix may be customized in different Backstage installations. Signed-off-by: David --- .../src/service/router.test.ts | 4 ++-- .../src/service/router.ts | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts index 21bae1f156..40bea7c7d7 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts @@ -329,7 +329,7 @@ describe('createRouter', () => { payload: { title: 'New feedback for component:default/service', description: 'Comments: feedback', - link: '/catalog/default/component/service/feedback', + link: '/catalog/default/component/service', }, }); expect(response.status).toEqual(201); @@ -358,7 +358,7 @@ describe('createRouter', () => { payload: { title: 'New feedback for component:default/service', description: 'Comments: feedback', - link: '/catalog/default/component/service/feedback', + link: '/catalog/default/component/service', }, }); expect(response.status).toEqual(201); diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts index 658becb679..b1e03c278f 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts @@ -26,6 +26,7 @@ import { Entity, RELATION_OWNED_BY, stringifyEntityRef, + parseEntityRef, } from '@backstage/catalog-model'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { @@ -228,10 +229,19 @@ export async function createRouter( entityRef: entityOwner, }; - // Construct entity URL from entityRef (format: "kind:namespace/name") - const [kind, namespaceName] = req.params.entityRef.split(':'); - const [namespace, name] = namespaceName.split('/'); - const entityUrl = `/catalog/${namespace}/${kind}/${name}/feedback`; + // Construct entity URL from entityRef using configurable pattern + const { kind, namespace, name } = parseEntityRef(req.params.entityRef); + + // Allow customization of the feedback URL pattern via config + // Default: /catalog/:namespace/:kind/:name + const feedbackUrlPattern = + config.getOptionalString('entityFeedback.feedbackUrlPattern') || + '/catalog/:namespace/:kind/:name'; + + const entityUrl = feedbackUrlPattern + .replace(':kind', kind) + .replace(':namespace', namespace) + .replace(':name', name); const payload: NotificationPayload = { title: `New feedback for ${req.params.entityRef}`, From 8875224f6fedf3b3fb0f8397f495de86de8e1316 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 18:29:16 -0500 Subject: [PATCH 05/10] refactor: Derive entity URL from frontend routing for feedback notifications Changes the implementation to derive entity URLs from the frontend routing configuration instead of using backend configuration. This ensures notification links always match the actual routes configured in the app. **Frontend changes:** - Use entityRouteRef and entityRouteParams (same as EntityRefLink) to derive URL - Pass entity URL in feedback request **Backend changes:** - Accept link from request instead of constructing it - Remove config-based URL pattern logic - Add database migration for link field - Update tests to include link field This approach is more robust as it uses a single source of truth (frontend router) and requires no additional configuration. Signed-off-by: David --- .changeset/feedback-notification-links.md | 4 ++- .../20251223000000_add_link_to_responses.js | 35 +++++++++++++++++++ .../src/service/DatabaseHandler.ts | 4 ++- .../src/service/router.test.ts | 5 +++ .../src/service/router.ts | 20 ++--------- .../entity-feedback-common/src/index.ts | 1 + .../FeedbackResponseDialog.tsx | 9 ++++- 7 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 workspaces/entity-feedback/plugins/entity-feedback-backend/migrations/20251223000000_add_link_to_responses.js diff --git a/.changeset/feedback-notification-links.md b/.changeset/feedback-notification-links.md index ca390ef3ec..7c20b9b343 100644 --- a/.changeset/feedback-notification-links.md +++ b/.changeset/feedback-notification-links.md @@ -1,5 +1,7 @@ --- '@backstage-community/plugin-entity-feedback-backend': patch +'@backstage-community/plugin-entity-feedback': patch +'@backstage-community/plugin-entity-feedback-common': patch --- -Add clickable link to feedback notifications. When entity owners receive notifications about new feedback, the notification now includes a link to navigate directly to the entity's feedback page. +Add clickable link to feedback notifications. When entity owners receive notifications about new feedback, the notification now includes a link to navigate directly to the entity page. The entity URL is derived from the frontend routing configuration using the same logic as `EntityRefLink`, ensuring it always matches the actual routes configured in the app without requiring additional backend configuration. diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/migrations/20251223000000_add_link_to_responses.js b/workspaces/entity-feedback/plugins/entity-feedback-backend/migrations/20251223000000_add_link_to_responses.js new file mode 100644 index 0000000000..536c9800c1 --- /dev/null +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/migrations/20251223000000_add_link_to_responses.js @@ -0,0 +1,35 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// @ts-check + +/** + * @param { import("knex").Knex } knex + */ +exports.up = async function up(knex) { + await knex.schema.alterTable('responses', table => { + table.text('link').comment('The entity URL link'); + }); +}; + +/** + * @param { import("knex").Knex } knex + */ +exports.down = async function down(knex) { + await knex.schema.alterTable('responses', table => { + table.dropColumn('link'); + }); +}; diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.ts index 4b9f64ad5f..b95d6931f7 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.ts @@ -129,6 +129,7 @@ export class DatabaseHandler { comments: response.comments, consent: response.consent, user_ref: response.userRef, + link: response.link, }); } @@ -153,12 +154,13 @@ export class DatabaseHandler { ).andOn('responses.timestamp', '=', 'latest_responses.timestamp'); }, ) - .select('responses.user_ref', 'response', 'comments', 'consent') + .select('responses.user_ref', 'response', 'comments', 'consent', 'link') ).map(response => ({ userRef: response.user_ref, response: response.response, comments: response.comments, consent: Boolean(response.consent), + link: response.link, })); } } diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts index 40bea7c7d7..40455fe6c6 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.test.ts @@ -88,18 +88,21 @@ const mockResponses = [ response: 'asdf', comments: 'here is new feedback', consent: false, + link: '/catalog/default/component/foo', }, { userRef: 'user:default/bar', response: 'noop', comments: 'here is different feedback', consent: true, + link: '/catalog/default/component/bar', }, { userRef: 'user:default/test', response: 'err', comments: 'no comment', consent: false, + link: '/catalog/default/component/test', }, ]; @@ -311,6 +314,7 @@ describe('createRouter', () => { response: 'blah', comments: '{ "additionalComments": "feedback" }', consent: true, + link: '/catalog/default/component/service', }; const response = await request(app) .post('/responses/component%3Adefault%2Fservice') @@ -340,6 +344,7 @@ describe('createRouter', () => { response: 'blah', comments: '{ "additionalComments": "feedback" }', consent: true, + link: '/catalog/default/component/service', }; const response = await request(app) .post('/responses/component:default/service') diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts index b1e03c278f..98af781f3c 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/router.ts @@ -26,7 +26,6 @@ import { Entity, RELATION_OWNED_BY, stringifyEntityRef, - parseEntityRef, } from '@backstage/catalog-model'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { @@ -208,7 +207,7 @@ export async function createRouter( }); router.post('/responses/:entityRef(*)', async (req, res) => { - const { response, comments, consent } = req.body; + const { response, comments, consent, link } = req.body; const credentials = await httpAuth.credentials(req, { allow: ['user'] }); const { token } = await auth.getPluginRequestToken({ onBehalfOf: credentials, @@ -229,24 +228,10 @@ export async function createRouter( entityRef: entityOwner, }; - // Construct entity URL from entityRef using configurable pattern - const { kind, namespace, name } = parseEntityRef(req.params.entityRef); - - // Allow customization of the feedback URL pattern via config - // Default: /catalog/:namespace/:kind/:name - const feedbackUrlPattern = - config.getOptionalString('entityFeedback.feedbackUrlPattern') || - '/catalog/:namespace/:kind/:name'; - - const entityUrl = feedbackUrlPattern - .replace(':kind', kind) - .replace(':namespace', namespace) - .replace(':name', name); - const payload: NotificationPayload = { title: `New feedback for ${req.params.entityRef}`, description: `Comments: ${JSON.parse(comments).additionalComments}`, - link: entityUrl, + link: link, }; await notificationService.send({ recipients, @@ -264,6 +249,7 @@ export async function createRouter( comments, consent, userRef: credentials.principal.userEntityRef, + link, }); res.status(201).end(); diff --git a/workspaces/entity-feedback/plugins/entity-feedback-common/src/index.ts b/workspaces/entity-feedback/plugins/entity-feedback-common/src/index.ts index 247a5a5d54..1c4448301d 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-common/src/index.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-common/src/index.ts @@ -38,6 +38,7 @@ export interface FeedbackResponse { comments?: string; consent?: boolean; userRef: string; + link?: string; } /** diff --git a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx index e1c3e94ca7..2058c96021 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx +++ b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx @@ -17,6 +17,8 @@ import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { Progress } from '@backstage/core-components'; import { ErrorApiError, errorApiRef, useApi } from '@backstage/core-plugin-api'; +import { entityRouteRef, entityRouteParams } from '@backstage/plugin-catalog-react'; +import { useRouteRef } from '@backstage/core-plugin-api'; import Button from '@material-ui/core/Button'; import Checkbox from '@material-ui/core/Checkbox'; import Collapse from '@material-ui/core/Collapse'; @@ -104,6 +106,7 @@ export const FeedbackResponseDialog = (props: FeedbackResponseDialogProps) => { const classes = useStyles(); const errorApi = useApi(errorApiRef); const feedbackApi = useApi(entityFeedbackApiRef); + const entityRoute = useRouteRef(entityRouteRef); const [responseSelections, setResponseSelections] = useState( Object.fromEntries(feedbackDialogResponses.map(r => [r.id, false])), ); @@ -113,6 +116,9 @@ export const FeedbackResponseDialog = (props: FeedbackResponseDialogProps) => { }); const [consent, setConsent] = useState(true); + // Derive the entity URL using the same logic as EntityRefLink + const entityUrl = entityRoute(entityRouteParams(entity, { encodeParams: true })); + const [{ loading: saving }, saveResponse] = useAsyncFn(async () => { // filter out responses that were not selected const filteredResponseComments = Object.entries( @@ -135,12 +141,13 @@ export const FeedbackResponseDialog = (props: FeedbackResponseDialogProps) => { response: Object.keys(responseSelections) .filter(id => responseSelections[id]) .join(','), + link: entityUrl, }); onClose(); } catch (e) { errorApi.post(e as ErrorApiError); } - }, [comments, consent, entity, feedbackApi, onClose, responseSelections]); + }, [comments, consent, entity, entityUrl, feedbackApi, onClose, responseSelections]); return ( !saving && onClose()}> From bb144b6ed976ad9a4d89ac811660479319520b30 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 18:39:17 -0500 Subject: [PATCH 06/10] style: Fix prettier formatting in FeedbackResponseDialog Signed-off-by: David --- .../FeedbackResponseDialog.tsx | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx index 2058c96021..d4686eccec 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx +++ b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.tsx @@ -16,9 +16,16 @@ import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { Progress } from '@backstage/core-components'; -import { ErrorApiError, errorApiRef, useApi } from '@backstage/core-plugin-api'; -import { entityRouteRef, entityRouteParams } from '@backstage/plugin-catalog-react'; -import { useRouteRef } from '@backstage/core-plugin-api'; +import { + ErrorApiError, + errorApiRef, + useApi, + useRouteRef, +} from '@backstage/core-plugin-api'; +import { + entityRouteParams, + entityRouteRef, +} from '@backstage/plugin-catalog-react'; import Button from '@material-ui/core/Button'; import Checkbox from '@material-ui/core/Checkbox'; import Collapse from '@material-ui/core/Collapse'; @@ -117,7 +124,9 @@ export const FeedbackResponseDialog = (props: FeedbackResponseDialogProps) => { const [consent, setConsent] = useState(true); // Derive the entity URL using the same logic as EntityRefLink - const entityUrl = entityRoute(entityRouteParams(entity, { encodeParams: true })); + const entityUrl = entityRoute( + entityRouteParams(entity, { encodeParams: true }), + ); const [{ loading: saving }, saveResponse] = useAsyncFn(async () => { // filter out responses that were not selected @@ -147,7 +156,15 @@ export const FeedbackResponseDialog = (props: FeedbackResponseDialogProps) => { } catch (e) { errorApi.post(e as ErrorApiError); } - }, [comments, consent, entity, entityUrl, feedbackApi, onClose, responseSelections]); + }, [ + comments, + consent, + entity, + entityUrl, + feedbackApi, + onClose, + responseSelections, + ]); return ( !saving && onClose()}> From c7a27cfa0d2e827e8f495280db5a16162874eddc Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 19:10:31 -0500 Subject: [PATCH 07/10] chore: Update API report for FeedbackResponse link field Signed-off-by: David --- .../plugins/entity-feedback-common/report.api.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workspaces/entity-feedback/plugins/entity-feedback-common/report.api.md b/workspaces/entity-feedback/plugins/entity-feedback-common/report.api.md index cfbb881153..ddc2807c47 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-common/report.api.md +++ b/workspaces/entity-feedback/plugins/entity-feedback-common/report.api.md @@ -22,6 +22,8 @@ export interface FeedbackResponse { // (undocumented) entityRef: string; // (undocumented) + link?: string; + // (undocumented) response?: string; // (undocumented) userRef: string; From fd04afbbc05ff40b42ec24c134bebf71d5b37bb6 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 19:37:38 -0500 Subject: [PATCH 08/10] test: Update DatabaseHandler test to expect link field in responses Signed-off-by: David --- .../entity-feedback-backend/src/service/DatabaseHandler.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.test.ts b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.test.ts index c6cde95b3c..359ea0bb67 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.test.ts +++ b/workspaces/entity-feedback/plugins/entity-feedback-backend/src/service/DatabaseHandler.test.ts @@ -294,12 +294,14 @@ describe('DatabaseHandler', () => { response: 'asdf', comments: 'here is new feedback', consent: false, + link: null, }, { userRef: 'user:default/bar', response: 'noop', comments: 'here is different feedback', consent: true, + link: null, }, ]), ); From 51b5aead694b322d5933603cfb3f01127445d123 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 19:45:38 -0500 Subject: [PATCH 09/10] test: Add entityRouteRef to FeedbackResponseDialog test Signed-off-by: David --- .../FeedbackResponseDialog/FeedbackResponseDialog.test.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx index b1afc04d12..b3794599ff 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx +++ b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx @@ -16,6 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { ErrorApi, errorApiRef } from '@backstage/core-plugin-api'; +import { entityRouteRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { getByRole, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; @@ -48,6 +49,9 @@ describe('FeedbackResponseDialog', () => { onClose={jest.fn()} /> , + { + mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef }, + }, ); beforeEach(() => { From 178f1ab8a88d20fcb79df9077d6491899eeaa114 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 23 Dec 2025 19:53:19 -0500 Subject: [PATCH 10/10] test: Update FeedbackResponseDialog test to expect link field Signed-off-by: David --- .../FeedbackResponseDialog/FeedbackResponseDialog.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx index b3794599ff..7d3a6ba392 100644 --- a/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx +++ b/workspaces/entity-feedback/plugins/entity-feedback/src/components/FeedbackResponseDialog/FeedbackResponseDialog.test.tsx @@ -110,6 +110,7 @@ describe('FeedbackResponseDialog', () => { comments: '{"responseComments":{},"additionalComments":"test comments"}', consent: true, + link: '/catalog/default/component/test', response: 'incorrect,other', }, );