LP1983628: Add editor for item notes
[evergreen-equinox.git] / Open-ILS / src / eg2 / src / app / share / fm-editor / fm-editor.spec.ts
diff --git a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.spec.ts b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.spec.ts
new file mode 100644 (file)
index 0000000..5188408
--- /dev/null
@@ -0,0 +1,66 @@
+import { IdlService } from "@eg/core/idl.service";
+import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
+import { ToastService } from "@eg/share/toast/toast.service";
+import { FmRecordEditorComponent } from "./fm-editor.component"
+import { FormatService } from "@eg/core/format.service";
+import { OrgService } from "@eg/core/org.service";
+import { PcrudService } from "@eg/core/pcrud.service";
+import { waitForAsync } from "@angular/core/testing";
+import { of } from "rxjs";
+
+describe('FmRecordEditorComponent', () => {
+    let component: FmRecordEditorComponent;
+    const mockPcrud = jasmine.createSpyObj<PcrudService>(['retrieve']);
+    beforeEach(() => {
+        const mockModal = jasmine.createSpyObj<NgbModal>(['open']);
+        const mockIdl = jasmine.createSpyObj<IdlService>(['pkeyMatches', 'getClassSelector', 'sortIdlFields'], {classes: {
+            'mock': {
+                label: 'Mock Class',
+                fields: [
+                    {datatype: 'link', name: 'linked_field', class: 'linked'}
+                ]
+            },
+            'linked': {pkey: 'id'}
+        }});
+        mockIdl.pkeyMatches.and.returnValue(true);
+        mockIdl.getClassSelector.and.returnValue('label');
+        const mockToast = jasmine.createSpyObj<ToastService>(['success']);
+        const mockFormat = jasmine.createSpyObj<FormatService>([], {wsOrgTimezone: 'America/Los_Angeles'});
+        const mockOrg = jasmine.createSpyObj<OrgService>(['get']);
+        mockPcrud.retrieve.and.callFake((fmClass, pkey) => {
+            if (fmClass === 'mock') {
+                return of({
+                    a: [],
+                    classname: 'mock',
+                    _isfieldmapper: true,
+                    'linked_field': () => 456
+                });
+            } else {
+                return of({
+                    id: () => 456,
+                    label: () => 'My Config Value'
+                });
+            }
+        });
+
+        component = new FmRecordEditorComponent(
+            mockModal, mockIdl, mockToast, mockFormat, mockOrg, mockPcrud
+        );
+
+    })
+    describe('hidden fields', () => {
+        it('fetches only one row of linked values', waitForAsync(() => {
+            component.idlClass = 'mock';
+            component.readonlyFields = 'linked_field';
+            component.mode = 'update';
+            component.displayMode = 'inline';
+            component.recordId = 123;
+            component.ngOnInit();
+            // wait for ngOnInit to do its work
+            setTimeout(() => {
+                expect(mockPcrud.retrieve).toHaveBeenCalledWith('mock', 123);
+                expect(mockPcrud.retrieve).toHaveBeenCalledWith('linked', 456);
+            }, 100)
+        }));
+    });
+});