diff --git a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/VirtualizedTraceView.test.js b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/VirtualizedTraceView.test.js index f7fc949bcf..5b97658a9f 100644 --- a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/VirtualizedTraceView.test.js +++ b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/VirtualizedTraceView.test.js @@ -433,20 +433,38 @@ describe('', () => { }); describe('linksGetter()', () => { - let getLinksSpy; + const span = trace.spans[1]; + const key = span.tags[0].key; + const val = encodeURIComponent(span.tags[0].value); + const origLinkPatterns = [...getLinks.processedLinks]; - beforeAll(() => { - getLinksSpy = jest.spyOn(getLinks, 'default'); + beforeEach(() => { + getLinks.processedLinks.splice(0, getLinks.processedLinks.length); }); afterAll(() => { - getLinksSpy.mockRestore(); + getLinks.processedLinks.splice(0, getLinks.processedLinks.length); + getLinks.processedLinks.push(...origLinkPatterns); }); it('calls getLinks with expected params', () => { - const span = trace.spans[1]; - instance.linksGetter(span, span.tags, 0); - expect(getLinksSpy).toHaveBeenCalledWith(span, span.tags, 0, trace); + const linkPatterns = [ + { + key, + type: 'tags', + url: `http://example.com/?key1=#{${key}}&traceID=#{trace.traceID}&startTime=#{trace.startTime}`, + text: `For first link traceId is - #{trace.traceID}`, + }, + ].map(getLinks.processLinkPattern); + + getLinks.processedLinks.push(...linkPatterns); + + expect(instance.linksGetter(span, span.tags, 0)).toEqual([ + { + url: `http://example.com/?key1=${val}&traceID=${trace.traceID}&startTime=${trace.startTime}`, + text: `For first link traceId is - ${trace.traceID}`, + }, + ]); }); }); }); diff --git a/packages/jaeger-ui/src/model/link-patterns.test.js b/packages/jaeger-ui/src/model/link-patterns.test.js index 8aca800364..662466a0ee 100644 --- a/packages/jaeger-ui/src/model/link-patterns.test.js +++ b/packages/jaeger-ui/src/model/link-patterns.test.js @@ -310,7 +310,7 @@ describe('getParameterInTrace()', () => { }; it('returns an entry that is present', () => { - expect(getParameterInTrace('startTime', trace)).toEqual(trace.startTime); + expect(getParameterInTrace('startTime', trace)).toEqual({ key: 'startTime', value: trace.startTime }); }); it('returns undefined when the entry cannot be found', () => { diff --git a/packages/jaeger-ui/src/model/link-patterns.tsx b/packages/jaeger-ui/src/model/link-patterns.tsx index 3a3f51b18b..1ccebff248 100644 --- a/packages/jaeger-ui/src/model/link-patterns.tsx +++ b/packages/jaeger-ui/src/model/link-patterns.tsx @@ -127,7 +127,7 @@ export function getParameterInTrace(name: string, trace: Trace | undefined) { const key = name as keyof Trace; if (validTraceKeys.includes(key)) { - return trace[key]; + return { key, value: trace[key] }; } } @@ -146,11 +146,11 @@ export function computeTraceLink(linkPatterns: ProcessedLinkPattern[], trace: Tr .forEach(pattern => { const parameterValues: Record = {}; const allParameters = pattern.parameters.every(parameter => { - const val = getParameterInTrace(parameter, trace); - if (val) { + const traceKV = getParameterInTrace(parameter, trace); + if (traceKV) { // At this point is safe to access to trace object using parameter variable because // we validated parameter against validKeys, this implies that parameter a keyof Trace. - parameterValues[parameter] = val; + parameterValues[parameter] = traceKV.value; return true; } return false; @@ -191,9 +191,9 @@ export function computeLinks( let entry; if (parameter.startsWith('trace.')) { - const traceVal = getParameterInTrace(parameter.split('trace.')[1], trace); - if (traceVal) { - entry = { key: parameter, value: traceVal }; + const traceKV = getParameterInTrace(parameter.split('trace.')[1], trace); + if (traceKV) { + entry = traceKV; } } else { entry = getParameterInArray(parameter, items); @@ -243,7 +243,7 @@ export function createGetLinks(linkPatterns: ProcessedLinkPattern[], cache: Weak }; } -const processedLinks: ProcessedLinkPattern[] = (getConfigValue('linkPatterns') || []) +export const processedLinks: ProcessedLinkPattern[] = (getConfigValue('linkPatterns') || []) .map(processLinkPattern) .filter(Boolean);