@itwin/core-backend 5.1.0-dev.61 → 5.1.0-dev.64
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/IModelDb.d.ts +4 -1
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +9 -0
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +6 -4
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.d.ts +1 -2
- package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js +3 -4
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -3
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +17 -8
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +148 -10
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +296 -28
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +3 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js +13 -14
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.d.ts +47 -14
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js +109 -38
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +0 -1
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +4 -1
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +9 -0
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/LocalHub.d.ts.map +1 -1
- package/lib/esm/LocalHub.js +6 -4
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.d.ts +1 -2
- package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js +3 -4
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +3 -3
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +17 -8
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +148 -10
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +297 -30
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts +3 -1
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js +13 -14
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.d.ts +47 -14
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js +107 -37
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js +8 -2
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js +12 -4
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +21 -16
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +180 -121
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +249 -142
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts +2 -0
- package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts.map +1 -0
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +86 -0
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -0
- package/lib/esm/test/standalone/ChangesetReader.test.js +96 -0
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +0 -1
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/package.json +13 -13
|
@@ -0,0 +1,86 @@
|
|
|
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 * as chaiAsPromised from "chai-as-promised";
|
|
7
|
+
import { HubWrappers, KnownTestLocations } from "..";
|
|
8
|
+
import { ChannelControl, IModelHost } from "../../core-backend";
|
|
9
|
+
import { HubMock } from "../../internal/HubMock";
|
|
10
|
+
chai.use(chaiAsPromised);
|
|
11
|
+
describe("apply changesets", function () {
|
|
12
|
+
before(async () => {
|
|
13
|
+
await IModelHost.startup();
|
|
14
|
+
});
|
|
15
|
+
it("Apply changeset with no local changes, should not create new local changes", async () => {
|
|
16
|
+
HubMock.startup("PullMergeMethod", KnownTestLocations.outputDir);
|
|
17
|
+
const iModelId = await HubMock.createNewIModel({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelName: "Test", description: "TestSubject" });
|
|
18
|
+
const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user1", iTwinId: HubMock.iTwinId, iModelId, noLock: true });
|
|
19
|
+
b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
20
|
+
b1.saveChanges();
|
|
21
|
+
const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user2", iTwinId: HubMock.iTwinId, iModelId, noLock: true });
|
|
22
|
+
b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
23
|
+
b2.saveChanges();
|
|
24
|
+
const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: "user2", iTwinId: HubMock.iTwinId, iModelId, noLock: true });
|
|
25
|
+
b3.channels.addAllowedChannel(ChannelControl.sharedChannelName);
|
|
26
|
+
b3.saveChanges();
|
|
27
|
+
const schema1 = `<?xml version="1.0" encoding="UTF-8"?>
|
|
28
|
+
<ECSchema schemaName="TestDomain" alias="ts" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
29
|
+
<ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
|
|
30
|
+
<ECEntityClass typeName="a1">
|
|
31
|
+
<BaseClass>bis:GraphicalElement2d</BaseClass>
|
|
32
|
+
</ECEntityClass>
|
|
33
|
+
<ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
|
|
34
|
+
<ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
|
|
35
|
+
<ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
|
|
36
|
+
<ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
|
|
37
|
+
<ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
|
|
38
|
+
<ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
|
|
39
|
+
<ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
|
|
40
|
+
<ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
|
|
41
|
+
<ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
|
|
42
|
+
<ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
|
|
43
|
+
</ECSchema>`;
|
|
44
|
+
await b1.importSchemaStrings([schema1]);
|
|
45
|
+
b1.saveChanges("schema1");
|
|
46
|
+
chai.expect(b1.txns.hasPendingTxns).to.be.true;
|
|
47
|
+
await b1.pushChanges({ description: "schema1" });
|
|
48
|
+
chai.expect(b1.txns.hasPendingTxns).to.be.false;
|
|
49
|
+
chai.expect(b2.txns.hasPendingTxns).to.be.false;
|
|
50
|
+
await b2.pullChanges();
|
|
51
|
+
chai.expect(b2.txns.hasPendingTxns).to.be.false;
|
|
52
|
+
const schema2 = `<?xml version="1.0" encoding="UTF-8"?>
|
|
53
|
+
<ECSchema schemaName="TestDomain2" alias="ts1" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
54
|
+
<ECSchemaReference name="BisCore" version="01.00" alias="bis"/>
|
|
55
|
+
<ECEntityClass typeName="a1">
|
|
56
|
+
<BaseClass>bis:GraphicalElement2d</BaseClass>
|
|
57
|
+
</ECEntityClass>
|
|
58
|
+
<ECEntityClass typeName="b1"> <BaseClass>a1</BaseClass> </ECEntityClass>
|
|
59
|
+
<ECEntityClass typeName="b2"> <BaseClass>a1</BaseClass> </ECEntityClass>
|
|
60
|
+
<ECEntityClass typeName="c1"> <BaseClass>b1</BaseClass> </ECEntityClass>
|
|
61
|
+
<ECEntityClass typeName="c2"> <BaseClass>b1</BaseClass> </ECEntityClass>
|
|
62
|
+
<ECEntityClass typeName="d1"> <BaseClass>b2</BaseClass> </ECEntityClass>
|
|
63
|
+
<ECEntityClass typeName="d2"> <BaseClass>b2</BaseClass> </ECEntityClass>
|
|
64
|
+
<ECEntityClass typeName="f1"> <BaseClass>d1</BaseClass> </ECEntityClass>
|
|
65
|
+
<ECEntityClass typeName="f2"> <BaseClass>d1</BaseClass> </ECEntityClass>
|
|
66
|
+
<ECEntityClass typeName="e1"> <BaseClass>d2</BaseClass> </ECEntityClass>
|
|
67
|
+
<ECEntityClass typeName="e2"> <BaseClass>d2</BaseClass> </ECEntityClass>
|
|
68
|
+
</ECSchema>`;
|
|
69
|
+
await b1.importSchemaStrings([schema2]);
|
|
70
|
+
b1.saveChanges("schema2");
|
|
71
|
+
chai.expect(b1.txns.hasPendingTxns).to.be.true;
|
|
72
|
+
await b1.pushChanges({ description: "schema2" });
|
|
73
|
+
chai.expect(b1.txns.hasPendingTxns).to.be.false;
|
|
74
|
+
chai.expect(b2.txns.hasPendingTxns).to.be.false;
|
|
75
|
+
await b2.pullChanges();
|
|
76
|
+
chai.expect(b2.txns.hasPendingTxns).to.be.false;
|
|
77
|
+
chai.expect(b3.txns.hasPendingTxns).to.be.false;
|
|
78
|
+
await b3.pullChanges();
|
|
79
|
+
chai.expect(b3.txns.hasPendingTxns).to.be.false;
|
|
80
|
+
b1.close();
|
|
81
|
+
b2.close();
|
|
82
|
+
b3.close();
|
|
83
|
+
HubMock.shutdown();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=ApplyChangeset.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplyChangeset.test.js","sourceRoot":"","sources":["../../../../src/test/hubaccess/ApplyChangeset.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 * as chai from \"chai\";\nimport * as chaiAsPromised from \"chai-as-promised\";\nimport { HubWrappers, KnownTestLocations } from \"..\";\nimport { ChannelControl, IModelHost } from \"../../core-backend\";\nimport { HubMock } from \"../../internal/HubMock\";\nimport { Suite } from \"mocha\";\nchai.use(chaiAsPromised);\n\ndescribe(\"apply changesets\", function (this: Suite) {\n before(async () => {\n await IModelHost.startup();\n });\n\n it(\"Apply changeset with no local changes, should not create new local changes\", async () => {\n HubMock.startup(\"PullMergeMethod\", KnownTestLocations.outputDir);\n\n const iModelId = await HubMock.createNewIModel({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\n\n const b1 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user1\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n b1.saveChanges();\n\n const b2 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n b2.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n b2.saveChanges();\n\n const b3 = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"user2\", iTwinId: HubMock.iTwinId, iModelId, noLock: true });\n b3.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n b3.saveChanges();\n\n const schema1 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n </ECSchema>`;\n\n await b1.importSchemaStrings([schema1]);\n b1.saveChanges(\"schema1\");\n\n chai.expect(b1.txns.hasPendingTxns).to.be.true\n await b1.pushChanges({ description: \"schema1\" });\n chai.expect(b1.txns.hasPendingTxns).to.be.false\n\n chai.expect(b2.txns.hasPendingTxns).to.be.false\n await b2.pullChanges();\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n\n const schema2 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestDomain2\" alias=\"ts1\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\n <ECEntityClass typeName=\"a1\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n </ECEntityClass>\n <ECEntityClass typeName=\"b1\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"b2\"> <BaseClass>a1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c1\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"c2\"> <BaseClass>b1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d1\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"d2\"> <BaseClass>b2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f1\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"f2\"> <BaseClass>d1</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e1\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n <ECEntityClass typeName=\"e2\"> <BaseClass>d2</BaseClass> </ECEntityClass>\n </ECSchema>`;\n\n await b1.importSchemaStrings([schema2]);\n b1.saveChanges(\"schema2\");\n\n chai.expect(b1.txns.hasPendingTxns).to.be.true\n await b1.pushChanges({ description: \"schema2\" });\n chai.expect(b1.txns.hasPendingTxns).to.be.false;\n\n\n chai.expect(b2.txns.hasPendingTxns).to.be.false\n await b2.pullChanges();\n chai.expect(b2.txns.hasPendingTxns).to.be.false;\n\n\n chai.expect(b3.txns.hasPendingTxns).to.be.false\n await b3.pullChanges();\n chai.expect(b3.txns.hasPendingTxns).to.be.false;\n\n\n b1.close();\n b2.close();\n b3.close();\n HubMock.shutdown();\n });\n});\n"]}
|
|
@@ -1202,5 +1202,101 @@ describe("Changeset Reader API", async () => {
|
|
|
1202
1202
|
// Cleanup
|
|
1203
1203
|
await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);
|
|
1204
1204
|
});
|
|
1205
|
+
it("Track changeset health stats", async () => {
|
|
1206
|
+
const adminToken = "super manager token";
|
|
1207
|
+
const iModelName = "test";
|
|
1208
|
+
const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: "TestSubject", accessToken: adminToken });
|
|
1209
|
+
assert.isNotEmpty(rwIModelId);
|
|
1210
|
+
// Open two briefcases for the same iModel
|
|
1211
|
+
const [firstBriefcase, secondBriefcase] = await Promise.all([
|
|
1212
|
+
HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),
|
|
1213
|
+
HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })
|
|
1214
|
+
]);
|
|
1215
|
+
[firstBriefcase, secondBriefcase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));
|
|
1216
|
+
await firstBriefcase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
|
|
1217
|
+
<ECSchema schemaName="TestSchema" alias="ts" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
1218
|
+
<ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
|
|
1219
|
+
<ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
|
|
1220
|
+
|
|
1221
|
+
<ECCustomAttributes>
|
|
1222
|
+
<DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
|
|
1223
|
+
</ECCustomAttributes>
|
|
1224
|
+
|
|
1225
|
+
<ECEntityClass typeName="TestClass">
|
|
1226
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
1227
|
+
</ECEntityClass>
|
|
1228
|
+
</ECSchema>`]);
|
|
1229
|
+
firstBriefcase.saveChanges("import initial schema");
|
|
1230
|
+
// Enable changeset tracking for both briefcases
|
|
1231
|
+
await Promise.all([firstBriefcase.enableChangesetStatTracking(), secondBriefcase.enableChangesetStatTracking()]);
|
|
1232
|
+
await firstBriefcase.pushChanges({ description: "push initial schema changeset", accessToken: adminToken });
|
|
1233
|
+
await secondBriefcase.pullChanges({ accessToken: adminToken });
|
|
1234
|
+
// Schema upgrade
|
|
1235
|
+
await secondBriefcase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
|
|
1236
|
+
<ECSchema schemaName="TestSchema" alias="ts" version="2.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
1237
|
+
<ECSchemaReference name="BisCore" version="1.0.0" alias="bis"/>
|
|
1238
|
+
<ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
|
|
1239
|
+
|
|
1240
|
+
<ECCustomAttributes>
|
|
1241
|
+
<DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
|
|
1242
|
+
</ECCustomAttributes>
|
|
1243
|
+
|
|
1244
|
+
<ECEntityClass typeName="TestClass">
|
|
1245
|
+
<BaseClass>bis:PhysicalElement</BaseClass>
|
|
1246
|
+
<ECProperty propertyName="TestProperty" typeName="string"/>
|
|
1247
|
+
</ECEntityClass>
|
|
1248
|
+
|
|
1249
|
+
<ECEnumeration typeName="TestEnum" backingTypeName="int" isStrict="true">
|
|
1250
|
+
<ECEnumerator name="Enumerator1" value="1" displayLabel="TestEnumerator1"/>
|
|
1251
|
+
<ECEnumerator name="Enumerator2" value="2" displayLabel="TestEnumerator2"/>
|
|
1252
|
+
</ECEnumeration>
|
|
1253
|
+
</ECSchema>`]);
|
|
1254
|
+
secondBriefcase.saveChanges("imported schema");
|
|
1255
|
+
await secondBriefcase.pushChanges({ description: "Added a property to TestClass and an enum", accessToken: adminToken });
|
|
1256
|
+
await firstBriefcase.pullChanges({ accessToken: adminToken });
|
|
1257
|
+
// Major schema change
|
|
1258
|
+
await firstBriefcase.importSchemaStrings([`<?xml version="1.0" encoding="UTF-8"?>
|
|
1259
|
+
<ECSchema schemaName="TestSchema" alias="ts" version="2.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
1260
|
+
<ECSchemaReference name="CoreCustomAttributes" version="1.0.0" alias="CoreCA" />
|
|
1261
|
+
|
|
1262
|
+
<ECCustomAttributes>
|
|
1263
|
+
<DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />
|
|
1264
|
+
</ECCustomAttributes>
|
|
1265
|
+
|
|
1266
|
+
<ECEnumeration typeName="TestEnum" backingTypeName="int" isStrict="true">
|
|
1267
|
+
<ECEnumerator name="Enumerator1" value="1" displayLabel="TestEnumerator1"/>
|
|
1268
|
+
<ECEnumerator name="Enumerator2" value="2" displayLabel="TestEnumerator2"/>
|
|
1269
|
+
</ECEnumeration>
|
|
1270
|
+
</ECSchema>`]);
|
|
1271
|
+
firstBriefcase.saveChanges("imported schema");
|
|
1272
|
+
await firstBriefcase.pushChanges({ description: "Deleted TestClass", accessToken: adminToken });
|
|
1273
|
+
await secondBriefcase.pullChanges({ accessToken: adminToken });
|
|
1274
|
+
const firstBriefcaseChangesets = await firstBriefcase.getAllChangesetHealthData();
|
|
1275
|
+
const secondBriefcaseChangesets = await secondBriefcase.getAllChangesetHealthData();
|
|
1276
|
+
assert.equal(firstBriefcaseChangesets.length, 1);
|
|
1277
|
+
const firstBriefcaseChangeset = firstBriefcaseChangesets[0];
|
|
1278
|
+
expect(firstBriefcaseChangeset.uncompressedSizeBytes).to.be.greaterThan(300);
|
|
1279
|
+
expect(firstBriefcaseChangeset.insertedRows).to.be.greaterThanOrEqual(4);
|
|
1280
|
+
expect(firstBriefcaseChangeset.updatedRows).to.be.greaterThanOrEqual(1);
|
|
1281
|
+
expect(firstBriefcaseChangeset.deletedRows).to.be.eql(0);
|
|
1282
|
+
expect(firstBriefcaseChangeset.totalFullTableScans).to.be.eql(0);
|
|
1283
|
+
expect(firstBriefcaseChangeset.perStatementStats.length).to.be.eql(5);
|
|
1284
|
+
assert.equal(secondBriefcaseChangesets.length, 2);
|
|
1285
|
+
const [secondBriefcaseChangeset1, secondBriefcaseChangeset2] = secondBriefcaseChangesets;
|
|
1286
|
+
expect(secondBriefcaseChangeset1.uncompressedSizeBytes).to.be.greaterThan(40000);
|
|
1287
|
+
expect(secondBriefcaseChangeset1.insertedRows).to.be.greaterThanOrEqual(52);
|
|
1288
|
+
expect(secondBriefcaseChangeset1.updatedRows).to.be.greaterThanOrEqual(921);
|
|
1289
|
+
expect(secondBriefcaseChangeset1.deletedRows).to.be.eql(0);
|
|
1290
|
+
expect(secondBriefcaseChangeset1.totalFullTableScans).to.be.eql(0);
|
|
1291
|
+
expect(secondBriefcaseChangeset1.perStatementStats.length).to.be.eql(11);
|
|
1292
|
+
expect(secondBriefcaseChangeset2.uncompressedSizeBytes).to.be.greaterThan(40000);
|
|
1293
|
+
expect(secondBriefcaseChangeset2.insertedRows).to.be.eql(0);
|
|
1294
|
+
expect(secondBriefcaseChangeset2.updatedRows).to.be.greaterThanOrEqual(921);
|
|
1295
|
+
expect(secondBriefcaseChangeset2.deletedRows).to.be.greaterThanOrEqual(52);
|
|
1296
|
+
expect(secondBriefcaseChangeset2.totalFullTableScans).to.be.eql(0);
|
|
1297
|
+
expect(secondBriefcaseChangeset2.perStatementStats.length).to.be.eql(11);
|
|
1298
|
+
// Cleanup
|
|
1299
|
+
await Promise.all([secondBriefcase.close(), firstBriefcase.close()]);
|
|
1300
|
+
});
|
|
1205
1301
|
});
|
|
1206
1302
|
//# sourceMappingURL=ChangesetReader.test.js.map
|