@itwin/core-backend 5.13.0-dev.10 → 5.13.0-dev.12
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/lib/cjs/Element.d.ts +25 -1
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +45 -0
- package/lib/cjs/Element.js.map +1 -1
- package/lib/esm/Element.d.ts +25 -1
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +45 -0
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +2 -16
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +2 -2
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/imodel/IModelECSql.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelECSql.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelECSql.test.js +367 -0
- package/lib/esm/test/imodel/IModelECSql.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelElements.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelElements.test.js +969 -0
- package/lib/esm/test/imodel/IModelElements.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js +539 -0
- package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js +498 -0
- package/lib/esm/test/imodel/IModelLifecycle.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelMetadata.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js +274 -0
- package/lib/esm/test/imodel/IModelMetadata.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelModels.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelModels.test.js +357 -0
- package/lib/esm/test/imodel/IModelModels.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelRelationships.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js +407 -0
- package/lib/esm/test/imodel/IModelRelationships.test.js.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts +53 -0
- package/lib/esm/test/imodel/IModelTestFixtures.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js +107 -0
- package/lib/esm/test/imodel/IModelTestFixtures.js.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts +2 -0
- package/lib/esm/test/imodel/IModelViews.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/IModelViews.test.js +199 -0
- package/lib/esm/test/imodel/IModelViews.test.js.map +1 -0
- package/package.json +13 -13
- package/lib/esm/test/imodel/IModel.test.d.ts +0 -2
- package/lib/esm/test/imodel/IModel.test.d.ts.map +0 -1
- package/lib/esm/test/imodel/IModel.test.js +0 -3277
- package/lib/esm/test/imodel/IModel.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelMetadata.test.d.ts","sourceRoot":"","sources":["../../../../src/test/imodel/IModelMetadata.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,274 @@
|
|
|
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 { assert, expect } from "chai";
|
|
6
|
+
import { Id64 } from "@itwin/core-bentley";
|
|
7
|
+
import { BisCodeSpec, Code, CodeScopeSpec, CodeSpec, FontMap, FontType, IModel } from "@itwin/core-common";
|
|
8
|
+
import { CustomAttributeClass, EntityClass, PropertyType, propertyTypeToString, SchemaItemType } from "@itwin/ecschema-metadata";
|
|
9
|
+
import { EditTxn, withEditTxn } from "../../EditTxn";
|
|
10
|
+
import { BisCoreSchema, Category, ClassRegistry, Element, SnapshotDb } from "../../core-backend";
|
|
11
|
+
import { IModelTestUtils } from "../IModelTestUtils";
|
|
12
|
+
import { TestUtils } from "../TestUtils";
|
|
13
|
+
import { closeIfOpen, createIModelFromSeed, createMutableIModelTracker, importTestBim, openReadonlySeedCopy } from "./IModelTestFixtures";
|
|
14
|
+
describe("iModel metadata and schemas", () => {
|
|
15
|
+
let testBimReadonly;
|
|
16
|
+
let compatibilityReadonly;
|
|
17
|
+
const { trackMutableIModel, closeTrackedIModels } = createMutableIModelTracker();
|
|
18
|
+
before(async () => {
|
|
19
|
+
await TestUtils.startBackend();
|
|
20
|
+
IModelTestUtils.registerTestBimSchema();
|
|
21
|
+
testBimReadonly = await openReadonlySeedCopy("metadata-test.bim", "test.bim", { importTestBim: true });
|
|
22
|
+
compatibilityReadonly = await openReadonlySeedCopy("metadata-CompatibilityTestSeed.bim", "CompatibilityTestSeed.bim");
|
|
23
|
+
});
|
|
24
|
+
after(() => {
|
|
25
|
+
closeIfOpen(testBimReadonly, compatibilityReadonly);
|
|
26
|
+
closeTrackedIModels();
|
|
27
|
+
});
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
closeTrackedIModels();
|
|
30
|
+
});
|
|
31
|
+
function checkElementMetaData(entityClass) {
|
|
32
|
+
assert.isNotNull(entityClass);
|
|
33
|
+
assert.equal(entityClass.fullName, Element.classFullName.replace(":", "."));
|
|
34
|
+
assert.isUndefined(entityClass.baseClass);
|
|
35
|
+
let foundClassHasHandler = false;
|
|
36
|
+
let foundClassHasCurrentTimeStampProperty = false;
|
|
37
|
+
if (entityClass.customAttributes !== undefined) {
|
|
38
|
+
if (entityClass.customAttributes.has("BisCore.ClassHasHandler"))
|
|
39
|
+
foundClassHasHandler = true;
|
|
40
|
+
if (entityClass.customAttributes.has("CoreCustomAttributes.ClassHasCurrentTimeStampProperty"))
|
|
41
|
+
foundClassHasCurrentTimeStampProperty = true;
|
|
42
|
+
}
|
|
43
|
+
assert.isTrue(foundClassHasHandler);
|
|
44
|
+
assert.isTrue(foundClassHasCurrentTimeStampProperty);
|
|
45
|
+
const federationGuid = entityClass.getPropertySync("federationGuid", false);
|
|
46
|
+
if (federationGuid !== undefined) {
|
|
47
|
+
assert.isTrue(federationGuid.isPrimitive());
|
|
48
|
+
assert.equal(federationGuid.propertyType, PropertyType.Binary);
|
|
49
|
+
assert.equal(federationGuid.extendedTypeName, "BeGuid");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function checkClassHasHandlerMetaData(classToCheck) {
|
|
53
|
+
assert.isDefined(classToCheck);
|
|
54
|
+
const propertiesArray = Array.from(classToCheck.getPropertiesSync(true));
|
|
55
|
+
assert.equal(propertiesArray.length, 1);
|
|
56
|
+
const restrictionProperty = propertiesArray[0];
|
|
57
|
+
assert.isDefined(restrictionProperty);
|
|
58
|
+
assert.equal(restrictionProperty.name, "Restrictions");
|
|
59
|
+
assert.equal(propertyTypeToString(restrictionProperty.propertyType), "PrimitiveArrayProperty");
|
|
60
|
+
assert.equal(restrictionProperty.minOccurs, 0);
|
|
61
|
+
}
|
|
62
|
+
it("should use schema to look up classes by name", () => {
|
|
63
|
+
const elementClass = ClassRegistry.findRegisteredClass(Element.classFullName);
|
|
64
|
+
const categoryClass = ClassRegistry.findRegisteredClass(Category.classFullName);
|
|
65
|
+
assert.isDefined(elementClass);
|
|
66
|
+
assert.isDefined(categoryClass);
|
|
67
|
+
assert.equal(elementClass.schema, BisCoreSchema);
|
|
68
|
+
assert.equal(categoryClass.schema, BisCoreSchema);
|
|
69
|
+
assert.equal(elementClass.className, "Element");
|
|
70
|
+
assert.equal(categoryClass.className, "Category");
|
|
71
|
+
});
|
|
72
|
+
it("Fonts", async () => {
|
|
73
|
+
const imodel1 = trackMutableIModel(await importTestBim(createIModelFromSeed("metadata-fonts.bim", "test.bim")));
|
|
74
|
+
const dbFonts = imodel1.fonts;
|
|
75
|
+
expect(Array.from(dbFonts.queryMappedFamilies({ includeNonEmbedded: true })).length).to.equal(4);
|
|
76
|
+
expect(dbFonts.findDescriptor(1)).to.deep.equal({ name: "Arial", type: FontType.TrueType });
|
|
77
|
+
expect(dbFonts.findId({ name: "Arial" })).to.equal(1);
|
|
78
|
+
expect(dbFonts.findId({ name: "arial" })).to.equal(1);
|
|
79
|
+
expect(dbFonts.findDescriptor(2)).to.deep.equal({ name: "Font0", type: FontType.Rsc });
|
|
80
|
+
expect(dbFonts.findId({ name: "Font0" })).to.equal(2);
|
|
81
|
+
expect(dbFonts.findId({ name: "fOnt0" })).to.equal(2);
|
|
82
|
+
expect(dbFonts.findDescriptor(3)).to.deep.equal({ name: "ShxFont0", type: FontType.Shx });
|
|
83
|
+
expect(dbFonts.findId({ name: "ShxFont0" })).to.equal(3);
|
|
84
|
+
expect(dbFonts.findId({ name: "shxfont0" })).to.equal(3);
|
|
85
|
+
expect(dbFonts.findDescriptor(4)).to.deep.equal({ name: "Calibri", type: FontType.TrueType });
|
|
86
|
+
expect(dbFonts.findId({ name: "Calibri" })).to.equal(4);
|
|
87
|
+
expect(dbFonts.findId({ name: "cAlIbRi" })).to.equal(4);
|
|
88
|
+
expect(dbFonts.findId({ name: "notfound" })).to.be.undefined;
|
|
89
|
+
const fonts1 = imodel1.fontMap; // eslint-disable-line @typescript-eslint/no-deprecated
|
|
90
|
+
assert.equal(fonts1.fonts.size, 4, "font map size should be 4");
|
|
91
|
+
assert.equal(FontType.TrueType, fonts1.getFont(1).type, "get font 1 type is TrueType");
|
|
92
|
+
assert.equal("Arial", fonts1.getFont(1).name, "get Font 1 name");
|
|
93
|
+
assert.equal(1, fonts1.getFont("Arial").id, "get Font 1, by name");
|
|
94
|
+
assert.equal(1, fonts1.getFont("arial").id, "get Font 1, by name case insensitive");
|
|
95
|
+
assert.equal(FontType.Rsc, fonts1.getFont(2).type, "get font 2 type is Rsc");
|
|
96
|
+
assert.equal("Font0", fonts1.getFont(2).name, "get Font 2 name");
|
|
97
|
+
assert.equal(2, fonts1.getFont("Font0").id, "get Font 2, by name");
|
|
98
|
+
assert.equal(2, fonts1.getFont("fOnt0").id, "get Font 2, by name case insensitive");
|
|
99
|
+
assert.equal(FontType.Shx, fonts1.getFont(3).type, "get font 1 type is Shx");
|
|
100
|
+
assert.equal("ShxFont0", fonts1.getFont(3).name, "get Font 3 name");
|
|
101
|
+
assert.equal(3, fonts1.getFont("ShxFont0").id, "get Font 3, by name");
|
|
102
|
+
assert.equal(3, fonts1.getFont("shxfont0").id, "get Font 3, by name case insensitive");
|
|
103
|
+
assert.equal(FontType.TrueType, fonts1.getFont(4).type, "get font 4 type is TrueType");
|
|
104
|
+
assert.equal("Calibri", fonts1.getFont(4).name, "get Font 4 name");
|
|
105
|
+
assert.equal(4, fonts1.getFont("Calibri").id, "get Font 4, by name");
|
|
106
|
+
assert.equal(4, fonts1.getFont("cAlIbRi").id, "get Font 4, by name case insensitive");
|
|
107
|
+
assert.isUndefined(fonts1.getFont("notfound"), "attempt lookup of a font that should not be found");
|
|
108
|
+
assert.deepEqual(new FontMap(fonts1.toJSON()), fonts1, "toJSON on FontMap"); // eslint-disable-line @typescript-eslint/no-deprecated
|
|
109
|
+
});
|
|
110
|
+
it("should get metadata for a relationship", async () => {
|
|
111
|
+
const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "metadata-relationshipMetadata.bim");
|
|
112
|
+
const imodel = trackMutableIModel(SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "relationshipMetadata" } }));
|
|
113
|
+
await withEditTxn(imodel, async (txn) => {
|
|
114
|
+
const partitionId = txn.insertElement({
|
|
115
|
+
classFullName: "BisCore:PhysicalPartition",
|
|
116
|
+
model: IModel.repositoryModelId,
|
|
117
|
+
parent: {
|
|
118
|
+
relClassName: "BisCore:SubjectOwnsPartitionElements",
|
|
119
|
+
id: IModel.rootSubjectId,
|
|
120
|
+
},
|
|
121
|
+
code: new Code({
|
|
122
|
+
spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,
|
|
123
|
+
scope: IModel.rootSubjectId,
|
|
124
|
+
value: "physical model",
|
|
125
|
+
}),
|
|
126
|
+
});
|
|
127
|
+
for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {
|
|
128
|
+
const relId = txn.insertRelationship({
|
|
129
|
+
classFullName: "BisCore:ElementHasLinks",
|
|
130
|
+
sourceId: partitionId,
|
|
131
|
+
targetId: row.ECInstanceId,
|
|
132
|
+
});
|
|
133
|
+
const relationship = imodel.relationships.getInstance("BisCore:ElementHasLinks", relId);
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
135
|
+
const metadata = await relationship.getMetaData();
|
|
136
|
+
assert.isDefined(metadata, "metadata should be defined");
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
it("should get metadata for class", () => {
|
|
141
|
+
const imodel1 = testBimReadonly;
|
|
142
|
+
const metaData = imodel1.schemaContext.getSchemaItemSync(Element.classFullName, EntityClass);
|
|
143
|
+
assert.exists(metaData);
|
|
144
|
+
if (metaData !== undefined)
|
|
145
|
+
checkElementMetaData(metaData);
|
|
146
|
+
});
|
|
147
|
+
it("should iterate through metadata for a relationship", async () => {
|
|
148
|
+
const imodelPath = IModelTestUtils.prepareOutputFile("IModel", "metadata-relationshipMetadata-iterate.bim");
|
|
149
|
+
const imodel = trackMutableIModel(SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: "relationshipMetadata" } }));
|
|
150
|
+
await withEditTxn(imodel, async (txn) => {
|
|
151
|
+
const partitionId = txn.insertElement({
|
|
152
|
+
classFullName: "BisCore:PhysicalPartition",
|
|
153
|
+
model: IModel.repositoryModelId,
|
|
154
|
+
parent: {
|
|
155
|
+
relClassName: "BisCore:SubjectOwnsPartitionElements",
|
|
156
|
+
id: IModel.rootSubjectId,
|
|
157
|
+
},
|
|
158
|
+
code: new Code({
|
|
159
|
+
spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,
|
|
160
|
+
scope: IModel.rootSubjectId,
|
|
161
|
+
value: "physical model",
|
|
162
|
+
}),
|
|
163
|
+
});
|
|
164
|
+
for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {
|
|
165
|
+
const relId = txn.insertRelationship({
|
|
166
|
+
classFullName: "BisCore:ElementHasLinks",
|
|
167
|
+
sourceId: partitionId,
|
|
168
|
+
targetId: row.ECInstanceId,
|
|
169
|
+
});
|
|
170
|
+
const relationship = imodel.relationships.getInstance("BisCore:ElementHasLinks", relId);
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
172
|
+
relationship.forEach((propName, propMeta) => {
|
|
173
|
+
assert.isDefined(propName, "Property name should be defined");
|
|
174
|
+
assert.isDefined(propMeta, "Property metadata should be defined");
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
it("should get metadata for CA class just as well (and we'll see a array-typed property)", () => {
|
|
180
|
+
const imodel1 = testBimReadonly;
|
|
181
|
+
const metaData = imodel1.schemaContext.getSchemaItemSync("BisCore.ClassHasHandler", CustomAttributeClass);
|
|
182
|
+
assert.exists(metaData);
|
|
183
|
+
if (metaData !== undefined) {
|
|
184
|
+
assert.equal(metaData.schemaItemType, SchemaItemType.CustomAttributeClass);
|
|
185
|
+
checkClassHasHandlerMetaData(metaData);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
it("validate BisCodeSpecs", async () => {
|
|
189
|
+
const imodel2 = compatibilityReadonly;
|
|
190
|
+
assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.nullCodeSpec).scopeType, CodeScopeSpec.Type.Repository);
|
|
191
|
+
assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subCategory).scopeType, CodeScopeSpec.Type.ParentElement);
|
|
192
|
+
assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.viewDefinition).scopeType, CodeScopeSpec.Type.Model);
|
|
193
|
+
assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subject).scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);
|
|
194
|
+
});
|
|
195
|
+
it("should create and insert CodeSpecs", () => {
|
|
196
|
+
const testImodel = trackMutableIModel(createIModelFromSeed("metadata-create-CodeSpecs.bim", "CompatibilityTestSeed.bim"));
|
|
197
|
+
const txn = new EditTxn(testImodel, "create and insert CodeSpecs");
|
|
198
|
+
txn.start();
|
|
199
|
+
const codeSpec = CodeSpec.create(testImodel, "CodeSpec1", CodeScopeSpec.Type.Model);
|
|
200
|
+
const codeSpecId = testImodel.codeSpecs.insert(txn, codeSpec); // throws in case of error
|
|
201
|
+
assert.deepEqual(codeSpecId, codeSpec.id);
|
|
202
|
+
assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);
|
|
203
|
+
assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);
|
|
204
|
+
// Should not be able to insert a duplicate.
|
|
205
|
+
const codeSpecDup = CodeSpec.create(testImodel, "CodeSpec1", CodeScopeSpec.Type.Model);
|
|
206
|
+
assert.throws(() => testImodel.codeSpecs.insert(txn, codeSpecDup), "CodeSpec already exists");
|
|
207
|
+
// We should be able to insert another CodeSpec with a different name.
|
|
208
|
+
const codeSpec2 = CodeSpec.create(testImodel, "CodeSpec2", CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);
|
|
209
|
+
const codeSpec2Id = testImodel.codeSpecs.insert(txn, codeSpec2); // throws in case of error
|
|
210
|
+
assert.deepEqual(codeSpec2Id, codeSpec2.id);
|
|
211
|
+
assert.notDeepEqual(codeSpec2Id, codeSpecId);
|
|
212
|
+
// make sure CodeScopeSpec.Type.Repository works
|
|
213
|
+
const codeSpec3 = CodeSpec.create(testImodel, "CodeSpec3", CodeScopeSpec.Type.Repository, CodeScopeSpec.ScopeRequirement.FederationGuid);
|
|
214
|
+
const codeSpec3Id = testImodel.codeSpecs.insert(txn, codeSpec3); // throws in case of error
|
|
215
|
+
assert.notDeepEqual(codeSpec2Id, codeSpec3Id);
|
|
216
|
+
const codeSpec4 = testImodel.codeSpecs.getById(codeSpec3Id);
|
|
217
|
+
codeSpec4.name = "CodeSpec4";
|
|
218
|
+
const codeSpec4Id = testImodel.codeSpecs.insert(txn, codeSpec4); // throws in case of error
|
|
219
|
+
assert.notDeepEqual(codeSpec3Id, codeSpec4Id);
|
|
220
|
+
assert.equal(codeSpec4.scopeType, CodeScopeSpec.Type.Repository);
|
|
221
|
+
assert.equal(codeSpec4.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);
|
|
222
|
+
const copyOfCodeSpec4 = testImodel.codeSpecs.getById(codeSpec4Id);
|
|
223
|
+
assert.deepEqual(codeSpec4, copyOfCodeSpec4);
|
|
224
|
+
assert.isTrue(testImodel.codeSpecs.hasName("CodeSpec1"));
|
|
225
|
+
assert.isTrue(testImodel.codeSpecs.hasName("CodeSpec2"));
|
|
226
|
+
assert.isTrue(testImodel.codeSpecs.hasName("CodeSpec3"));
|
|
227
|
+
assert.isTrue(testImodel.codeSpecs.hasName("CodeSpec4"));
|
|
228
|
+
assert.isFalse(testImodel.codeSpecs.hasName("CodeSpec5"));
|
|
229
|
+
assert.isTrue(testImodel.codeSpecs.hasId(codeSpec.id));
|
|
230
|
+
assert.isTrue(testImodel.codeSpecs.hasId(codeSpec2.id));
|
|
231
|
+
assert.isTrue(testImodel.codeSpecs.hasId(codeSpec3.id));
|
|
232
|
+
assert.isTrue(testImodel.codeSpecs.hasId(codeSpec4.id));
|
|
233
|
+
assert.isFalse(testImodel.codeSpecs.hasId(Id64.invalid));
|
|
234
|
+
txn.end();
|
|
235
|
+
});
|
|
236
|
+
it("validate CodeSpec properties", async () => {
|
|
237
|
+
const iModelFileName = IModelTestUtils.prepareOutputFile("IModel", "metadata-ReadWriteCodeSpec.bim");
|
|
238
|
+
const codeSpecName = "CodeSpec1";
|
|
239
|
+
// Write new CodeSpec to iModel
|
|
240
|
+
if (true) {
|
|
241
|
+
const iModelDb = trackMutableIModel(IModelTestUtils.createSnapshotFromSeed(iModelFileName, IModelTestUtils.resolveAssetFile("CompatibilityTestSeed.bim")));
|
|
242
|
+
const codeSpec = CodeSpec.create(iModelDb, codeSpecName, CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);
|
|
243
|
+
const codeSpecId = withEditTxn(iModelDb, (txn) => iModelDb.codeSpecs.insert(txn, codeSpec));
|
|
244
|
+
assert.isTrue(Id64.isValidId64(codeSpec.id));
|
|
245
|
+
assert.equal(codeSpec.id, codeSpecId);
|
|
246
|
+
assert.equal(codeSpec.name, codeSpecName);
|
|
247
|
+
assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);
|
|
248
|
+
assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);
|
|
249
|
+
iModelDb.close();
|
|
250
|
+
}
|
|
251
|
+
// Reopen iModel (ensure CodeSpec cache is cleared) and reconfirm CodeSpec properties
|
|
252
|
+
if (true) {
|
|
253
|
+
const iModelDb = trackMutableIModel(SnapshotDb.openFile(iModelFileName));
|
|
254
|
+
const codeSpec = iModelDb.codeSpecs.getByName(codeSpecName);
|
|
255
|
+
assert.isTrue(Id64.isValidId64(codeSpec.id));
|
|
256
|
+
assert.equal(codeSpec.name, codeSpecName);
|
|
257
|
+
assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);
|
|
258
|
+
assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);
|
|
259
|
+
iModelDb.close();
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
it("should import schemas", async () => {
|
|
263
|
+
const imodel1 = trackMutableIModel(await importTestBim(createIModelFromSeed("metadata-import-schemas.bim", "test.bim")));
|
|
264
|
+
const metaData = await imodel1.schemaContext.getSchemaItem("TestBim:TestDocument", EntityClass);
|
|
265
|
+
assert.isDefined(metaData);
|
|
266
|
+
if (metaData !== undefined) {
|
|
267
|
+
const property = await metaData.getProperty("testDocumentProperty");
|
|
268
|
+
assert.isDefined(property);
|
|
269
|
+
if (property !== undefined)
|
|
270
|
+
assert.isDefined(property.propertyType, propertyTypeToString(PropertyType.Integer));
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
//# sourceMappingURL=IModelMetadata.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelMetadata.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelMetadata.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { BisCodeSpec, Code, CodeScopeSpec, CodeSpec, FontMap, FontType, IModel } from \"@itwin/core-common\";\r\nimport { CustomAttributeClass, EntityClass, PrimitiveArrayProperty, PrimitiveOrEnumPropertyBase, PropertyType, propertyTypeToString, SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport { EditTxn, withEditTxn } from \"../../EditTxn\";\r\nimport { BisCoreSchema, Category, ClassRegistry, Element, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { closeIfOpen, createIModelFromSeed, createMutableIModelTracker, importTestBim, openReadonlySeedCopy } from \"./IModelTestFixtures\";\r\n\r\n\r\ndescribe(\"iModel metadata and schemas\", () => {\r\n let testBimReadonly: SnapshotDb;\r\n let compatibilityReadonly: SnapshotDb;\r\n const { trackMutableIModel, closeTrackedIModels } = createMutableIModelTracker();\r\n\r\n before(async () => {\r\n await TestUtils.startBackend();\r\n IModelTestUtils.registerTestBimSchema();\r\n\r\n testBimReadonly = await openReadonlySeedCopy(\"metadata-test.bim\", \"test.bim\", { importTestBim: true });\r\n compatibilityReadonly = await openReadonlySeedCopy(\"metadata-CompatibilityTestSeed.bim\", \"CompatibilityTestSeed.bim\");\r\n });\r\n\r\n after(() => {\r\n closeIfOpen(testBimReadonly, compatibilityReadonly);\r\n closeTrackedIModels();\r\n });\r\n\r\n afterEach(() => {\r\n closeTrackedIModels();\r\n });\r\n\r\n function checkElementMetaData(entityClass: EntityClass) {\r\n assert.isNotNull(entityClass);\r\n assert.equal(entityClass.fullName, Element.classFullName.replace(\":\", \".\"));\r\n assert.isUndefined(entityClass.baseClass);\r\n\r\n let foundClassHasHandler = false;\r\n let foundClassHasCurrentTimeStampProperty = false;\r\n if (entityClass.customAttributes !== undefined) {\r\n if (entityClass.customAttributes.has(\"BisCore.ClassHasHandler\"))\r\n foundClassHasHandler = true;\r\n if (entityClass.customAttributes.has(\"CoreCustomAttributes.ClassHasCurrentTimeStampProperty\"))\r\n foundClassHasCurrentTimeStampProperty = true;\r\n }\r\n assert.isTrue(foundClassHasHandler);\r\n assert.isTrue(foundClassHasCurrentTimeStampProperty);\r\n const federationGuid = entityClass.getPropertySync(\"federationGuid\", false);\r\n if (federationGuid !== undefined) {\r\n assert.isTrue(federationGuid.isPrimitive());\r\n assert.equal(federationGuid.propertyType, PropertyType.Binary);\r\n assert.equal((federationGuid as PrimitiveOrEnumPropertyBase).extendedTypeName, \"BeGuid\");\r\n }\r\n }\r\n\r\n function checkClassHasHandlerMetaData(classToCheck: CustomAttributeClass) {\r\n assert.isDefined(classToCheck);\r\n\r\n const propertiesArray = Array.from(classToCheck.getPropertiesSync(true));\r\n assert.equal(propertiesArray.length, 1);\r\n\r\n const restrictionProperty = propertiesArray[0];\r\n assert.isDefined(restrictionProperty);\r\n assert.equal(restrictionProperty.name, \"Restrictions\");\r\n assert.equal(propertyTypeToString(restrictionProperty.propertyType), \"PrimitiveArrayProperty\");\r\n assert.equal((restrictionProperty as PrimitiveArrayProperty).minOccurs, 0);\r\n }\r\n\r\n it(\"should use schema to look up classes by name\", () => {\r\n const elementClass = ClassRegistry.findRegisteredClass(Element.classFullName);\r\n const categoryClass = ClassRegistry.findRegisteredClass(Category.classFullName);\r\n assert.isDefined(elementClass);\r\n assert.isDefined(categoryClass);\r\n assert.equal(elementClass!.schema, BisCoreSchema);\r\n assert.equal(categoryClass!.schema, BisCoreSchema);\r\n assert.equal(elementClass!.className, \"Element\");\r\n assert.equal(categoryClass!.className, \"Category\");\r\n });\r\n\r\n it(\"Fonts\", async () => {\r\n const imodel1 = trackMutableIModel(await importTestBim(createIModelFromSeed(\"metadata-fonts.bim\", \"test.bim\")));\r\n const dbFonts = imodel1.fonts;\r\n expect(Array.from(dbFonts.queryMappedFamilies({ includeNonEmbedded: true })).length).to.equal(4);\r\n expect(dbFonts.findDescriptor(1)).to.deep.equal({ name: \"Arial\", type: FontType.TrueType });\r\n expect(dbFonts.findId({ name: \"Arial\" })).to.equal(1);\r\n expect(dbFonts.findId({ name: \"arial\" })).to.equal(1);\r\n\r\n expect(dbFonts.findDescriptor(2)).to.deep.equal({ name: \"Font0\", type: FontType.Rsc });\r\n expect(dbFonts.findId({ name: \"Font0\" })).to.equal(2);\r\n expect(dbFonts.findId({ name: \"fOnt0\" })).to.equal(2);\r\n\r\n expect(dbFonts.findDescriptor(3)).to.deep.equal({ name: \"ShxFont0\", type: FontType.Shx });\r\n expect(dbFonts.findId({ name: \"ShxFont0\" })).to.equal(3);\r\n expect(dbFonts.findId({ name: \"shxfont0\" })).to.equal(3);\r\n\r\n expect(dbFonts.findDescriptor(4)).to.deep.equal({ name: \"Calibri\", type: FontType.TrueType });\r\n expect(dbFonts.findId({ name: \"Calibri\" })).to.equal(4);\r\n expect(dbFonts.findId({ name: \"cAlIbRi\" })).to.equal(4);\r\n\r\n expect(dbFonts.findId({ name: \"notfound\" })).to.be.undefined;\r\n\r\n const fonts1 = imodel1.fontMap; // eslint-disable-line @typescript-eslint/no-deprecated\r\n assert.equal(fonts1.fonts.size, 4, \"font map size should be 4\");\r\n assert.equal(FontType.TrueType, fonts1.getFont(1)!.type, \"get font 1 type is TrueType\");\r\n assert.equal(\"Arial\", fonts1.getFont(1)!.name, \"get Font 1 name\");\r\n assert.equal(1, fonts1.getFont(\"Arial\")!.id, \"get Font 1, by name\");\r\n assert.equal(1, fonts1.getFont(\"arial\")!.id, \"get Font 1, by name case insensitive\");\r\n\r\n assert.equal(FontType.Rsc, fonts1.getFont(2)!.type, \"get font 2 type is Rsc\");\r\n assert.equal(\"Font0\", fonts1.getFont(2)!.name, \"get Font 2 name\");\r\n assert.equal(2, fonts1.getFont(\"Font0\")!.id, \"get Font 2, by name\");\r\n assert.equal(2, fonts1.getFont(\"fOnt0\")!.id, \"get Font 2, by name case insensitive\");\r\n\r\n assert.equal(FontType.Shx, fonts1.getFont(3)!.type, \"get font 1 type is Shx\");\r\n assert.equal(\"ShxFont0\", fonts1.getFont(3)!.name, \"get Font 3 name\");\r\n assert.equal(3, fonts1.getFont(\"ShxFont0\")!.id, \"get Font 3, by name\");\r\n assert.equal(3, fonts1.getFont(\"shxfont0\")!.id, \"get Font 3, by name case insensitive\");\r\n\r\n assert.equal(FontType.TrueType, fonts1.getFont(4)!.type, \"get font 4 type is TrueType\");\r\n assert.equal(\"Calibri\", fonts1.getFont(4)!.name, \"get Font 4 name\");\r\n assert.equal(4, fonts1.getFont(\"Calibri\")!.id, \"get Font 4, by name\");\r\n assert.equal(4, fonts1.getFont(\"cAlIbRi\")!.id, \"get Font 4, by name case insensitive\");\r\n\r\n assert.isUndefined(fonts1.getFont(\"notfound\"), \"attempt lookup of a font that should not be found\");\r\n\r\n assert.deepEqual(new FontMap(fonts1.toJSON()), fonts1, \"toJSON on FontMap\"); // eslint-disable-line @typescript-eslint/no-deprecated\r\n });\r\n\r\n it(\"should get metadata for a relationship\", async () => {\r\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"metadata-relationshipMetadata.bim\");\r\n const imodel = trackMutableIModel(SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"relationshipMetadata\" } }));\r\n\r\n await withEditTxn(imodel, async (txn) => {\r\n const partitionId = txn.insertElement({\r\n classFullName: \"BisCore:PhysicalPartition\",\r\n model: IModel.repositoryModelId,\r\n parent: {\r\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\r\n id: IModel.rootSubjectId,\r\n },\r\n code: new Code({\r\n spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,\r\n scope: IModel.rootSubjectId,\r\n value: \"physical model\",\r\n }),\r\n });\r\n\r\n for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {\r\n const relId = txn.insertRelationship({\r\n classFullName: \"BisCore:ElementHasLinks\",\r\n sourceId: partitionId,\r\n targetId: row.ECInstanceId,\r\n });\r\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementHasLinks\", relId);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const metadata = await relationship.getMetaData();\r\n assert.isDefined(metadata, \"metadata should be defined\");\r\n }\r\n });\r\n });\r\n\r\n it(\"should get metadata for class\", () => {\r\n const imodel1 = testBimReadonly;\r\n const metaData = imodel1.schemaContext.getSchemaItemSync(Element.classFullName, EntityClass);\r\n assert.exists(metaData);\r\n if (metaData !== undefined)\r\n checkElementMetaData(metaData);\r\n });\r\n\r\n it(\"should iterate through metadata for a relationship\", async () => {\r\n const imodelPath = IModelTestUtils.prepareOutputFile(\"IModel\", \"metadata-relationshipMetadata-iterate.bim\");\r\n const imodel = trackMutableIModel(SnapshotDb.createEmpty(imodelPath, { rootSubject: { name: \"relationshipMetadata\" } }));\r\n\r\n await withEditTxn(imodel, async (txn) => {\r\n const partitionId = txn.insertElement({\r\n classFullName: \"BisCore:PhysicalPartition\",\r\n model: IModel.repositoryModelId,\r\n parent: {\r\n relClassName: \"BisCore:SubjectOwnsPartitionElements\",\r\n id: IModel.rootSubjectId,\r\n },\r\n code: new Code({\r\n spec: imodel.codeSpecs.getByName(BisCodeSpec.informationPartitionElement).id,\r\n scope: IModel.rootSubjectId,\r\n value: \"physical model\",\r\n }),\r\n });\r\n\r\n for await (const row of imodel.createQueryReader(`SELECT * FROM bis.Element LIMIT ${1}`)) {\r\n const relId = txn.insertRelationship({\r\n classFullName: \"BisCore:ElementHasLinks\",\r\n sourceId: partitionId,\r\n targetId: row.ECInstanceId,\r\n });\r\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementHasLinks\", relId);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n relationship.forEach((propName, propMeta) => {\r\n assert.isDefined(propName, \"Property name should be defined\");\r\n assert.isDefined(propMeta, \"Property metadata should be defined\");\r\n });\r\n }\r\n });\r\n });\r\n\r\n it(\"should get metadata for CA class just as well (and we'll see a array-typed property)\", () => {\r\n const imodel1 = testBimReadonly;\r\n const metaData = imodel1.schemaContext.getSchemaItemSync(\"BisCore.ClassHasHandler\", CustomAttributeClass);\r\n assert.exists(metaData);\r\n if (metaData !== undefined) {\r\n assert.equal(metaData.schemaItemType, SchemaItemType.CustomAttributeClass);\r\n checkClassHasHandlerMetaData(metaData);\r\n }\r\n });\r\n\r\n it(\"validate BisCodeSpecs\", async () => {\r\n const imodel2 = compatibilityReadonly;\r\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.nullCodeSpec).scopeType, CodeScopeSpec.Type.Repository);\r\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subCategory).scopeType, CodeScopeSpec.Type.ParentElement);\r\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.viewDefinition).scopeType, CodeScopeSpec.Type.Model);\r\n assert.equal(imodel2.codeSpecs.getByName(BisCodeSpec.subject).scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);\r\n });\r\n\r\n it(\"should create and insert CodeSpecs\", () => {\r\n const testImodel = trackMutableIModel(createIModelFromSeed(\"metadata-create-CodeSpecs.bim\", \"CompatibilityTestSeed.bim\"));\r\n const txn = new EditTxn(testImodel, \"create and insert CodeSpecs\");\r\n txn.start();\r\n const codeSpec = CodeSpec.create(testImodel, \"CodeSpec1\", CodeScopeSpec.Type.Model);\r\n const codeSpecId = testImodel.codeSpecs.insert(txn, codeSpec); // throws in case of error\r\n assert.deepEqual(codeSpecId, codeSpec.id);\r\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\r\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.ElementId);\r\n\r\n // Should not be able to insert a duplicate.\r\n const codeSpecDup = CodeSpec.create(testImodel, \"CodeSpec1\", CodeScopeSpec.Type.Model);\r\n assert.throws(() => testImodel.codeSpecs.insert(txn, codeSpecDup), \"CodeSpec already exists\");\r\n\r\n // We should be able to insert another CodeSpec with a different name.\r\n const codeSpec2 = CodeSpec.create(testImodel, \"CodeSpec2\", CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);\r\n const codeSpec2Id = testImodel.codeSpecs.insert(txn, codeSpec2); // throws in case of error\r\n assert.deepEqual(codeSpec2Id, codeSpec2.id);\r\n assert.notDeepEqual(codeSpec2Id, codeSpecId);\r\n\r\n // make sure CodeScopeSpec.Type.Repository works\r\n const codeSpec3 = CodeSpec.create(testImodel, \"CodeSpec3\", CodeScopeSpec.Type.Repository, CodeScopeSpec.ScopeRequirement.FederationGuid);\r\n const codeSpec3Id = testImodel.codeSpecs.insert(txn, codeSpec3); // throws in case of error\r\n assert.notDeepEqual(codeSpec2Id, codeSpec3Id);\r\n\r\n const codeSpec4 = testImodel.codeSpecs.getById(codeSpec3Id);\r\n codeSpec4.name = \"CodeSpec4\";\r\n const codeSpec4Id = testImodel.codeSpecs.insert(txn, codeSpec4); // throws in case of error\r\n assert.notDeepEqual(codeSpec3Id, codeSpec4Id);\r\n assert.equal(codeSpec4.scopeType, CodeScopeSpec.Type.Repository);\r\n assert.equal(codeSpec4.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\r\n const copyOfCodeSpec4 = testImodel.codeSpecs.getById(codeSpec4Id);\r\n assert.deepEqual(codeSpec4, copyOfCodeSpec4);\r\n\r\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec1\"));\r\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec2\"));\r\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec3\"));\r\n assert.isTrue(testImodel.codeSpecs.hasName(\"CodeSpec4\"));\r\n assert.isFalse(testImodel.codeSpecs.hasName(\"CodeSpec5\"));\r\n\r\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec.id));\r\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec2.id));\r\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec3.id));\r\n assert.isTrue(testImodel.codeSpecs.hasId(codeSpec4.id));\r\n assert.isFalse(testImodel.codeSpecs.hasId(Id64.invalid));\r\n txn.end();\r\n });\r\n\r\n it(\"validate CodeSpec properties\", async () => {\r\n const iModelFileName: string = IModelTestUtils.prepareOutputFile(\"IModel\", \"metadata-ReadWriteCodeSpec.bim\");\r\n const codeSpecName = \"CodeSpec1\";\r\n\r\n // Write new CodeSpec to iModel\r\n if (true) {\r\n const iModelDb = trackMutableIModel(IModelTestUtils.createSnapshotFromSeed(iModelFileName, IModelTestUtils.resolveAssetFile(\"CompatibilityTestSeed.bim\")));\r\n const codeSpec = CodeSpec.create(iModelDb, codeSpecName, CodeScopeSpec.Type.Model, CodeScopeSpec.ScopeRequirement.FederationGuid);\r\n const codeSpecId = withEditTxn(iModelDb, (txn) => iModelDb.codeSpecs.insert(txn, codeSpec));\r\n assert.isTrue(Id64.isValidId64(codeSpec.id));\r\n assert.equal(codeSpec.id, codeSpecId);\r\n assert.equal(codeSpec.name, codeSpecName);\r\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\r\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\r\n iModelDb.close();\r\n }\r\n\r\n // Reopen iModel (ensure CodeSpec cache is cleared) and reconfirm CodeSpec properties\r\n if (true) {\r\n const iModelDb = trackMutableIModel(SnapshotDb.openFile(iModelFileName));\r\n const codeSpec = iModelDb.codeSpecs.getByName(codeSpecName);\r\n assert.isTrue(Id64.isValidId64(codeSpec.id));\r\n assert.equal(codeSpec.name, codeSpecName);\r\n assert.equal(codeSpec.scopeType, CodeScopeSpec.Type.Model);\r\n assert.equal(codeSpec.scopeReq, CodeScopeSpec.ScopeRequirement.FederationGuid);\r\n iModelDb.close();\r\n }\r\n });\r\n\r\n it(\"should import schemas\", async () => {\r\n const imodel1 = trackMutableIModel(await importTestBim(createIModelFromSeed(\"metadata-import-schemas.bim\", \"test.bim\")));\r\n const metaData = await imodel1.schemaContext.getSchemaItem(\"TestBim:TestDocument\", EntityClass);\r\n assert.isDefined(metaData);\r\n if (metaData !== undefined) {\r\n const property = await metaData.getProperty(\"testDocumentProperty\");\r\n assert.isDefined(property);\r\n if (property !== undefined)\r\n assert.isDefined(property.propertyType, propertyTypeToString(PropertyType.Integer));\r\n }\r\n });\r\n});\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModelModels.test.d.ts","sourceRoot":"","sources":["../../../../src/test/imodel/IModelModels.test.ts"],"names":[],"mappings":""}
|