feat(web): las extensiones de cliente pueden ocultar campos y columnas y dejarlos de solo lectura (documentos y maestros)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-16 11:14:52 -05:00
1 parent f077a61d08
commit 8dc4a8eaab
20 files changed
+374 -38

No files matched your search

@@ -6,6 +6,7 @@ import { of } from 'rxjs';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { MasterFormPage } from './master-form.page';
import { BASE_MASTER_SCREENS } from './master-screens';
import { applyMasterExtensions } from './master-extensions';
const customer = (over: Record<string, unknown> = {}) => ({
'odata.etag': 'W/"3"',
@@ -257,4 +258,25 @@ describe('MasterFormPage', () => {
await tick();
expect(el().querySelector('.status')?.textContent).toContain('El registro no existe');
});
it('un campo oculto no aparece y uno de solo lectura se ve pero no se escribe', async () => {
const screen = applyMasterExtensions(BASE_MASTER_SCREENS, {
'/socios/clientes': { hideFields: ['Website'], readOnlyFields: ['EmailAddress'] },
}).find((s) => s.path === '/socios/clientes')!;
const route = { snapshot: { data: { screen, title: 'Cliente' }, paramMap: convertToParamMap({ key: 'C100' }) }, paramMap: of(convertToParamMap({ key: 'C100' })) };
await TestBed.configureTestingModule({
imports: [MasterFormPage],
providers: [provideRouter([]), provideHttpClient(), provideHttpClientTesting(), { provide: ActivatedRoute, useValue: route }],
}).compileComponents();
ctrl = TestBed.inject(HttpTestingController);
fixture = TestBed.createComponent(MasterFormPage);
await tick();
ctrl.expectOne('/api/sl/BusinessPartners/C100').flush(customer());
await tick();
expect(labels()).not.toContain('Sitio web');
const email = [...el().querySelectorAll<HTMLInputElement>('input')].find((i) => i.value === 'ventas@acme.cl')!;
expect(email.readOnly).toBe(true);
const phone = [...el().querySelectorAll<HTMLInputElement>('input')].find((i) => i.value === '2 2345 6789')!;
expect(phone.readOnly).toBe(false);
});
});