1 import { IdlService } from '@eg/core/idl.service';
2 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
3 import { ToastService } from '@eg/share/toast/toast.service';
4 import { FmRecordEditorComponent } from './fm-editor.component';
5 import { FormatService } from '@eg/core/format.service';
6 import { OrgService } from '@eg/core/org.service';
7 import { PcrudService } from '@eg/core/pcrud.service';
8 import { waitForAsync } from '@angular/core/testing';
9 import { of } from 'rxjs';
11 describe('FmRecordEditorComponent', () => {
12 let component: FmRecordEditorComponent;
13 const mockPcrud = jasmine.createSpyObj<PcrudService>(['retrieve']);
15 const mockModal = jasmine.createSpyObj<NgbModal>(['open']);
16 const mockIdl = jasmine.createSpyObj<IdlService>(['pkeyMatches', 'getClassSelector', 'sortIdlFields'], {classes: {
20 {datatype: 'link', name: 'linked_field', class: 'linked'}
23 'linked': {pkey: 'id'}
25 mockIdl.pkeyMatches.and.returnValue(true);
26 mockIdl.getClassSelector.and.returnValue('label');
27 const mockToast = jasmine.createSpyObj<ToastService>(['success']);
28 const mockFormat = jasmine.createSpyObj<FormatService>([], {wsOrgTimezone: 'America/Los_Angeles'});
29 const mockOrg = jasmine.createSpyObj<OrgService>(['get']);
30 mockPcrud.retrieve.and.callFake((fmClass, pkey) => {
31 if (fmClass === 'mock') {
36 'linked_field': () => 456
41 label: () => 'My Config Value'
46 component = new FmRecordEditorComponent(
47 mockModal, mockIdl, mockToast, mockFormat, mockOrg, mockPcrud
51 describe('hidden fields', () => {
52 it('fetches only one row of linked values', waitForAsync(() => {
53 component.idlClass = 'mock';
54 component.readonlyFields = 'linked_field';
55 component.mode = 'update';
56 component.displayMode = 'inline';
57 component.recordId = 123;
59 // wait for ngOnInit to do its work
61 expect(mockPcrud.retrieve).toHaveBeenCalledWith('mock', 123);
62 expect(mockPcrud.retrieve).toHaveBeenCalledWith('linked', 456);