Alerting: fixes rewiring unrelated reduce and resample expressions (#43174)

This commit is contained in:
Gilles De Mey 2021-12-17 14:46:55 +01:00 committed by GitHub
parent acb1f54128
commit db3cc738d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 2 deletions

View File

@ -156,6 +156,35 @@ describe('rule-editor', () => {
expect(rewiredQueries[1]).toEqual(queries[1]);
expect(rewiredQueries[2]).toEqual(queries[2]);
});
it('should not rewire non-referencing expressions', () => {
const dataSource1 = { ...dataSource, refId: 'Q1' };
const dataSource2 = { ...dataSource, refId: 'Q2' };
const condition1 = {
...classicCondition,
refId: 'A',
model: {
...classicCondition.model,
conditions: [
{
...classicCondition.model.conditions[0],
query: { params: ['Q1'] },
},
],
},
};
const condition2 = { ...reduceExpression, refId: 'B', model: { ...reduceExpression.model, expression: 'Q1' } };
const condition3 = { ...mathExpression, refId: 'C', model: { ...mathExpression.model, expression: '${Q1}' } };
const queries: AlertQuery[] = [dataSource1, dataSource2, condition1, condition2, condition3];
const rewiredQueries = queriesWithUpdatedReferences(queries, 'Q2', 'Q3');
expect(rewiredQueries[0]).toEqual(queries[0]);
expect(rewiredQueries[1]).toEqual(queries[1]);
expect(rewiredQueries[2]).toEqual(queries[2]);
expect(rewiredQueries[3]).toEqual(queries[3]);
expect(rewiredQueries[4]).toEqual(queries[4]);
});
});
describe('updateMathExpressionRefs', () => {
@ -165,5 +194,8 @@ describe('rule-editor', () => {
it('should rewire refs with brackets', () => {
expect(updateMathExpressionRefs('abs(${Foo}) + $Foo', 'Foo', 'Bar')).toBe('abs(${Bar}) + ${Bar}');
});
it('should not rewire refs with partial variable match', () => {
expect(updateMathExpressionRefs('$A3 + $B', 'A', 'C')).toBe('$A3 + $B');
});
});
});

View File

@ -31,11 +31,13 @@ export function queriesWithUpdatedReferences(
}
if (isResampleExpression || isReduceExpression) {
const isReferencing = query.model.expression === previousRefId;
return {
...query,
model: {
...query.model,
expression: newRefId,
expression: isReferencing ? newRefId : query.model.expression,
},
};
}
@ -57,7 +59,7 @@ export function queriesWithUpdatedReferences(
}
export function updateMathExpressionRefs(expression: string, previousRefId: string, newRefId: string): string {
const oldExpression = new RegExp('\\${?' + previousRefId + '}?', 'gm');
const oldExpression = new RegExp('(\\$' + previousRefId + '\\b)|(\\${' + previousRefId + '})', 'gm');
const newExpression = '${' + newRefId + '}';
return expression.replace(oldExpression, newExpression);