feat(web): resolver al salir del campo el socio y los códigos de línea escritos a mano
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4b35aa6bfd
commit
cafe4bc035
9 files changed
+232
-4
No files matched your search
@@ -299,4 +299,51 @@ describe('LinesGrid', () => {
|
||||
expect(q('tr.none').textContent).toContain('no tiene líneas');
|
||||
});
|
||||
});
|
||||
|
||||
describe('código escrito a mano', () => {
|
||||
it('busca el artículo y completa la descripción como al elegirlo', async () => {
|
||||
fixture.componentInstance.lines.set([{ ...newDocumentLine() }]);
|
||||
await tick();
|
||||
await edit(0, 0, 'A00001');
|
||||
const req = ctrl.expectOne((r) => r.url === '/api/sl/Items' && r.params.get('$filter') === "ItemCode eq 'A00001'");
|
||||
expect(req.request.params.get('$top')).toBe('1');
|
||||
req.flush({ value: [{ ItemCode: 'A00001', ItemName: 'IBM Infoprint 1312' }] });
|
||||
await tick();
|
||||
expect(lines()[0]).toMatchObject({ ItemCode: 'A00001', ItemDescription: 'IBM Infoprint 1312' });
|
||||
});
|
||||
|
||||
it('Enter y change sobre la misma celda hacen una sola consulta', async () => {
|
||||
fixture.componentInstance.lines.set([{ ...newDocumentLine() }]);
|
||||
await tick();
|
||||
const input = cell(0, 0);
|
||||
input.value = 'A00001';
|
||||
await key(0, 0, 'Enter');
|
||||
input.dispatchEvent(new Event('change'));
|
||||
await tick();
|
||||
ctrl.expectOne((r) => r.url === '/api/sl/Items').flush({ value: [{ ItemCode: 'A00001', ItemName: 'X' }] });
|
||||
});
|
||||
|
||||
it('si no existe, avisa y la celda vuelve a su valor', async () => {
|
||||
fixture.componentInstance.lines.set([{ ...newDocumentLine() }]);
|
||||
const notices: string[] = [];
|
||||
await tick();
|
||||
el.querySelector('sbo-lines-grid')!.dispatchEvent(new Event('x')); // sin efecto: solo asegura el DOM
|
||||
const grid = fixture.debugElement.query((d) => d.name === 'sbo-lines-grid').componentInstance as LinesGrid;
|
||||
grid.notice.subscribe((n) => notices.push(n));
|
||||
await edit(0, 0, 'NOEXISTE');
|
||||
ctrl.expectOne((r) => r.url === '/api/sl/Items').flush({ value: [] });
|
||||
await tick();
|
||||
expect(notices).toEqual(['No existe «NOEXISTE» en artículos.']);
|
||||
expect(cell(0, 0).value).toBe('');
|
||||
expect(lines()[0]['ItemCode']).toBe('');
|
||||
});
|
||||
|
||||
it('vaciar la celda no consulta: limpia el valor', async () => {
|
||||
fixture.componentInstance.lines.set([line('A1')]);
|
||||
await tick();
|
||||
await edit(0, 0, '');
|
||||
ctrl.expectNone((r) => r.url === '/api/sl/Items');
|
||||
expect(lines()[0]['ItemCode']).toBe('');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user