feat(round-robin): reparto solo con el equipo 'vendedores' de Monday
- obtenerVendedores ahora lee el team de Monday (MONDAY_RR_TEAM, default 'vendedores') con cache de 1 h; MONDAY_RR_USER_IDS queda como override manual. - Escrituras a columnas status resuelven el label real sin importar mayusculas: si renombran labels en la UI de Monday (paso con NUEVO→Nuevo) el API sigue escribiendo en vez de tronar con 502. - mapearLead: un status nunca escrito (value null) se lee como vacio; Monday regresaba el label default del tablero como texto y el round-robin creia que el lead estaba descartado.
This commit is contained in:
@@ -370,5 +370,50 @@ describe('MondayService', () => {
|
||||
const leads = await crearServicio().getLeads()
|
||||
expect(leads.map((l) => l.edad)).toEqual([null, null])
|
||||
})
|
||||
|
||||
it('estado con value null (default del tablero, nunca escrito) se lee como vacío', async () => {
|
||||
mockearFetch((body) => {
|
||||
if (body.query.includes('columns')) return respuestaOk({ boards: [{ columns: COLUMNAS_LEADS_BASE }] })
|
||||
return respuestaOk({
|
||||
boards: [
|
||||
{
|
||||
items_page: {
|
||||
cursor: null,
|
||||
items: [
|
||||
// text trae el label default del board, pero value es null: no hay estado real
|
||||
{ ...itemLead('1'), column_values: [{ id: 'people_v', text: '', value: null }, { id: 'color_e', text: 'Descartado', value: null }] },
|
||||
// estado real escrito: value presente → se usa text
|
||||
{ ...itemLead('2'), column_values: [{ id: 'people_v', text: '', value: null }, { id: 'color_e', text: 'Nuevo', value: '{"index":1}' }] },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
})
|
||||
|
||||
const leads = await crearServicio().getLeads()
|
||||
expect(leads.map((l) => l.estado)).toEqual(['', 'Nuevo'])
|
||||
})
|
||||
})
|
||||
|
||||
describe('escrituras status tolerantes a case (rename de labels en la UI)', () => {
|
||||
it('cambiarValorColumna resuelve el label real sin importar mayúsculas', async () => {
|
||||
const llamadas = mockearFetch((body) => {
|
||||
if (body.query.includes('settings_str')) {
|
||||
return respuestaOk({
|
||||
boards: [{ columns: [{ id: 'color_e', title: 'Estado', settings_str: '{"labels":{"1":"Nuevo","5":"Descartado"}}' }] }],
|
||||
})
|
||||
}
|
||||
if (body.query.includes('columns')) {
|
||||
return respuestaOk({ boards: [{ columns: [{ id: 'color_e', title: 'Estado', type: 'status' }] }] })
|
||||
}
|
||||
return respuestaOk({ change_column_value: { id: 'it-1' } })
|
||||
})
|
||||
|
||||
await crearServicio().cambiarValorColumna('b1', 'it-1', 'Estado', 'NUEVO')
|
||||
|
||||
const mutacion = llamadas.find((l) => l.body.query.includes('change_column_value'))
|
||||
expect(JSON.parse(String(mutacion?.body.variables['value']))).toEqual({ label: 'Nuevo' })
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user