Skip to content

Commit

Permalink
[STRATCONN-4203] Add new operator "number_not_equals" for number (#2457)
Browse files Browse the repository at this point in the history
* Addition of new operator number_not_equals

* Fixed Event Traits and Context and added a unit test cases

---------

Co-authored-by: Gaurav Kochar <[email protected]>
  • Loading branch information
Innovative-GauravKochar and Gaurav Kochar authored Oct 1, 2024
1 parent a7b5504 commit 07086e1
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -211,3 +211,43 @@ test('should handle ast with nested (dot-delimited) and irregular properties', (

expect(generateFql(ast)).toEqual('properties.foo.bar.baz\\ alp.zaz = "hello"')
})

test('should handle number_not_equals ast', () => {
const ast: Subscription = {
type: 'group',
operator: 'and',
children: [
{
type: 'event-trait',
name: 'value',
operator: 'number_not_equals',
value: '456.0'
}
]
}

expect(generateFql(ast)).toEqual('traits.value != 456')
})

test('should handle both not equal (!=) and number_not_equals ast', () => {
const ast: Subscription = {
type: 'group',
operator: 'and',
children: [
{
type: 'event-property',
name: 'value',
operator: 'number_not_equals',
value: '123'
},
{
type: 'event-trait',
name: 'label',
operator: '!=',
value: '456'
}
]
}

expect(generateFql(ast)).toEqual('properties.value != 123 and traits.label != "456"')
})
22 changes: 22 additions & 0 deletions packages/destination-subscriptions/src/__tests__/validate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -740,3 +740,25 @@ test('event type = "track" and event = "Page Viewed" or event = "Order Completed
})
).toEqual(true)
})

test('operators - number_not_equals (numbers)', () => {
for (const value of ['456', 456]) {
const ast = {
type: 'group',
operator: 'and',
children: [
{
type: 'event-property',
name: 'value',
operator: 'number_not_equals',
value
}
]
}

expect(validate(ast, { properties: { value: 123 } })).toEqual(true)

expect(validate(ast, { properties: { value: '456' } })).toEqual(false)
expect(validate(ast, { properties: { value: 0 } })).toEqual(true)
}
})
2 changes: 2 additions & 0 deletions packages/destination-subscriptions/src/generate-fql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ const fqlExpression = (name: string, operator: Operator, value: string | boolean
return `${name} ${operator} ${Number(value)}`
case 'number_equals':
return `${name} = ${Number(value)}`
case 'number_not_equals':
return `${name} != ${Number(value)}`
default:
return `${name} ${operator} ${stringifyValue(value)}`
}
Expand Down
22 changes: 22 additions & 0 deletions packages/destination-subscriptions/src/parse-fql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ const parse = (tokens: Token[]): Condition => {
const isExists = operatorToken.value === '!=' && valueToken.value === 'null'
const isNotExists = operatorToken.value === '=' && valueToken.value === 'null'
const isNumberEquals = operatorToken.value === '=' && valueToken.type === 'number'
const isNumberNotEquals = operatorToken.value === '!=' && valueToken.type === 'number'

if (conditionType === 'event') {
nodes.push({
Expand Down Expand Up @@ -284,6 +285,13 @@ const parse = (tokens: Token[]): Condition => {
operator: 'number_equals',
value: getTokenValue(valueToken)
})
} else if (isNumberNotEquals) {
nodes.push({
type: 'event-property',
name: token.value.replace(/^(properties)\./, ''),
operator: 'number_not_equals',
value: getTokenValue(valueToken)
})
} else {
nodes.push({
type: 'event-property',
Expand Down Expand Up @@ -324,6 +332,13 @@ const parse = (tokens: Token[]): Condition => {
operator: 'number_equals',
value: getTokenValue(valueToken)
})
} else if (isNumberNotEquals) {
nodes.push({
type: 'event-trait',
name: token.value.replace(/^(traits)\./, ''),
operator: 'number_not_equals',
value: getTokenValue(valueToken)
})
} else {
nodes.push({
type: 'event-trait',
Expand Down Expand Up @@ -364,6 +379,13 @@ const parse = (tokens: Token[]): Condition => {
operator: 'number_equals',
value: getTokenValue(valueToken)
})
} else if (isNumberNotEquals) {
nodes.push({
type: 'event-context',
name: token.value.replace(/^(context)\./, ''),
operator: 'number_not_equals',
value: getTokenValue(valueToken)
})
} else {
nodes.push({
type: 'event-context',
Expand Down
1 change: 1 addition & 0 deletions packages/destination-subscriptions/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ export type Operator =
| 'not_exists'
| 'is_true'
| 'is_false'
| 'number_not_equals'

export type ConditionType =
| 'group'
Expand Down
2 changes: 2 additions & 0 deletions packages/destination-subscriptions/src/validate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ const validateValue = (actual: unknown, operator: Operator, expected?: string |
return typeof actual === 'number' && Number(actual) === Number(expected)
case '!=':
return actual !== String(expected)
case 'number_not_equals':
return typeof actual === 'number' && Number(actual) !== Number(expected)
case '<':
return typeof actual === 'number' && Number(actual) < Number(expected)
case '<=':
Expand Down

0 comments on commit 07086e1

Please sign in to comment.