@itwin/core-backend
Version:
iTwin.js backend components
103 lines • 5.17 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
import { Code, IModel, SubCategoryAppearance } from "@itwin/core-common";
import * as chai from "chai";
import { assert } from "chai";
import * as chaiAsPromised from "chai-as-promised";
import { HubWrappers, KnownTestLocations } from "..";
import { ChannelControl, IModelHost, SpatialCategory } from "../../core-backend";
import { HubMock } from "../../internal/HubMock";
import { IModelTestUtils, TestUserType } from "../IModelTestUtils";
chai.use(chaiAsPromised);
describe("imodel limits", function () {
const ctx = {
accessTokens: {
user1: "",
user2: "",
user3: "",
},
iModelId: "",
iTwinId: "",
modelId: "",
spatialCategoryId: "",
iModelName: "TestIModel",
rootSubject: "TestSubject",
openBriefcase: async (user, noLock) => {
const b = await HubWrappers.downloadAndOpenBriefcase({ accessToken: ctx.accessTokens[user], iTwinId: ctx.iTwinId, iModelId: ctx.iModelId, noLock });
b.channels.addAllowedChannel(ChannelControl.sharedChannelName);
return b;
},
openB1: async (noLock) => { return ctx.openBriefcase("user1", noLock); },
openB2: async (noLock) => { return ctx.openBriefcase("user2", noLock); },
openB3: async (noLock) => { return ctx.openBriefcase("user3", noLock); },
};
before(async () => {
await IModelHost.startup();
HubMock.startup("PullMergeMethod", KnownTestLocations.outputDir);
});
after(async () => {
HubMock.shutdown();
});
beforeEach(async () => {
ctx.iTwinId = HubMock.iTwinId;
ctx.accessTokens.user1 = await HubWrappers.getAccessToken(TestUserType.SuperManager);
ctx.accessTokens.user2 = await HubWrappers.getAccessToken(TestUserType.Regular);
ctx.accessTokens.user3 = await HubWrappers.getAccessToken(TestUserType.Super);
ctx.iModelId = await HubMock.createNewIModel({ accessToken: ctx.accessTokens.user1, iTwinId: ctx.iTwinId, iModelName: ctx.iModelName, description: ctx.rootSubject });
assert.isNotEmpty(ctx.iModelId);
const b1 = await ctx.openB1(true);
await b1.locks.acquireLocks({ shared: IModel.dictionaryId });
[, ctx.modelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(b1, IModelTestUtils.getUniqueModelCode(b1, "newPhysicalModel"), true);
const dictionary = b1.models.getModel(IModel.dictionaryId);
const newCategoryCode = IModelTestUtils.getUniqueSpatialCategoryCode(dictionary, "ThisTestSpatialCategory");
ctx.spatialCategoryId = SpatialCategory.insert(dictionary.iModel, dictionary.id, newCategoryCode.value, new SubCategoryAppearance({ color: 0xff0000 }));
b1.saveChanges();
await b1.pushChanges({ description: "" });
b1.close();
});
it("apply changes where max columns for class is used", async () => {
const b1 = await ctx.openB1(true);
const b2 = await ctx.openB2(true);
// Import schema into b1 but do not push it.
const createSchema = (additionProps) => {
const schema = [
`xml version="1.0" encoding="UTF-8"`,
`<ECSchema schemaName="TestSchema1" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">`,
` <ECSchemaReference name="BisCore" version="01.00.00" alias="bis"/>`,
` <ECEntityClass typeName="Pipe1">`,
` <BaseClass>bis:GeometricElement3d</BaseClass>`,
];
for (let i = 0; i < additionProps; i++) {
schema.push(` <ECProperty propertyName="p${i}" typeName="int" />`);
}
schema.push(...[
` </ECEntityClass>`,
`</ECSchema>`
]);
return schema.join("\n");
};
const schemaThatMaxOutColumnsLimit = 2030;
await b1.importSchemaStrings([createSchema(schemaThatMaxOutColumnsLimit)]);
b1.saveChanges();
await b1.pushChanges({ description: "import schema" });
const elementProps = {
classFullName: "TestSchema1:Pipe1",
model: ctx.modelId,
category: ctx.spatialCategoryId,
code: Code.createEmpty(),
};
const el = b1.elements.createElement(elementProps);
b1.elements.insertElement(el.toJSON());
b1.saveChanges();
await b1.pushChanges({ description: "add element" });
// Error applying changeset with id [22f762181d236dfe25bb32e38ed3b7509e975deb]: failed to apply changes
// Expression depth is 2001 where current limit is 2000
await b2.pullChanges();
b1.close();
b2.close();
HubMock.shutdown();
});
});
//# sourceMappingURL=IModelLimits.test.js.map