@itwin/presentation-core-interop 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.json +8 -0
- package/.nycrc +14 -0
- package/CHANGELOG.md +12 -0
- package/LICENSE.md +9 -0
- package/README.md +99 -0
- package/api/presentation-core-interop.api.md +38 -0
- package/api/presentation-core-interop.exports.csv +7 -0
- package/eslint.config.js +14 -0
- package/lib/cjs/core-interop/Formatting.d.ts +44 -0
- package/lib/cjs/core-interop/Formatting.d.ts.map +1 -0
- package/lib/cjs/core-interop/Formatting.js +147 -0
- package/lib/cjs/core-interop/Formatting.js.map +1 -0
- package/lib/cjs/core-interop/Logging.d.ts +32 -0
- package/lib/cjs/core-interop/Logging.d.ts.map +1 -0
- package/lib/cjs/core-interop/Logging.js +47 -0
- package/lib/cjs/core-interop/Logging.js.map +1 -0
- package/lib/cjs/core-interop/Metadata.d.ts +28 -0
- package/lib/cjs/core-interop/Metadata.d.ts.map +1 -0
- package/lib/cjs/core-interop/Metadata.js +51 -0
- package/lib/cjs/core-interop/Metadata.js.map +1 -0
- package/lib/cjs/core-interop/MetadataInternal.d.ts +9 -0
- package/lib/cjs/core-interop/MetadataInternal.d.ts.map +1 -0
- package/lib/cjs/core-interop/MetadataInternal.js +370 -0
- package/lib/cjs/core-interop/MetadataInternal.js.map +1 -0
- package/lib/cjs/core-interop/QueryExecutor.d.ts +31 -0
- package/lib/cjs/core-interop/QueryExecutor.d.ts.map +1 -0
- package/lib/cjs/core-interop/QueryExecutor.js +112 -0
- package/lib/cjs/core-interop/QueryExecutor.js.map +1 -0
- package/lib/cjs/core-interop/Transactions.d.ts +70 -0
- package/lib/cjs/core-interop/Transactions.d.ts.map +1 -0
- package/lib/cjs/core-interop/Transactions.js +61 -0
- package/lib/cjs/core-interop/Transactions.js.map +1 -0
- package/lib/cjs/presentation-core-interop.d.ts +6 -0
- package/lib/cjs/presentation-core-interop.d.ts.map +1 -0
- package/lib/cjs/presentation-core-interop.js +18 -0
- package/lib/cjs/presentation-core-interop.js.map +1 -0
- package/lib/cjs/test/Formatting.test.d.ts +2 -0
- package/lib/cjs/test/Formatting.test.d.ts.map +1 -0
- package/lib/cjs/test/Formatting.test.js +282 -0
- package/lib/cjs/test/Formatting.test.js.map +1 -0
- package/lib/cjs/test/Logging.test.d.ts +2 -0
- package/lib/cjs/test/Logging.test.d.ts.map +1 -0
- package/lib/cjs/test/Logging.test.js +57 -0
- package/lib/cjs/test/Logging.test.js.map +1 -0
- package/lib/cjs/test/Metadata.test.d.ts +2 -0
- package/lib/cjs/test/Metadata.test.d.ts.map +1 -0
- package/lib/cjs/test/Metadata.test.js +676 -0
- package/lib/cjs/test/Metadata.test.js.map +1 -0
- package/lib/cjs/test/QueryExecutor.test.d.ts +2 -0
- package/lib/cjs/test/QueryExecutor.test.d.ts.map +1 -0
- package/lib/cjs/test/QueryExecutor.test.js +178 -0
- package/lib/cjs/test/QueryExecutor.test.js.map +1 -0
- package/lib/cjs/test/Transactions.test.d.ts +2 -0
- package/lib/cjs/test/Transactions.test.d.ts.map +1 -0
- package/lib/cjs/test/Transactions.test.js +73 -0
- package/lib/cjs/test/Transactions.test.js.map +1 -0
- package/lib/cjs/test/index.d.ts +2 -0
- package/lib/cjs/test/index.d.ts.map +1 -0
- package/lib/cjs/test/index.js +43 -0
- package/lib/cjs/test/index.js.map +1 -0
- package/lib/esm/core-interop/Formatting.d.ts +44 -0
- package/lib/esm/core-interop/Formatting.d.ts.map +1 -0
- package/lib/esm/core-interop/Formatting.js +143 -0
- package/lib/esm/core-interop/Formatting.js.map +1 -0
- package/lib/esm/core-interop/Logging.d.ts +32 -0
- package/lib/esm/core-interop/Logging.d.ts.map +1 -0
- package/lib/esm/core-interop/Logging.js +43 -0
- package/lib/esm/core-interop/Logging.js.map +1 -0
- package/lib/esm/core-interop/Metadata.d.ts +28 -0
- package/lib/esm/core-interop/Metadata.d.ts.map +1 -0
- package/lib/esm/core-interop/Metadata.js +47 -0
- package/lib/esm/core-interop/Metadata.js.map +1 -0
- package/lib/esm/core-interop/MetadataInternal.d.ts +9 -0
- package/lib/esm/core-interop/MetadataInternal.d.ts.map +1 -0
- package/lib/esm/core-interop/MetadataInternal.js +364 -0
- package/lib/esm/core-interop/MetadataInternal.js.map +1 -0
- package/lib/esm/core-interop/QueryExecutor.d.ts +31 -0
- package/lib/esm/core-interop/QueryExecutor.d.ts.map +1 -0
- package/lib/esm/core-interop/QueryExecutor.js +108 -0
- package/lib/esm/core-interop/QueryExecutor.js.map +1 -0
- package/lib/esm/core-interop/Transactions.d.ts +70 -0
- package/lib/esm/core-interop/Transactions.d.ts.map +1 -0
- package/lib/esm/core-interop/Transactions.js +57 -0
- package/lib/esm/core-interop/Transactions.js.map +1 -0
- package/lib/esm/presentation-core-interop.d.ts +6 -0
- package/lib/esm/presentation-core-interop.d.ts.map +1 -0
- package/lib/esm/presentation-core-interop.js +10 -0
- package/lib/esm/presentation-core-interop.js.map +1 -0
- package/lib/esm/test/Formatting.test.d.ts +2 -0
- package/lib/esm/test/Formatting.test.d.ts.map +1 -0
- package/lib/esm/test/Formatting.test.js +277 -0
- package/lib/esm/test/Formatting.test.js.map +1 -0
- package/lib/esm/test/Logging.test.d.ts +2 -0
- package/lib/esm/test/Logging.test.d.ts.map +1 -0
- package/lib/esm/test/Logging.test.js +52 -0
- package/lib/esm/test/Logging.test.js.map +1 -0
- package/lib/esm/test/Metadata.test.d.ts +2 -0
- package/lib/esm/test/Metadata.test.d.ts.map +1 -0
- package/lib/esm/test/Metadata.test.js +671 -0
- package/lib/esm/test/Metadata.test.js.map +1 -0
- package/lib/esm/test/QueryExecutor.test.d.ts +2 -0
- package/lib/esm/test/QueryExecutor.test.d.ts.map +1 -0
- package/lib/esm/test/QueryExecutor.test.js +173 -0
- package/lib/esm/test/QueryExecutor.test.js.map +1 -0
- package/lib/esm/test/Transactions.test.d.ts +2 -0
- package/lib/esm/test/Transactions.test.d.ts.map +1 -0
- package/lib/esm/test/Transactions.test.js +68 -0
- package/lib/esm/test/Transactions.test.js.map +1 -0
- package/lib/esm/test/index.d.ts +2 -0
- package/lib/esm/test/index.d.ts.map +1 -0
- package/lib/esm/test/index.js +15 -0
- package/lib/esm/test/index.js.map +1 -0
- package/package.json +72 -0
- package/src/core-interop/Formatting.ts +194 -0
- package/src/core-interop/Logging.ts +58 -0
- package/src/core-interop/Metadata.ts +56 -0
- package/src/core-interop/MetadataInternal.ts +413 -0
- package/src/core-interop/QueryExecutor.ts +122 -0
- package/src/core-interop/Transactions.ts +92 -0
- package/src/presentation-core-interop.ts +10 -0
- package/src/test/Formatting.test.ts +358 -0
- package/src/test/Logging.test.ts +59 -0
- package/src/test/Metadata.test.ts +776 -0
- package/src/test/QueryExecutor.test.ts +217 -0
- package/src/test/Transactions.test.ts +74 -0
- package/src/test/index.ts +17 -0
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.esm.json +7 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metadata.test.js","sourceRoot":"","sources":["../../../src/test/Metadata.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport sinon from \"sinon\";\nimport { assert } from \"@itwin/core-bentley\";\nimport {\n ECClass as CoreClass,\n EnumerationArrayProperty as CoreEnumerationArrayProperty,\n EnumerationProperty as CoreEnumerationProperty,\n Enumerator as CoreEnumerator,\n NavigationProperty as CoreNavigationProperty,\n PrimitiveArrayProperty as CorePrimitiveArrayProperty,\n PrimitiveProperty as CorePrimitiveProperty,\n Schema as CoreSchema,\n StructArrayProperty as CoreStructArrayProperty,\n StructProperty as CoreStructProperty,\n PrimitiveType,\n RelationshipMultiplicity,\n SchemaContext,\n SchemaItemType,\n SchemaKey,\n StrengthDirection,\n} from \"@itwin/ecschema-metadata\";\nimport { EC } from \"@itwin/presentation-shared\";\nimport { createECSchemaProvider } from \"../core-interop/Metadata\";\nimport { createECClass, createECProperty, createECSchema } from \"../core-interop/MetadataInternal\";\n\ndescribe(\"createECSchemaProvider\", () => {\n describe(\"getSchema\", () => {\n it(\"returns schema from schema context\", async () => {\n const matchSchemaName = sinon.match((key: SchemaKey) => key.compareByName(\"x\"));\n const schemaContext = {\n getSchema: sinon\n .stub<[SchemaKey], CoreSchema>()\n .withArgs(matchSchemaName)\n .resolves({\n name: \"y\",\n } as unknown as CoreSchema),\n };\n\n const provider = createECSchemaProvider(schemaContext as unknown as SchemaContext);\n const schema = await provider.getSchema(\"x\");\n assert(schema !== undefined);\n\n expect(schemaContext.getSchema).to.be.calledOnceWith(matchSchemaName);\n expect(schema.name).to.eq(\"y\");\n expect(typeof schema.getClass === \"function\").to.be.true;\n });\n\n // a test for our workaround for https://github.com/iTwin/itwinjs-core/issues/6542\n it(\"handles duplicate schema in cache error\", async () => {\n const schemaContext = {\n getSchema: sinon.stub<[SchemaKey], CoreSchema>(),\n };\n schemaContext.getSchema.onFirstCall().resolves({ name: \"x\" });\n schemaContext.getSchema.onSecondCall().rejects(new Error(\"The schema, x.01.02.03, already exists within this cache\"));\n schemaContext.getSchema.onThirdCall().resolves({ name: \"x\" });\n\n const provider = createECSchemaProvider(schemaContext as unknown as SchemaContext);\n await Promise.all([provider.getSchema(\"x\"), provider.getSchema(\"x\")]);\n\n expect(schemaContext.getSchema).to.be.calledThrice;\n });\n\n it(\"re-throws SchemaContext errors\", async () => {\n const schemaContext = {\n getSchema: sinon.stub<[SchemaKey], CoreSchema>(),\n };\n schemaContext.getSchema.rejects(new Error(\"Unknown error\"));\n\n const provider = createECSchemaProvider(schemaContext as unknown as SchemaContext);\n await expect(provider.getSchema(\"x\")).to.eventually.be.rejected;\n expect(schemaContext.getSchema).to.be.calledOnce;\n });\n\n it(\"returns undefined from schema context\", async () => {\n const matchSchemaName = sinon.match((key: SchemaKey) => key.compareByName(\"x\"));\n const schemaContext = {\n getSchema: sinon.stub().resolves(undefined),\n };\n\n const provider = createECSchemaProvider(schemaContext);\n const schema = await provider.getSchema(\"x\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(schemaContext.getSchema).to.be.calledOnceWith(matchSchemaName);\n expect(schema).to.be.undefined;\n });\n });\n});\n\ndescribe(\"createECSchema\", () => {\n describe(\"getClass\", () => {\n it(\"returns class from core schema\", async () => {\n const coreSchema = {\n name: \"s\",\n getItem: sinon.stub().resolves({\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.EntityClass,\n }),\n } as unknown as CoreSchema;\n\n const schema = createECSchema(coreSchema);\n const result = await schema.getClass(\"c\");\n assert(result !== undefined);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreSchema.getItem).to.be.calledOnceWith(\"c\");\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"returns undefined from core schema\", async () => {\n const coreSchema = {\n name: \"s\",\n getItem: sinon.stub().resolves(undefined),\n } as unknown as CoreSchema;\n\n const schema = createECSchema(coreSchema);\n const result = await schema.getClass(\"c\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreSchema.getItem).to.be.calledOnceWith(\"c\");\n expect(result).to.be.undefined;\n });\n });\n});\n\ndescribe(\"createECClass\", () => {\n const schema: EC.Schema = {\n name: \"s\",\n async getClass() {\n return undefined;\n },\n };\n\n it(\"creates class using schema from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schema: { name: \"core-schema\" },\n } as unknown as CoreClass;\n const result = createECClass(coreClass);\n expect(result.schema.name).to.eq(\"core-schema\");\n });\n\n it(\"creates entity class from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.EntityClass,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.true;\n expect(result.isRelationshipClass()).to.be.false;\n expect(result.isStructClass()).to.be.false;\n expect(result.isMixin()).to.be.false;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"creates relationship class from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.RelationshipClass,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.false;\n expect(result.isRelationshipClass()).to.be.true;\n expect(result.isStructClass()).to.be.false;\n expect(result.isMixin()).to.be.false;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"creates struct class from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.StructClass,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.false;\n expect(result.isRelationshipClass()).to.be.false;\n expect(result.isStructClass()).to.be.true;\n expect(result.isMixin()).to.be.false;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"creates mixin from core class\", async () => {\n const coreClass = {\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n schemaItemType: SchemaItemType.Mixin,\n } as unknown as CoreClass;\n const result = createECClass(coreClass, schema);\n expect(result.isEntityClass()).to.be.false;\n expect(result.isRelationshipClass()).to.be.false;\n expect(result.isStructClass()).to.be.false;\n expect(result.isMixin()).to.be.true;\n expect(result.schema.name).to.eq(\"s\");\n expect(result.fullName).to.eq(\"s.c\");\n expect(result.name).to.eq(\"c\");\n expect(result.label).to.eq(\"C\");\n expect(typeof result.is === \"function\").to.be.true;\n });\n\n it(\"throws when creating class from non-class core schema item\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.Constant,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n } as unknown as CoreClass;\n expect(() => createECClass(coreClass, schema)).to.throw();\n });\n\n describe(\"is\", () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n is: sinon.stub().resolves(true),\n };\n\n beforeEach(() => {\n coreClass.is.resetHistory();\n });\n\n it(\"handles CoreClass override\", async () => {\n const class1 = createECClass(coreClass as unknown as CoreClass, schema);\n const class2 = createECClass(\n {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c2\",\n name: \"c2\",\n label: \"C2\",\n } as unknown as CoreClass,\n schema,\n );\n const result = await class1.is(class2);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.is).to.be.calledOnceWithExactly(\"c2\", \"s\");\n expect(result).to.be.true;\n });\n\n it(\"handles class and schema names override\", async () => {\n const class1 = createECClass(coreClass as unknown as CoreClass, schema);\n const result = await class1.is(\"a\", \"b\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.is).to.be.calledOnceWithExactly(\"a\", \"b\");\n expect(result).to.be.true;\n });\n });\n\n describe(\"getProperties\", () => {\n it(\"returns properties from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n getProperties: sinon.stub().resolves([\n {\n isArray: () => false,\n isStruct: () => false,\n isEnumeration: () => false,\n isNavigation: () => false,\n isPrimitive: () => true,\n },\n ]),\n } as unknown as CoreClass;\n const ecClass = createECClass(coreClass, schema);\n const properties = await ecClass.getProperties();\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.getProperties).to.be.calledOnce;\n expect(properties).to.not.be.empty;\n });\n });\n\n describe(\"getProperty\", () => {\n it(\"returns property from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n getProperty: sinon.stub().resolves({\n isArray: () => false,\n isStruct: () => false,\n isEnumeration: () => false,\n isNavigation: () => false,\n isPrimitive: () => true,\n }),\n } as unknown as CoreClass;\n const ecClass = createECClass(coreClass, schema);\n const prop = await ecClass.getProperty(\"p\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.getProperty).to.be.calledOnceWith(\"p\", true);\n expect(prop).to.not.be.undefined;\n });\n\n it(\"returns undefined from core class\", async () => {\n const coreClass = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"s.c\",\n name: \"c\",\n label: \"C\",\n getProperty: sinon.stub().resolves(undefined),\n } as unknown as CoreClass;\n const ecClass = createECClass(coreClass, schema);\n const prop = await ecClass.getProperty(\"p\");\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(coreClass.getProperty).to.be.calledOnceWith(\"p\", true);\n expect(prop).to.be.undefined;\n });\n });\n\n describe(\"Relationship class\", () => {\n const coreRelationshipClass = {\n schemaItemType: SchemaItemType.RelationshipClass,\n fullName: \"Schema.TestRelationship\",\n name: \"TestRelationship\",\n label: \"Test relationship\",\n };\n\n describe(\"direction\", () => {\n it(\"returns forward direction from core relationship\", async () => {\n const rel = createECClass(\n { ...coreRelationshipClass, strengthDirection: StrengthDirection.Forward } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.direction).to.eq(\"Forward\");\n });\n\n it(\"returns backward direction from core relationship\", async () => {\n const rel = createECClass(\n { ...coreRelationshipClass, strengthDirection: StrengthDirection.Backward } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.direction).to.eq(\"Backward\");\n });\n });\n\n describe(\"source & target\", () => {\n it(\"returns source constraint\", () => {\n const rel = createECClass({ ...coreRelationshipClass, source: {} } as unknown as CoreClass, schema) as EC.RelationshipClass;\n expect(rel.source).to.not.be.undefined;\n });\n\n it(\"returns target constraint\", () => {\n const rel = createECClass({ ...coreRelationshipClass, target: {} } as unknown as CoreClass, schema) as EC.RelationshipClass;\n expect(rel.target).to.not.be.undefined;\n });\n\n describe(\"ECRelationshipConstraint implementation\", () => {\n it(\"returns undefined multiplicity from core constraint\", () => {\n const rel = createECClass({ ...coreRelationshipClass, source: { multiplicity: undefined } } as unknown as CoreClass, schema) as EC.RelationshipClass;\n expect(rel.source.multiplicity).to.be.undefined;\n });\n\n it(\"returns multiplicity from core constraint\", () => {\n const rel = createECClass(\n { ...coreRelationshipClass, source: { multiplicity: new RelationshipMultiplicity(123, 456) } } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.source.multiplicity).to.deep.eq({ lowerLimit: 123, upperLimit: 456 });\n });\n\n it(\"returns polymorphic flag from core constraint\", () => {\n [\n { in: undefined, expectation: false },\n { in: false, expectation: false },\n { in: true, expectation: true },\n ].forEach((testEntry) => {\n const rel = createECClass(\n { ...coreRelationshipClass, source: { polymorphic: testEntry.in } } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n expect(rel.source.polymorphic).to.eq(testEntry.expectation);\n });\n });\n\n it(\"returns abstract constraint from core constraint\", async () => {\n const coreAbstractConstraint = {\n schemaItemType: SchemaItemType.EntityClass,\n fullName: \"Schema.TestAbstractConstraint\",\n name: \"TestAbstractConstraint\",\n label: \"Test abstract constraint\",\n } as unknown as CoreClass;\n const rel = createECClass(\n { ...coreRelationshipClass, source: { abstractConstraint: Promise.resolve(coreAbstractConstraint) } } as unknown as CoreClass,\n schema,\n ) as EC.RelationshipClass;\n const constraint = (await rel.source.abstractConstraint)!;\n expect(constraint.isEntityClass()).to.be.true;\n expect(constraint.fullName).to.eq(coreAbstractConstraint.fullName);\n });\n });\n });\n });\n});\n\ndescribe(\"createECProperty\", () => {\n const propertyClass: EC.Class = {} as unknown as EC.Class;\n const propertyStub = {\n isArray: () => false,\n isEnumeration: () => false,\n isNavigation: () => false,\n isPrimitive: () => false,\n isStruct: () => false,\n fullName: \"\",\n name: \"\",\n };\n\n describe(\"Primitive property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n label: \"Test property\",\n extendedTypeName: \"extended\",\n } as unknown as CorePrimitiveProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.true;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.extendedTypeName).to.eq(coreProperty.extendedTypeName);\n });\n\n it(\"maps primitive types\", async () => {\n const types: [PrimitiveType, EC.PrimitiveType][] = [\n [PrimitiveType.Binary, \"Binary\"],\n [PrimitiveType.Boolean, \"Boolean\"],\n [PrimitiveType.DateTime, \"DateTime\"],\n [PrimitiveType.Double, \"Double\"],\n [PrimitiveType.IGeometry, \"IGeometry\"],\n [PrimitiveType.Integer, \"Integer\"],\n [PrimitiveType.Long, \"Long\"],\n [PrimitiveType.Point2d, \"Point2d\"],\n [PrimitiveType.Point3d, \"Point3d\"],\n [PrimitiveType.String, \"String\"],\n ];\n types.forEach(([coreType, expectation]) => {\n const coreProperty = {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n primitiveType: coreType,\n } as unknown as CorePrimitiveProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveProperty;\n expect(property.primitiveType).to.eq(expectation);\n });\n\n const uninitializedTypes = [undefined, PrimitiveType.Uninitialized];\n uninitializedTypes.forEach((coreType) => {\n const uninitializedProperty = createECProperty(\n {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n primitiveType: coreType,\n } as unknown as CorePrimitiveProperty,\n propertyClass,\n ) as EC.PrimitiveProperty;\n expect(() => uninitializedProperty.primitiveType).to.throw();\n });\n });\n\n it(\"maps kind of quantity\", async () => {\n const coreProperty = {\n ...propertyStub,\n isPrimitive: () => true,\n name: \"test-property\",\n kindOfQuantity: Promise.resolve({\n fullName: \"SchemaName.TestKoq\",\n schema: {\n name: \"SchemaName\",\n },\n }),\n } as unknown as CorePrimitiveProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveProperty;\n const koq = (await property.kindOfQuantity)!;\n expect(koq.fullName).to.eq(\"SchemaName.TestKoq\");\n\n expect(await createECProperty({ ...coreProperty, kindOfQuantity: undefined } as CorePrimitiveProperty, propertyClass).kindOfQuantity).to.be.undefined;\n });\n });\n\n describe(\"Navigation property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isNavigation: () => true,\n name: \"test-property\",\n label: \"Test property\",\n } as unknown as CoreNavigationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.NavigationProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.true;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n });\n\n it(\"maps direction\", async () => {\n const map = [\n [StrengthDirection.Backward, \"Backward\"],\n [StrengthDirection.Forward, \"Forward\"],\n ];\n map.forEach(([coreDirection, expectation]) => {\n const coreProperty = {\n ...propertyStub,\n isNavigation: () => true,\n name: \"test-property\",\n direction: coreDirection,\n } as unknown as CoreNavigationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.NavigationProperty;\n expect(property.direction).to.eq(expectation);\n });\n });\n\n it(\"returns relationship class\", async () => {\n const coreProperty = {\n ...propertyStub,\n isNavigation: () => true,\n name: \"test-property\",\n relationshipClass: Promise.resolve({\n fullName: \"SchemaName.RelationshipClass\",\n schema: {\n name: \"SchemaName\",\n },\n }),\n } as unknown as CoreNavigationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.NavigationProperty;\n const relationshipClass = await property.relationshipClass;\n expect(relationshipClass.fullName).to.eq(\"SchemaName.RelationshipClass\");\n });\n });\n\n describe(\"Enumeration property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isEnumeration: () => true,\n name: \"test-property\",\n label: \"Test property\",\n extendedTypeName: \"extended\",\n } as unknown as CoreEnumerationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.EnumerationProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.true;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.extendedTypeName).to.eq(coreProperty.extendedTypeName);\n });\n\n it(\"returns enumeration\", async () => {\n const coreProperty = {\n ...propertyStub,\n isEnumeration: () => true,\n name: \"test-property\",\n enumeration: Promise.resolve({\n schema: {\n name: \"SchemaName\",\n },\n }),\n } as unknown as CoreEnumerationProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.EnumerationProperty;\n expect(await property.enumeration).to.not.be.undefined;\n });\n\n describe(\"ECEnumeration implementation\", () => {\n const coreEnumeration = {\n schema: {\n name: \"SchemaName\",\n },\n isStrict: false,\n type: undefined,\n enumerators: new Array<CoreEnumerator<number>>(),\n };\n const coreEnumerationProperty = {\n ...propertyStub,\n isEnumeration: () => true,\n name: \"test-property\",\n enumeration: Promise.resolve(coreEnumeration),\n } as unknown as CoreEnumerationProperty;\n let property: EC.EnumerationProperty;\n\n beforeEach(async () => {\n property = createECProperty(coreEnumerationProperty, propertyClass) as EC.EnumerationProperty;\n });\n\n it(\"returns `isStrict` flag\", async () => {\n coreEnumeration.isStrict = true;\n const enumeration = (await property.enumeration)!;\n expect(enumeration.isStrict).to.be.true;\n });\n\n it(\"maps enumeration type\", async () => {\n const typesMap = [\n [PrimitiveType.String, \"String\"],\n [PrimitiveType.Integer, \"Number\"],\n [undefined, \"Number\"],\n ];\n const typeStub = sinon.stub(coreEnumeration, \"type\");\n for (const [coreType, expectation] of typesMap) {\n typeStub.reset();\n typeStub.get(() => coreType);\n const enumeration = (await property.enumeration)!;\n expect(enumeration.type).to.eq(expectation);\n }\n });\n\n it(\"returns enumerators\", async () => {\n coreEnumeration.enumerators = [\n { name: \"1\", value: 1, label: \"One\", description: \"Test one\" },\n { name: \"2\", value: 2 },\n ];\n const enumeration = (await property.enumeration)!;\n expect(enumeration.enumerators).to.deep.eq(coreEnumeration.enumerators);\n });\n });\n });\n\n describe(\"Struct property\", () => {\n it(\"creates property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isStruct: () => true,\n name: \"test-property\",\n label: \"Test property\",\n } as unknown as CoreStructProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.StructProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.false;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.true;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n });\n\n it(\"returns struct class\", async () => {\n const coreProperty = {\n ...propertyStub,\n isStruct: () => true,\n name: \"test-property\",\n structClass: {\n fullName: \"SchemaName.StructClass\",\n schema: {\n name: \"SchemaName\",\n },\n },\n } as unknown as CoreStructProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.StructProperty;\n expect(property.structClass.fullName).to.eq(\"SchemaName.StructClass\");\n });\n });\n\n describe(\"Array property\", () => {\n it(\"creates primitive array property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isArray: () => true,\n isPrimitive: () => true,\n name: \"test-property\",\n label: \"Test property\",\n minOccurs: 123,\n maxOccurs: 456,\n } as unknown as CorePrimitiveArrayProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.PrimitiveArrayProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.true;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.true;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.minOccurs).to.eq(123);\n expect(property.maxOccurs).to.eq(456);\n });\n\n it(\"creates enumeration array property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isArray: () => true,\n isEnumeration: () => true,\n name: \"test-property\",\n label: \"Test property\",\n minOccurs: 123,\n maxOccurs: 456,\n } as unknown as CoreEnumerationArrayProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.EnumerationArrayProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.true;\n expect(property.isEnumeration()).to.be.true;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.false;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.minOccurs).to.eq(123);\n expect(property.maxOccurs).to.eq(456);\n });\n\n it(\"creates struct array property from core property\", async () => {\n const coreProperty = {\n ...propertyStub,\n isArray: () => true,\n isStruct: () => true,\n name: \"test-property\",\n label: \"Test property\",\n minOccurs: 123,\n maxOccurs: 456,\n } as unknown as CoreStructArrayProperty;\n const property = createECProperty(coreProperty, propertyClass) as EC.StructArrayProperty;\n expect(property.class).to.eq(propertyClass);\n expect(property.isArray()).to.be.true;\n expect(property.isEnumeration()).to.be.false;\n expect(property.isNavigation()).to.be.false;\n expect(property.isPrimitive()).to.be.false;\n expect(property.isStruct()).to.be.true;\n expect(property.name).to.eq(coreProperty.name);\n expect(property.label).to.eq(coreProperty.label);\n expect(property.minOccurs).to.eq(123);\n expect(property.maxOccurs).to.eq(456);\n });\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryExecutor.test.d.ts","sourceRoot":"","sources":["../../../src/test/QueryExecutor.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { expect } from "chai";
|
|
6
|
+
import sinon from "sinon";
|
|
7
|
+
import { QueryBinder, QueryRowFormat } from "@itwin/core-common";
|
|
8
|
+
import { Point2d, Point3d } from "@itwin/core-geometry";
|
|
9
|
+
import { createECSqlQueryExecutor } from "../core-interop/QueryExecutor";
|
|
10
|
+
describe("createECSqlQueryExecutor", () => {
|
|
11
|
+
describe("createQueryReader", () => {
|
|
12
|
+
it("calls IModel's `createQueryReader` with default params", async () => {
|
|
13
|
+
const imodel = {
|
|
14
|
+
createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),
|
|
15
|
+
};
|
|
16
|
+
const executor = createECSqlQueryExecutor(imodel);
|
|
17
|
+
const reader = executor.createQueryReader({ ecsql: "ecsql" });
|
|
18
|
+
for await (const _ of reader) {
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
21
|
+
expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => Object.keys(binder.serialize()).length === 0), sinon.match((options) => Object.keys(options).length === 0));
|
|
22
|
+
});
|
|
23
|
+
it("calls IModel's `createQueryReader` with CTEs", async () => {
|
|
24
|
+
const imodel = {
|
|
25
|
+
createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),
|
|
26
|
+
};
|
|
27
|
+
const executor = createECSqlQueryExecutor(imodel);
|
|
28
|
+
const reader = executor.createQueryReader({ ctes: ["cte1", "cte2"], ecsql: "ecsql" });
|
|
29
|
+
for await (const _ of reader) {
|
|
30
|
+
}
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
32
|
+
expect(imodel.createQueryReader).to.be.calledOnceWith("WITH RECURSIVE cte1, cte2 ecsql");
|
|
33
|
+
});
|
|
34
|
+
it("calls IModel's `createQueryReader` with `ECSqlPropertyNames` row format", async () => {
|
|
35
|
+
const imodel = {
|
|
36
|
+
createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),
|
|
37
|
+
};
|
|
38
|
+
const executor = createECSqlQueryExecutor(imodel);
|
|
39
|
+
const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "ECSqlPropertyNames" });
|
|
40
|
+
for await (const _ of reader) {
|
|
41
|
+
}
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
43
|
+
expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => Object.keys(binder.serialize()).length === 0), sinon.match((options) => options.rowFormat === QueryRowFormat.UseECSqlPropertyNames));
|
|
44
|
+
});
|
|
45
|
+
it("calls IModel's `createQueryReader` with `Indexes` row format", async () => {
|
|
46
|
+
const imodel = {
|
|
47
|
+
createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),
|
|
48
|
+
};
|
|
49
|
+
const executor = createECSqlQueryExecutor(imodel);
|
|
50
|
+
const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "Indexes" });
|
|
51
|
+
for await (const _ of reader) {
|
|
52
|
+
}
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
54
|
+
expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => Object.keys(binder.serialize()).length === 0), sinon.match((options) => options.rowFormat === QueryRowFormat.UseECSqlPropertyIndexes));
|
|
55
|
+
});
|
|
56
|
+
it("calls IModel's `createQueryReader` with different bindings", async () => {
|
|
57
|
+
const imodel = {
|
|
58
|
+
createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),
|
|
59
|
+
};
|
|
60
|
+
const bindings = [
|
|
61
|
+
{
|
|
62
|
+
type: "boolean",
|
|
63
|
+
value: true,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: "double",
|
|
67
|
+
value: 1.23,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: "id",
|
|
71
|
+
value: "0x123",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
type: "idset",
|
|
75
|
+
value: ["0x123", "0x456"],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: "int",
|
|
79
|
+
value: 123,
|
|
80
|
+
},
|
|
81
|
+
{ type: "long", value: 456 },
|
|
82
|
+
{
|
|
83
|
+
type: "point2d",
|
|
84
|
+
value: { x: 1.23, y: 4.56 },
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: "point3d",
|
|
88
|
+
value: { x: 1.23, y: 4.56, z: 7.89 },
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: "string",
|
|
92
|
+
value: "xxx",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
type: "string",
|
|
96
|
+
value: undefined,
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
const expectedBinder = new QueryBinder();
|
|
100
|
+
expectedBinder.bindBoolean(1, true);
|
|
101
|
+
expectedBinder.bindDouble(2, 1.23);
|
|
102
|
+
expectedBinder.bindId(3, "0x123");
|
|
103
|
+
expectedBinder.bindIdSet(4, ["0x123", "0x456"]);
|
|
104
|
+
expectedBinder.bindInt(5, 123);
|
|
105
|
+
expectedBinder.bindLong(6, 456);
|
|
106
|
+
expectedBinder.bindPoint2d(7, Point2d.create(1.23, 4.56));
|
|
107
|
+
expectedBinder.bindPoint3d(8, Point3d.create(1.23, 4.56, 7.89));
|
|
108
|
+
expectedBinder.bindString(9, "xxx");
|
|
109
|
+
expectedBinder.bindNull(10);
|
|
110
|
+
const executor = createECSqlQueryExecutor(imodel);
|
|
111
|
+
const reader = executor.createQueryReader({ ecsql: "ecsql", bindings }, undefined);
|
|
112
|
+
for await (const _ of reader) {
|
|
113
|
+
}
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
115
|
+
expect(imodel.createQueryReader).to.be.calledOnceWithExactly("ecsql", sinon.match((binder) => JSON.stringify(expectedBinder.serialize()) === JSON.stringify(binder.serialize())), sinon.match((options) => Object.keys(options).length === 0));
|
|
116
|
+
});
|
|
117
|
+
it("creates iterable reader for rows as objects", async () => {
|
|
118
|
+
const rows = [{ x: 1 }, { y: 2 }];
|
|
119
|
+
const imodel = {
|
|
120
|
+
createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),
|
|
121
|
+
};
|
|
122
|
+
const executor = createECSqlQueryExecutor(imodel);
|
|
123
|
+
const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "ECSqlPropertyNames" });
|
|
124
|
+
const resultRows = new Array();
|
|
125
|
+
for await (const row of reader) {
|
|
126
|
+
resultRows.push(row);
|
|
127
|
+
}
|
|
128
|
+
expect(resultRows).to.deep.eq(rows);
|
|
129
|
+
});
|
|
130
|
+
it("creates iterable reader for rows as arrays", async () => {
|
|
131
|
+
const rows = [
|
|
132
|
+
[1, 2],
|
|
133
|
+
[3, 4],
|
|
134
|
+
];
|
|
135
|
+
const imodel = {
|
|
136
|
+
createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),
|
|
137
|
+
};
|
|
138
|
+
const executor = createECSqlQueryExecutor(imodel);
|
|
139
|
+
const reader = executor.createQueryReader({ ecsql: "ecsql" }, { rowFormat: "Indexes" });
|
|
140
|
+
const resultRows = new Array();
|
|
141
|
+
for await (const row of reader) {
|
|
142
|
+
resultRows.push(row);
|
|
143
|
+
}
|
|
144
|
+
expect(resultRows).to.deep.eq(rows);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
function createCoreECSqlReaderStub(rows) {
|
|
149
|
+
let curr = -1;
|
|
150
|
+
const reader = {
|
|
151
|
+
next: sinon.fake(async () => {
|
|
152
|
+
++curr;
|
|
153
|
+
if (curr < rows.length) {
|
|
154
|
+
return { done: false, value: createQueryRowProxy(rows[curr]) };
|
|
155
|
+
}
|
|
156
|
+
return { done: true, value: undefined };
|
|
157
|
+
}),
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
...reader,
|
|
161
|
+
async *[Symbol.asyncIterator]() {
|
|
162
|
+
return reader;
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
function createQueryRowProxy(data) {
|
|
167
|
+
return {
|
|
168
|
+
...data,
|
|
169
|
+
toArray: () => data,
|
|
170
|
+
toRow: () => data,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=QueryExecutor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryExecutor.test.js","sourceRoot":"","sources":["../../../src/test/QueryExecutor.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport sinon from \"sinon\";\nimport { QueryBinder, QueryOptions, QueryRowFormat } from \"@itwin/core-common\";\nimport { Point2d, Point3d } from \"@itwin/core-geometry\";\nimport { ECSqlBinding } from \"@itwin/presentation-shared\";\nimport { createECSqlQueryExecutor } from \"../core-interop/QueryExecutor\";\n\ndescribe(\"createECSqlQueryExecutor\", () => {\n describe(\"createQueryReader\", () => {\n it(\"calls IModel's `createQueryReader` with default params\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => Object.keys(binder.serialize()).length === 0),\n sinon.match((options: QueryOptions) => Object.keys(options).length === 0),\n );\n });\n\n it(\"calls IModel's `createQueryReader` with CTEs\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([{}, {}])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ctes: [\"cte1\", \"cte2\"], ecsql: \"ecsql\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWith(\"WITH RECURSIVE cte1, cte2 ecsql\");\n });\n\n it(\"calls IModel's `createQueryReader` with `ECSqlPropertyNames` row format\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"ECSqlPropertyNames\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => Object.keys(binder.serialize()).length === 0),\n sinon.match((options: QueryOptions) => options.rowFormat === QueryRowFormat.UseECSqlPropertyNames),\n );\n });\n\n it(\"calls IModel's `createQueryReader` with `Indexes` row format\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"Indexes\" });\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => Object.keys(binder.serialize()).length === 0),\n sinon.match((options: QueryOptions) => options.rowFormat === QueryRowFormat.UseECSqlPropertyIndexes),\n );\n });\n\n it(\"calls IModel's `createQueryReader` with different bindings\", async () => {\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub([])),\n };\n\n const bindings: ECSqlBinding[] = [\n {\n type: \"boolean\",\n value: true,\n },\n {\n type: \"double\",\n value: 1.23,\n },\n {\n type: \"id\",\n value: \"0x123\",\n },\n {\n type: \"idset\",\n value: [\"0x123\", \"0x456\"],\n },\n {\n type: \"int\",\n value: 123,\n },\n { type: \"long\", value: 456 },\n {\n type: \"point2d\",\n value: { x: 1.23, y: 4.56 },\n },\n {\n type: \"point3d\",\n value: { x: 1.23, y: 4.56, z: 7.89 },\n },\n {\n type: \"string\",\n value: \"xxx\",\n },\n {\n type: \"string\",\n value: undefined,\n },\n ];\n\n const expectedBinder = new QueryBinder();\n expectedBinder.bindBoolean(1, true);\n expectedBinder.bindDouble(2, 1.23);\n expectedBinder.bindId(3, \"0x123\");\n expectedBinder.bindIdSet(4, [\"0x123\", \"0x456\"]);\n expectedBinder.bindInt(5, 123);\n expectedBinder.bindLong(6, 456);\n expectedBinder.bindPoint2d(7, Point2d.create(1.23, 4.56));\n expectedBinder.bindPoint3d(8, Point3d.create(1.23, 4.56, 7.89));\n expectedBinder.bindString(9, \"xxx\");\n expectedBinder.bindNull(10);\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\", bindings }, undefined);\n for await (const _ of reader) {\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n expect(imodel.createQueryReader).to.be.calledOnceWithExactly(\n \"ecsql\",\n sinon.match((binder: QueryBinder) => JSON.stringify(expectedBinder.serialize()) === JSON.stringify(binder.serialize())),\n sinon.match((options: QueryOptions) => Object.keys(options).length === 0),\n );\n });\n\n it(\"creates iterable reader for rows as objects\", async () => {\n const rows = [{ x: 1 }, { y: 2 }];\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"ECSqlPropertyNames\" });\n\n const resultRows = new Array<any>();\n for await (const row of reader) {\n resultRows.push(row);\n }\n\n expect(resultRows).to.deep.eq(rows);\n });\n\n it(\"creates iterable reader for rows as arrays\", async () => {\n const rows = [\n [1, 2],\n [3, 4],\n ];\n const imodel = {\n createQueryReader: sinon.stub().returns(createCoreECSqlReaderStub(rows)),\n };\n\n const executor = createECSqlQueryExecutor(imodel);\n const reader = executor.createQueryReader({ ecsql: \"ecsql\" }, { rowFormat: \"Indexes\" });\n\n const resultRows = new Array<any>();\n for await (const row of reader) {\n resultRows.push(row);\n }\n\n expect(resultRows).to.deep.eq(rows);\n });\n });\n});\n\nfunction createCoreECSqlReaderStub(rows: object[]) {\n let curr = -1;\n const reader = {\n next: sinon.fake(async () => {\n ++curr;\n if (curr < rows.length) {\n return { done: false, value: createQueryRowProxy(rows[curr]) };\n }\n return { done: true, value: undefined };\n }),\n };\n return {\n ...reader,\n async *[Symbol.asyncIterator]() {\n return reader;\n },\n };\n}\n\nfunction createQueryRowProxy(data: object) {\n return {\n ...data,\n toArray: () => data,\n toRow: () => data,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transactions.test.d.ts","sourceRoot":"","sources":["../../../src/test/Transactions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { expect } from "chai";
|
|
6
|
+
import sinon from "sinon";
|
|
7
|
+
import { registerTxnListeners } from "../core-interop/Transactions";
|
|
8
|
+
describe("registerTxnListeners", () => {
|
|
9
|
+
it("calls provided callback on `onAppliedChanges` event", async () => {
|
|
10
|
+
const txns = createCoreTxnManager();
|
|
11
|
+
const callback = sinon.stub();
|
|
12
|
+
registerTxnListeners(txns, callback);
|
|
13
|
+
expect(txns.onChangesApplied.addListener).to.be.calledOnce;
|
|
14
|
+
txns.onChangesApplied.addListener.firstCall.callArg(0);
|
|
15
|
+
expect(callback).to.be.calledOnce;
|
|
16
|
+
});
|
|
17
|
+
it("calls provided callback on `onCommit` and `onCommitted` event", async () => {
|
|
18
|
+
const txns = createCoreTxnManager();
|
|
19
|
+
const callback = sinon.stub();
|
|
20
|
+
registerTxnListeners(txns, callback);
|
|
21
|
+
expect(txns.onCommit.addListener).to.be.calledOnce;
|
|
22
|
+
expect(txns.onCommitted.addListener).to.be.calledOnce;
|
|
23
|
+
txns.onCommit.addListener.firstCall.callArg(0);
|
|
24
|
+
txns.onCommitted.addListener.firstCall.callArg(0);
|
|
25
|
+
expect(callback).to.be.calledOnce;
|
|
26
|
+
});
|
|
27
|
+
it("doesn't call provided callback on `onCommitted` event if there was no `onCommit` event", async () => {
|
|
28
|
+
const txns = createCoreTxnManager();
|
|
29
|
+
const callback = sinon.stub();
|
|
30
|
+
registerTxnListeners(txns, callback);
|
|
31
|
+
expect(txns.onCommit.addListener).to.be.calledOnce;
|
|
32
|
+
expect(txns.onCommitted.addListener).to.be.calledOnce;
|
|
33
|
+
txns.onCommitted.addListener.firstCall.callArg(0);
|
|
34
|
+
expect(callback).to.not.be.called;
|
|
35
|
+
});
|
|
36
|
+
it("unregisters from events when returned function is called", async () => {
|
|
37
|
+
const txns = createCoreTxnManager();
|
|
38
|
+
const unregister = registerTxnListeners(txns, sinon.stub());
|
|
39
|
+
expect(txns.onCommit.hasListeners()).to.be.true;
|
|
40
|
+
expect(txns.onCommitted.hasListeners()).to.be.true;
|
|
41
|
+
expect(txns.onChangesApplied.hasListeners()).to.be.true;
|
|
42
|
+
unregister();
|
|
43
|
+
expect(txns.onCommit.hasListeners()).to.be.false;
|
|
44
|
+
expect(txns.onCommitted.hasListeners()).to.be.false;
|
|
45
|
+
expect(txns.onChangesApplied.hasListeners()).to.be.false;
|
|
46
|
+
});
|
|
47
|
+
function createCoreTxnManager() {
|
|
48
|
+
return {
|
|
49
|
+
onCommit: createEventStub(),
|
|
50
|
+
onCommitted: createEventStub(),
|
|
51
|
+
onChangesApplied: createEventStub(),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function createEventStub() {
|
|
55
|
+
let hasListeners = false;
|
|
56
|
+
return {
|
|
57
|
+
hasListeners: () => hasListeners,
|
|
58
|
+
addListener: sinon.fake(() => {
|
|
59
|
+
hasListeners = true;
|
|
60
|
+
return () => {
|
|
61
|
+
hasListeners = false;
|
|
62
|
+
};
|
|
63
|
+
}),
|
|
64
|
+
removeListener: sinon.stub(),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=Transactions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transactions.test.js","sourceRoot":"","sources":["../../../src/test/Transactions.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { expect } from \"chai\";\nimport sinon from \"sinon\";\nimport { registerTxnListeners } from \"../core-interop/Transactions\";\n\ndescribe(\"registerTxnListeners\", () => {\n it(\"calls provided callback on `onAppliedChanges` event\", async () => {\n const txns = createCoreTxnManager();\n const callback = sinon.stub();\n registerTxnListeners(txns, callback);\n expect(txns.onChangesApplied.addListener).to.be.calledOnce;\n txns.onChangesApplied.addListener.firstCall.callArg(0);\n expect(callback).to.be.calledOnce;\n });\n\n it(\"calls provided callback on `onCommit` and `onCommitted` event\", async () => {\n const txns = createCoreTxnManager();\n const callback = sinon.stub();\n registerTxnListeners(txns, callback);\n expect(txns.onCommit.addListener).to.be.calledOnce;\n expect(txns.onCommitted.addListener).to.be.calledOnce;\n txns.onCommit.addListener.firstCall.callArg(0);\n txns.onCommitted.addListener.firstCall.callArg(0);\n expect(callback).to.be.calledOnce;\n });\n\n it(\"doesn't call provided callback on `onCommitted` event if there was no `onCommit` event\", async () => {\n const txns = createCoreTxnManager();\n const callback = sinon.stub();\n registerTxnListeners(txns, callback);\n expect(txns.onCommit.addListener).to.be.calledOnce;\n expect(txns.onCommitted.addListener).to.be.calledOnce;\n txns.onCommitted.addListener.firstCall.callArg(0);\n expect(callback).to.not.be.called;\n });\n\n it(\"unregisters from events when returned function is called\", async () => {\n const txns = createCoreTxnManager();\n const unregister = registerTxnListeners(txns, sinon.stub());\n expect(txns.onCommit.hasListeners()).to.be.true;\n expect(txns.onCommitted.hasListeners()).to.be.true;\n expect(txns.onChangesApplied.hasListeners()).to.be.true;\n unregister();\n expect(txns.onCommit.hasListeners()).to.be.false;\n expect(txns.onCommitted.hasListeners()).to.be.false;\n expect(txns.onChangesApplied.hasListeners()).to.be.false;\n });\n\n function createCoreTxnManager() {\n return {\n onCommit: createEventStub(),\n onCommitted: createEventStub(),\n onChangesApplied: createEventStub(),\n };\n }\n\n function createEventStub() {\n let hasListeners = false;\n return {\n hasListeners: () => hasListeners,\n addListener: sinon.fake(() => {\n hasListeners = true;\n return () => {\n hasListeners = false;\n };\n }),\n removeListener: sinon.stub(),\n };\n }\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import * as chai from "chai";
|
|
6
|
+
import chaiAsPromised from "chai-as-promised";
|
|
7
|
+
import sinon from "sinon";
|
|
8
|
+
import sinonChai from "sinon-chai";
|
|
9
|
+
// setup chai
|
|
10
|
+
chai.use(chaiAsPromised);
|
|
11
|
+
chai.use(sinonChai);
|
|
12
|
+
beforeEach(function () {
|
|
13
|
+
sinon.restore();
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/index.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,aAAa;AACb,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACzB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAEpB,UAAU,CAAC;IACT,KAAK,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as chai from \"chai\";\nimport chaiAsPromised from \"chai-as-promised\";\nimport sinon from \"sinon\";\nimport sinonChai from \"sinon-chai\";\n\n// setup chai\nchai.use(chaiAsPromised);\nchai.use(sinonChai);\n\nbeforeEach(function () {\n sinon.restore();\n});\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@itwin/presentation-core-interop",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "The package acts as a layer between iTwin.js Core and Presentation packages.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/iTwin/presentation.git",
|
|
9
|
+
"directory": "packages/core-interop"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"Bentley",
|
|
13
|
+
"iModel",
|
|
14
|
+
"iTwin.js",
|
|
15
|
+
"Presentation"
|
|
16
|
+
],
|
|
17
|
+
"author": {
|
|
18
|
+
"name": "Bentley Systems, Inc.",
|
|
19
|
+
"url": "http://www.bentley.com"
|
|
20
|
+
},
|
|
21
|
+
"main": "lib/cjs/presentation-core-interop.js",
|
|
22
|
+
"module": "lib/esm/presentation-core-interop.js",
|
|
23
|
+
"types": "lib/cjs/presentation-core-interop.d.ts",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"rxjs": "^7.8.1",
|
|
26
|
+
"@itwin/presentation-shared": "~0.1.0"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@itwin/core-bentley": "^4.1.0",
|
|
30
|
+
"@itwin/core-common": "^4.1.0",
|
|
31
|
+
"@itwin/core-geometry": "^4.1.0",
|
|
32
|
+
"@itwin/core-quantity": "^4.1.0",
|
|
33
|
+
"@itwin/ecschema-metadata": "^4.1.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@itwin/build-tools": "^4.5.2",
|
|
37
|
+
"@itwin/core-bentley": "^4.5.2",
|
|
38
|
+
"@itwin/core-common": "^4.5.2",
|
|
39
|
+
"@itwin/core-geometry": "^4.5.2",
|
|
40
|
+
"@itwin/core-quantity": "^4.5.2",
|
|
41
|
+
"@itwin/ecschema-metadata": "^4.5.2",
|
|
42
|
+
"@itwin/eslint-plugin": "^4.0.0",
|
|
43
|
+
"@types/chai": "^4.3.14",
|
|
44
|
+
"@types/chai-as-promised": "^7.1.8",
|
|
45
|
+
"@types/mocha": "^10.0.6",
|
|
46
|
+
"@types/sinon": "^17.0.3",
|
|
47
|
+
"@types/sinon-chai": "^3.2.12",
|
|
48
|
+
"chai": "^4.4.1",
|
|
49
|
+
"chai-as-promised": "^7.1.1",
|
|
50
|
+
"cpx2": "^7.0.1",
|
|
51
|
+
"eslint": "^8.57.0",
|
|
52
|
+
"mocha": "^10.4.0",
|
|
53
|
+
"nyc": "^15.1.0",
|
|
54
|
+
"rimraf": "^5.0.5",
|
|
55
|
+
"rxjs-for-await": "^1.0.0",
|
|
56
|
+
"sinon": "^17.0.1",
|
|
57
|
+
"sinon-chai": "^3.7.0",
|
|
58
|
+
"typescript": "~5.4.5"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "npm run -s build:cjs && npm run -s build:esm",
|
|
62
|
+
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
63
|
+
"build:esm": "tsc -p tsconfig.esm.json",
|
|
64
|
+
"build:watch": "npm run -s build:cjs -- -w",
|
|
65
|
+
"clean": "rimraf lib",
|
|
66
|
+
"cover": "nyc npm -s test",
|
|
67
|
+
"lint": "eslint ./src/**/*.ts",
|
|
68
|
+
"test": "mocha --enable-source-maps --config ./.mocharc.json \"./lib/cjs/test/**/*.test.js\"",
|
|
69
|
+
"extract-api": "betools extract-api --entry=presentation-core-interop --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api",
|
|
70
|
+
"check-internal": "node ../../scripts/checkInternal.js --apiSummary ./api/presentation-core-interop.api.md"
|
|
71
|
+
}
|
|
72
|
+
}
|