@itwin/core-backend 5.10.0-dev.8 → 5.10.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/CHANGELOG.md +45 -1
- package/lib/cjs/BriefcaseManager.d.ts +8 -1
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +4 -4
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts +6 -6
- package/lib/cjs/ChangesetECAdaptor.js +4 -4
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.d.ts +84 -1
- package/lib/cjs/ChangesetReader.d.ts.map +1 -1
- package/lib/cjs/ChangesetReader.js +108 -12
- package/lib/cjs/ChangesetReader.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +3 -3
- package/lib/cjs/ClassRegistry.js +3 -3
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +3 -3
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +2 -2
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +4 -0
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js +1 -0
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/Element.d.ts +16 -13
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +8 -5
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +5 -5
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.d.ts +13 -5
- package/lib/cjs/Entity.d.ts.map +1 -1
- package/lib/cjs/Entity.js +13 -5
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/ExternalSource.d.ts +2 -2
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +112 -40
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +215 -42
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +6 -6
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.d.ts +6 -0
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +23 -0
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/Material.d.ts +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +6 -6
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +13 -11
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +9 -7
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/SheetIndex.d.ts +4 -4
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +7 -0
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +6 -6
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js +2 -3
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +6 -2
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +1 -0
- package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/GenericElements.d.ts +2 -2
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js +23 -4
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/HubMock.d.ts +24 -1
- package/lib/cjs/internal/HubMock.d.ts.map +1 -1
- package/lib/cjs/internal/HubMock.js +60 -39
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.d.ts +19 -1
- package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +55 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +1 -2
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +55 -9
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +7 -11
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.d.ts +20 -3
- package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +3 -1
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +8 -1
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts +6 -6
- package/lib/esm/ChangesetECAdaptor.js +4 -4
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.d.ts +84 -1
- package/lib/esm/ChangesetReader.d.ts.map +1 -1
- package/lib/esm/ChangesetReader.js +108 -12
- package/lib/esm/ChangesetReader.js.map +1 -1
- package/lib/esm/ClassRegistry.d.ts +3 -3
- package/lib/esm/ClassRegistry.js +3 -3
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +3 -3
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +2 -2
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +4 -0
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/esm/ECSqlSyncReader.js +1 -0
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/Element.d.ts +16 -13
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +8 -5
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts +5 -5
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.d.ts +13 -5
- package/lib/esm/Entity.d.ts.map +1 -1
- package/lib/esm/Entity.js +13 -5
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/ExternalSource.d.ts +2 -2
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +112 -40
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +216 -43
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +6 -6
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.d.ts +6 -0
- package/lib/esm/LocalHub.d.ts.map +1 -1
- package/lib/esm/LocalHub.js +23 -0
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/Material.d.ts +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +6 -6
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/Relationship.d.ts +13 -11
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +9 -7
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/SheetIndex.d.ts +4 -4
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +7 -0
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +6 -6
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js +2 -3
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.d.ts +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/GenericElements.d.ts +2 -2
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js +23 -4
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/HubMock.d.ts +24 -1
- package/lib/esm/internal/HubMock.d.ts.map +1 -1
- package/lib/esm/internal/HubMock.js +61 -40
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.d.ts +19 -1
- package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +55 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js +55 -9
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +7 -11
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js +60 -0
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts +2 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts.map +1 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +239 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -0
- package/lib/esm/test/annotations/FrameGeometry.test.js +2 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +1 -0
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js +10 -2
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +10 -0
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +1 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +13 -0
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +1 -0
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js +6 -2
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +5 -0
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js +1 -0
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +10 -0
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +1 -0
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +31 -0
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +3 -0
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js +2 -0
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewHidden.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.js +275 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.js +184 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js +141 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.js +475 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -0
- package/lib/esm/test/standalone/ChangesetReader.test.js +945 -337
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DeleteElements.test.js +45 -0
- package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +6 -0
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js +62 -0
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js +2 -0
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js +397 -0
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js +23 -0
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.d.ts +20 -3
- package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +3 -1
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/package.json +15 -15
|
@@ -0,0 +1,141 @@
|
|
|
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 { Guid } from "@itwin/core-bentley";
|
|
6
|
+
import { expect } from "chai";
|
|
7
|
+
import { ChannelControl } from "../../ChannelControl";
|
|
8
|
+
import { HubMock } from "../../internal/HubMock";
|
|
9
|
+
import { HubWrappers } from "../IModelTestUtils";
|
|
10
|
+
import { KnownTestLocations } from "../KnownTestLocations";
|
|
11
|
+
import { TestUtils } from "../TestUtils";
|
|
12
|
+
/** Simple test schema that will be imported to test cache lifecycle. */
|
|
13
|
+
const testSchemaV1 = `<?xml version="1.0" encoding="UTF-8"?>
|
|
14
|
+
<ECSchema schemaName="SchemaViewLifecycleTest" alias="rslt" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
15
|
+
<ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
|
|
16
|
+
<ECEntityClass typeName="TestElement">
|
|
17
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
18
|
+
<ECProperty propertyName="PropA" typeName="string"/>
|
|
19
|
+
</ECEntityClass>
|
|
20
|
+
</ECSchema>`;
|
|
21
|
+
/** Updated schema with an additional property. */
|
|
22
|
+
const testSchemaV2 = `<?xml version="1.0" encoding="UTF-8"?>
|
|
23
|
+
<ECSchema schemaName="SchemaViewLifecycleTest" alias="rslt" version="01.00.01" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
24
|
+
<ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>
|
|
25
|
+
<ECEntityClass typeName="TestElement">
|
|
26
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
27
|
+
<ECProperty propertyName="PropA" typeName="string"/>
|
|
28
|
+
<ECProperty propertyName="PropB" typeName="int"/>
|
|
29
|
+
</ECEntityClass>
|
|
30
|
+
</ECSchema>`;
|
|
31
|
+
describe("SchemaView lifecycle", () => {
|
|
32
|
+
let iModelId;
|
|
33
|
+
before(async () => {
|
|
34
|
+
HubMock.startup("SchemaViewLifecycle", KnownTestLocations.outputDir);
|
|
35
|
+
await TestUtils.shutdownBackend();
|
|
36
|
+
await TestUtils.startBackend();
|
|
37
|
+
});
|
|
38
|
+
after(async () => {
|
|
39
|
+
HubMock.shutdown();
|
|
40
|
+
await TestUtils.shutdownBackend();
|
|
41
|
+
await TestUtils.startBackend();
|
|
42
|
+
});
|
|
43
|
+
beforeEach(async () => {
|
|
44
|
+
iModelId = await HubWrappers.createIModel("user1", HubMock.iTwinId, `RSLifecycle-${Guid.createValue()}`);
|
|
45
|
+
});
|
|
46
|
+
afterEach(async () => {
|
|
47
|
+
await HubMock.deleteIModel({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
|
|
48
|
+
});
|
|
49
|
+
it("getSchemaView reflects imported schema after importSchemaStrings", async () => {
|
|
50
|
+
// Open a briefcase, get initial context
|
|
51
|
+
const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
|
|
52
|
+
bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
53
|
+
const ctx1 = await bc.getSchemaView();
|
|
54
|
+
expect(ctx1.findClass("SchemaViewLifecycleTest:TestElement")).to.be.undefined;
|
|
55
|
+
expect(ctx1.isOutdated).to.be.false;
|
|
56
|
+
// Import v1 schema - adds TestElement with PropA
|
|
57
|
+
// importSchemaStrings calls clearCaches which immediately invalidates _schemasPromise.
|
|
58
|
+
await bc.importSchemaStrings([testSchemaV1]);
|
|
59
|
+
// importSchemaStrings calls clearCaches which immediately invalidates the cached view
|
|
60
|
+
const ctx2 = await bc.getSchemaView();
|
|
61
|
+
expect(ctx1.isOutdated).to.be.true;
|
|
62
|
+
expect(ctx2.isOutdated).to.be.false;
|
|
63
|
+
const testClass1 = ctx2.findClass("SchemaViewLifecycleTest:TestElement");
|
|
64
|
+
expect(testClass1).to.not.be.undefined;
|
|
65
|
+
expect(testClass1.getOwnProperties().find((p) => p.name === "PropA")).to.not.be.undefined;
|
|
66
|
+
expect(testClass1.getOwnProperties().find((p) => p.name === "PropB")).to.be.undefined;
|
|
67
|
+
// Import v2 schema - adds PropB
|
|
68
|
+
await bc.importSchemaStrings([testSchemaV2]);
|
|
69
|
+
// cache is again invalidated automatically
|
|
70
|
+
const ctx3 = await bc.getSchemaView();
|
|
71
|
+
expect(ctx2.isOutdated).to.be.true;
|
|
72
|
+
expect(ctx3.isOutdated).to.be.false;
|
|
73
|
+
const testClass2 = ctx3.findClass("SchemaViewLifecycleTest:TestElement");
|
|
74
|
+
expect(testClass2).to.not.be.undefined;
|
|
75
|
+
expect(testClass2.getOwnProperties().find((p) => p.name === "PropB")).to.not.be.undefined;
|
|
76
|
+
bc.close();
|
|
77
|
+
});
|
|
78
|
+
it("getSchemas on second briefcase reflects schema pushed from first", async () => {
|
|
79
|
+
// bc1 imports a schema and pushes
|
|
80
|
+
const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
|
|
81
|
+
bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
82
|
+
await bc1.importSchemaStrings([testSchemaV1]);
|
|
83
|
+
await bc1.pushChanges({ accessToken: "user1", description: "push v1 schema" });
|
|
84
|
+
// bc2 pulls and should see the new schema
|
|
85
|
+
const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
|
|
86
|
+
bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
87
|
+
const ctx = await bc2.getSchemaView();
|
|
88
|
+
const testClass = ctx.findClass("SchemaViewLifecycleTest:TestElement");
|
|
89
|
+
expect(testClass).to.not.be.undefined;
|
|
90
|
+
expect(testClass.getOwnProperties().find((p) => p.name === "PropA")).to.not.be.undefined;
|
|
91
|
+
bc1.close();
|
|
92
|
+
bc2.close();
|
|
93
|
+
});
|
|
94
|
+
it("pullChanges invalidates cached SchemaView", async () => {
|
|
95
|
+
// bc1 will push schema changes; bc2 will pull them
|
|
96
|
+
const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
|
|
97
|
+
bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
98
|
+
const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
|
|
99
|
+
bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
100
|
+
// bc2 gets initial context (no test schema)
|
|
101
|
+
const ctxBefore = await bc2.getSchemaView();
|
|
102
|
+
expect(ctxBefore.findClass("SchemaViewLifecycleTest:TestElement")).to.be.undefined;
|
|
103
|
+
// bc1: import v1 + push
|
|
104
|
+
await bc1.importSchemaStrings([testSchemaV1]);
|
|
105
|
+
await bc1.pushChanges({ accessToken: "user1", description: "push v1" });
|
|
106
|
+
// bc2: pull changes
|
|
107
|
+
await bc2.pullChanges();
|
|
108
|
+
// After pulling a schema changeset, clearCaches is called which immediately nulls _schemasPromise.
|
|
109
|
+
const ctxAfterPull = await bc2.getSchemaView();
|
|
110
|
+
expect(ctxBefore.isOutdated).to.be.true;
|
|
111
|
+
const testClass = ctxAfterPull.findClass("SchemaViewLifecycleTest:TestElement");
|
|
112
|
+
expect(testClass).to.not.be.undefined;
|
|
113
|
+
// bc1: import v2 + push
|
|
114
|
+
await bc1.importSchemaStrings([testSchemaV2]);
|
|
115
|
+
await bc1.pushChanges({ accessToken: "user1", description: "push v2" });
|
|
116
|
+
// bc2: pull again
|
|
117
|
+
await bc2.pullChanges();
|
|
118
|
+
const ctxAfterPull2 = await bc2.getSchemaView();
|
|
119
|
+
expect(ctxAfterPull.isOutdated).to.be.true;
|
|
120
|
+
const updated = ctxAfterPull2.findClass("SchemaViewLifecycleTest:TestElement");
|
|
121
|
+
expect(updated).to.not.be.undefined;
|
|
122
|
+
expect(updated.getOwnProperties().find((p) => p.name === "PropB")).to.not.be.undefined;
|
|
123
|
+
bc1.close();
|
|
124
|
+
bc2.close();
|
|
125
|
+
});
|
|
126
|
+
it("concurrent getSchemaView calls share a single hydration", async () => {
|
|
127
|
+
const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId });
|
|
128
|
+
bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
129
|
+
// Fire multiple concurrent getSchemaView calls - they should all resolve to the same context
|
|
130
|
+
const [ctx1, ctx2, ctx3] = await Promise.all([
|
|
131
|
+
bc.getSchemaView(),
|
|
132
|
+
bc.getSchemaView(),
|
|
133
|
+
bc.getSchemaView(),
|
|
134
|
+
]);
|
|
135
|
+
expect(ctx1).to.equal(ctx2);
|
|
136
|
+
expect(ctx2).to.equal(ctx3);
|
|
137
|
+
expect(ctx1.isOutdated).to.be.false;
|
|
138
|
+
bc.close();
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=SchemaViewLifecycle.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaViewLifecycle.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewLifecycle.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 { Guid } from \"@itwin/core-bentley\";\nimport { expect } from \"chai\";\nimport { ChannelControl } from \"../../ChannelControl\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { HubWrappers } from \"../IModelTestUtils\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { TestUtils } from \"../TestUtils\";\n\n/** Simple test schema that will be imported to test cache lifecycle. */\nconst testSchemaV1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n/** Updated schema with an additional property. */\nconst testSchemaV2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"SchemaViewLifecycleTest\" alias=\"rslt\" version=\"01.00.01\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"TestElement\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"PropA\" typeName=\"string\"/>\n <ECProperty propertyName=\"PropB\" typeName=\"int\"/>\n </ECEntityClass>\n </ECSchema>`;\n\ndescribe(\"SchemaView lifecycle\", () => {\n let iModelId: string;\n\n before(async () => {\n HubMock.startup(\"SchemaViewLifecycle\", KnownTestLocations.outputDir);\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n after(async () => {\n HubMock.shutdown();\n await TestUtils.shutdownBackend();\n await TestUtils.startBackend();\n });\n\n beforeEach(async () => {\n iModelId = await HubWrappers.createIModel(\"user1\", HubMock.iTwinId, `RSLifecycle-${Guid.createValue()}`);\n });\n\n afterEach(async () => {\n await HubMock.deleteIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n });\n\n it(\"getSchemaView reflects imported schema after importSchemaStrings\", async () => {\n // Open a briefcase, get initial context\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const ctx1 = await bc.getSchemaView();\n expect(ctx1.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\n expect(ctx1.isOutdated).to.be.false;\n\n // Import v1 schema - adds TestElement with PropA\n // importSchemaStrings calls clearCaches which immediately invalidates _schemasPromise.\n await bc.importSchemaStrings([testSchemaV1]);\n\n // importSchemaStrings calls clearCaches which immediately invalidates the cached view\n const ctx2 = await bc.getSchemaView();\n expect(ctx1.isOutdated).to.be.true;\n expect(ctx2.isOutdated).to.be.false;\n\n const testClass1 = ctx2.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass1).to.not.be.undefined;\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\n expect(testClass1!.getOwnProperties().find((p) => p.name === \"PropB\")).to.be.undefined;\n\n // Import v2 schema - adds PropB\n await bc.importSchemaStrings([testSchemaV2]);\n\n // cache is again invalidated automatically\n const ctx3 = await bc.getSchemaView();\n expect(ctx2.isOutdated).to.be.true;\n expect(ctx3.isOutdated).to.be.false;\n\n const testClass2 = ctx3.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass2).to.not.be.undefined;\n expect(testClass2!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\n\n bc.close();\n });\n\n it(\"getSchemas on second briefcase reflects schema pushed from first\", async () => {\n // bc1 imports a schema and pushes\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n await bc1.importSchemaStrings([testSchemaV1]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1 schema\" });\n\n // bc2 pulls and should see the new schema\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n const ctx = await bc2.getSchemaView();\n const testClass = ctx.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass).to.not.be.undefined;\n expect(testClass!.getOwnProperties().find((p) => p.name === \"PropA\")).to.not.be.undefined;\n\n bc1.close();\n bc2.close();\n });\n\n it(\"pullChanges invalidates cached SchemaView\", async () => {\n // bc1 will push schema changes; bc2 will pull them\n const bc1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n const bc2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // bc2 gets initial context (no test schema)\n const ctxBefore = await bc2.getSchemaView();\n expect(ctxBefore.findClass(\"SchemaViewLifecycleTest:TestElement\")).to.be.undefined;\n\n // bc1: import v1 + push\n await bc1.importSchemaStrings([testSchemaV1]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v1\" });\n\n // bc2: pull changes\n await bc2.pullChanges();\n\n // After pulling a schema changeset, clearCaches is called which immediately nulls _schemasPromise.\n const ctxAfterPull = await bc2.getSchemaView();\n expect(ctxBefore.isOutdated).to.be.true;\n const testClass = ctxAfterPull.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(testClass).to.not.be.undefined;\n\n // bc1: import v2 + push\n await bc1.importSchemaStrings([testSchemaV2]);\n await bc1.pushChanges({ accessToken: \"user1\", description: \"push v2\" });\n\n // bc2: pull again\n await bc2.pullChanges();\n const ctxAfterPull2 = await bc2.getSchemaView();\n expect(ctxAfterPull.isOutdated).to.be.true;\n const updated = ctxAfterPull2.findClass(\"SchemaViewLifecycleTest:TestElement\");\n expect(updated).to.not.be.undefined;\n expect(updated!.getOwnProperties().find((p) => p.name === \"PropB\")).to.not.be.undefined;\n\n bc1.close();\n bc2.close();\n });\n\n it(\"concurrent getSchemaView calls share a single hydration\", async () => {\n const bc = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId });\n bc.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n\n // Fire multiple concurrent getSchemaView calls - they should all resolve to the same context\n const [ctx1, ctx2, ctx3] = await Promise.all([\n bc.getSchemaView(),\n bc.getSchemaView(),\n bc.getSchemaView(),\n ]);\n\n expect(ctx1).to.equal(ctx2);\n expect(ctx2).to.equal(ctx3);\n expect(ctx1.isOutdated).to.be.false;\n\n bc.close();\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaViewValidation.test.d.ts","sourceRoot":"","sources":["../../../../src/test/schema/SchemaViewValidation.test.ts"],"names":[],"mappings":""}
|