fix(issues): Escape reserved tag keys in tag drawer value links
Clicking a value in the tag details drawer built the search as `key:"value"` with the raw tag key. For a custom tag named after a reserved search key, like `project_id`, the events page searched the built-in field instead of the tag and errored. Escape the key with `escapeIssueTagKey`, which the value actions menu in the same file already uses, so the link becomes `tags[project_id]:"value"`.
This commit is contained in:
1 parent
916dae8061
commit
42fa6c159c
2 files changed
+47
-1
No files matched your search
@@ -437,6 +437,52 @@ describe('TagDetailsDrawerContent', () => {
|
|||||||
expect(await screen.findByText('id:123')).toBeInTheDocument();
|
expect(await screen.findByText('id:123')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('escapes reserved tag keys in the tag value link', async () => {
|
||||||
|
const projectIdTag: TagWithTopValues = {
|
||||||
|
key: 'project_id',
|
||||||
|
name: 'Project_id',
|
||||||
|
totalValues: 3,
|
||||||
|
uniqueValues: 1,
|
||||||
|
topValues: [
|
||||||
|
{
|
||||||
|
count: 3,
|
||||||
|
name: '42',
|
||||||
|
value: '42',
|
||||||
|
key: 'project_id',
|
||||||
|
lastSeen: '2024-01-01T00:00:00Z',
|
||||||
|
firstSeen: '2024-01-01T00:00:00Z',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
MockApiClient.addMockResponse({
|
||||||
|
url: '/organizations/org-slug/issues/1/tags/project_id/',
|
||||||
|
body: projectIdTag,
|
||||||
|
});
|
||||||
|
MockApiClient.addMockResponse({
|
||||||
|
url: '/organizations/org-slug/issues/1/tags/project_id/values/',
|
||||||
|
body: [
|
||||||
|
{
|
||||||
|
count: 3,
|
||||||
|
firstSeen: '2024-01-01T00:00:00Z',
|
||||||
|
lastSeen: '2024-01-01T00:00:00Z',
|
||||||
|
name: '42',
|
||||||
|
value: '42',
|
||||||
|
key: 'project_id',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
render(<TagDetailsDrawerContent group={group} />, {
|
||||||
|
initialRouterConfig: makeInitialRouterConfig('project_id'),
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(await screen.findByRole('link', {name: '42'})).toHaveAttribute(
|
||||||
|
'href',
|
||||||
|
'/organizations/org-slug/issues/1/events/recommended/?query=tags%5Bproject_id%5D%3A%2242%22'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('renders empty tag value label and hides copy action', async () => {
|
it('renders empty tag value label and hides copy action', async () => {
|
||||||
const makeTopValue = (value: string, count: number) => ({
|
const makeTopValue = (value: string, count: number) => ({
|
||||||
count,
|
count,
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ function TagDetailsRow({
|
|||||||
query: undefined,
|
query: undefined,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
query: tagValue.query || `${key}:"${tagValue.value}"`,
|
query: tagValue.query || `${escapeIssueTagKey(key)}:"${tagValue.value}"`,
|
||||||
};
|
};
|
||||||
|
|
||||||
const allEventsLocation = {
|
const allEventsLocation = {
|
||||||
|
|||||||
Reference in new issue
Block a user