// @ts-ignore import CrudHelpers from './crud-helpers'; import { CrudStoreSchemaModel } from "../stores/types/CrudStoreModel"; const abstractSchema: CrudStoreSchemaModel = { type: "object", title: "TestAbstractProduct", properties: { $type: { enum: [ "Q42.Cms.Core.Services.Tests.Models.TestAbstractProduct, Q42.Cms.Core.Services.Tests", "Q42.Cms.Core.Services.Tests.Models.TestInstanceProduct, Q42.Cms.Core.Services.Tests" ], isHidden: false }, name: { format: "string-input", isHidden: false, required: true, title: "Name", type: "string" }, shopId: { format: "guid-input", isHidden: false, required: false, title: "ShopId", type: "string" } }, oneOf: [ { type: "object", title: "TestInstanceProduct", properties: { $type: { enum: ["Q42.Cms.Core.Services.Tests.Models.TestInstanceProduct, Q42.Cms.Core.Services.Tests"], isHidden: false }, extra: { format: "string-input", isHidden: false, required: false, title: "Name", type: "string" }, } } ] }; describe('Crud helpers', () => { it('should get a display field for schema properties', () => { const props1 = { "$type":{ "enum":["Q42.Cms.SampleCms.Domain.Items.Product, Q42.Cms.SampleCms.Domain"],"isHidden":true }, "id":{ "type":"string","format":"guid-input","title":"Id","required":true,"isHidden":true }, "created":{ "type":"string","format":"datetime-picker","title":"Datum aangemaakt","required":true,"isHidden":true }, "hasDynamicValueTags":{ "type":"boolean","title":"HasDynamicValueTags","required":true,"isHidden":true }, "name":{ "type":"string","format":"string-input","title":"Naam" }, "name2":{ "type":"string","format":"string-input","title":"Naam" }, "amount":{ "type":"integer","title":"Aantal","required":true }, "fallbackProductId":{ "$ref":"/items/product/schema","type":"string","title":"Fallback product","required":true }, "expirationDate":{ "type":"string","format":"datetime-picker","title":"Houdbaarheidsdatum","required":false }, "roleId":{ "$ref":"/items/role/schema","type":"string","title":"Fallback role","required":true } }; expect(CrudHelpers.getDisplayFieldForSchemaProperties(props1)).toEqual('name'); expect(CrudHelpers.getDisplayFieldForSchemaProperties(undefined)).toEqual(null); const props2 = { "$type":{ "enum":["Q42.Cms.SampleCms.Domain.Items.Product, Q42.Cms.SampleCms.Domain"],"isHidden":true }, "id":{ "type":"string","format":"guid-input","title":"Id","required":true,"isHidden":true }, "created":{ "type":"string","format":"datetime-picker","title":"Datum aangemaakt","required":true,"isHidden":true }, "hasDynamicValueTags":{ "type":"boolean","title":"HasDynamicValueTags","required":true,"isHidden":true }, "amount":{ "type":"integer","title":"Aantal","required":true }, "fallbackProductId":{ "$ref":"/items/product/schema","type":"string","title":"Fallback product","required":true }, "expirationDate":{ "type":"string","format":"datetime-picker","title":"Houdbaarheidsdatum","required":false }, "roleId":{ "$ref":"/items/role/schema","type":"string","title":"Fallback role","required":true } }; expect(CrudHelpers.getDisplayFieldForSchemaProperties(props2)).toEqual('id'); }); it('should get the store name for a reference', () => { expect(CrudHelpers.getStoreNameForReference('/items/role/schema')).toEqual('role'); expect(CrudHelpers.getStoreNameForReference('foo')).toEqual(null); }); it('should get the display field value for a reference', () => { const store1 = { getters: { 'unittest/getItemByGuid': () => { return { foo: 'Foo', bar: 'Bar' } } }, state: { unittest: { schema: { properties: { "$type":{ "enum":["Q42.Cms.SampleCms.Domain.Items.Product, Q42.Cms.SampleCms.Domain"],"isHidden":true }, "id":{ "type":"string","format":"guid-input","title":"Id","required":true,"isHidden":true }, "created":{ "type":"string","format":"datetime-picker","title":"Datum aangemaakt","required":true,"isHidden":true }, "hasDynamicValueTags":{ "type":"boolean","title":"HasDynamicValueTags","required":true,"isHidden":true }, "foo":{ "type":"string","format":"string-input","title":"Naam" }, } } } }, dispatch: jest.fn() } expect(CrudHelpers.getDisplayFieldValueForReference(store1, '/items/unittest/schema', 'fake-guid')).toEqual('Foo'); expect(CrudHelpers.getDisplayFieldValueForReference(store1, '/items/foobar/schema', 'fake-guid2')).toEqual('fake-guid2'); expect(CrudHelpers.getDisplayFieldValueForReference(store1, 'foobar', 'fake-guid3')).toEqual('fake-guid3'); expect(store1.dispatch).toHaveBeenCalled(); }); it('should preselect a derived type as initial value for an abstract type', () => { const item = CrudHelpers.initialValues(abstractSchema); expect(item).not.toBeUndefined(); if (item != undefined) { expect(item.$type).toBe("Q42.Cms.Core.Services.Tests.Models.TestInstanceProduct, Q42.Cms.Core.Services.Tests"); } }); it('should include base properties in initial value', () => { const item = CrudHelpers.initialValues(abstractSchema); expect(item).toHaveProperty("name", ""); expect(item).toHaveProperty("shopId", undefined); }); it('should include extended properties in initial value', () => { const item = CrudHelpers.initialValues(abstractSchema); expect(item).toHaveProperty("extra", undefined); }); });