Deduplicate top campaign clients by name
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m54s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m54s
This commit is contained in:
@@ -48,7 +48,8 @@ test('getTopClientsForCampaign returns top clients for an explicit date range',
|
||||
total_gasto: '1234.50',
|
||||
total_comprado: '18',
|
||||
total_pedidos: 4,
|
||||
ultima_compra: '2026-07-27'
|
||||
ultima_compra: '2026-07-27',
|
||||
telefones: ['5516999999901', '5516999999902']
|
||||
}
|
||||
]
|
||||
}), async ({ getTopClientsForCampaign }, queries) => {
|
||||
@@ -68,12 +69,14 @@ test('getTopClientsForCampaign returns top clients for an explicit date range',
|
||||
total_gasto: 1234.5,
|
||||
total_comprado: 18,
|
||||
total_pedidos: 4,
|
||||
ultima_compra: '2026-07-27'
|
||||
ultima_compra: '2026-07-27',
|
||||
telefones: ['5516999999901', '5516999999902']
|
||||
});
|
||||
|
||||
assert.equal(queries.length, 1);
|
||||
assert.deepEqual(queries[0].params, ['2026-06-28', '2026-07-27', 1000]);
|
||||
assert.match(queries[0].sql, /customer_key NOT LIKE 'name:%'/);
|
||||
assert.match(queries[0].sql, /GROUP BY COALESCE\(canonical_customer_name, whatsapp_phone\)/);
|
||||
assert.match(queries[0].sql, /ARRAY_AGG\(DISTINCT whatsapp_phone\)/);
|
||||
assert.match(queries[0].sql, /ORDER BY total_gasto DESC/);
|
||||
});
|
||||
});
|
||||
@@ -91,3 +94,17 @@ test('getTopClientsForCampaign derives an inclusive 30 day range from the end da
|
||||
assert.deepEqual(queries[0].params, ['2026-06-28', '2026-07-27', 1000]);
|
||||
});
|
||||
});
|
||||
|
||||
test('getTopClientsForCampaign normalizes phones and ranks one row per canonical client name', async () => {
|
||||
await withCampaignService(async () => ({ rows: [] }), async ({ getTopClientsForCampaign }, queries) => {
|
||||
await getTopClientsForCampaign({
|
||||
days: '30',
|
||||
end: '2026-07-27'
|
||||
});
|
||||
|
||||
assert.match(queries[0].sql, /regexp_replace\(COALESCE\(cliente_fone, ''\), '\\D', '', 'g'\)/);
|
||||
assert.match(queries[0].sql, /WHEN length\(/);
|
||||
assert.match(queries[0].sql, /'55' \|\|/);
|
||||
assert.match(queries[0].sql, /canonical_customer_name/);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user