@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.
Files changed (78) hide show
  1. package/lib/cjs/IModelDb.d.ts +4 -1
  2. package/lib/cjs/IModelDb.d.ts.map +1 -1
  3. package/lib/cjs/IModelDb.js +9 -0
  4. package/lib/cjs/IModelDb.js.map +1 -1
  5. package/lib/cjs/LocalHub.d.ts.map +1 -1
  6. package/lib/cjs/LocalHub.js +6 -4
  7. package/lib/cjs/LocalHub.js.map +1 -1
  8. package/lib/cjs/annotations/FrameGeometry.d.ts +1 -2
  9. package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -1
  10. package/lib/cjs/annotations/FrameGeometry.js +3 -4
  11. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  12. package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -3
  13. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  14. package/lib/cjs/annotations/LeaderGeometry.js +17 -8
  15. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  16. package/lib/cjs/annotations/TextAnnotationElement.d.ts +148 -10
  17. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  18. package/lib/cjs/annotations/TextAnnotationElement.js +296 -28
  19. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  20. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +3 -1
  21. package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  22. package/lib/cjs/annotations/TextAnnotationGeometry.js +13 -14
  23. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  24. package/lib/cjs/annotations/TextBlockLayout.d.ts +47 -14
  25. package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
  26. package/lib/cjs/annotations/TextBlockLayout.js +109 -38
  27. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  28. package/lib/cjs/workspace/Workspace.d.ts +0 -1
  29. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  30. package/lib/cjs/workspace/Workspace.js.map +1 -1
  31. package/lib/esm/IModelDb.d.ts +4 -1
  32. package/lib/esm/IModelDb.d.ts.map +1 -1
  33. package/lib/esm/IModelDb.js +9 -0
  34. package/lib/esm/IModelDb.js.map +1 -1
  35. package/lib/esm/LocalHub.d.ts.map +1 -1
  36. package/lib/esm/LocalHub.js +6 -4
  37. package/lib/esm/LocalHub.js.map +1 -1
  38. package/lib/esm/annotations/FrameGeometry.d.ts +1 -2
  39. package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -1
  40. package/lib/esm/annotations/FrameGeometry.js +3 -4
  41. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  42. package/lib/esm/annotations/LeaderGeometry.d.ts +3 -3
  43. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  44. package/lib/esm/annotations/LeaderGeometry.js +17 -8
  45. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  46. package/lib/esm/annotations/TextAnnotationElement.d.ts +148 -10
  47. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  48. package/lib/esm/annotations/TextAnnotationElement.js +297 -30
  49. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  50. package/lib/esm/annotations/TextAnnotationGeometry.d.ts +3 -1
  51. package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
  52. package/lib/esm/annotations/TextAnnotationGeometry.js +13 -14
  53. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  54. package/lib/esm/annotations/TextBlockLayout.d.ts +47 -14
  55. package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
  56. package/lib/esm/annotations/TextBlockLayout.js +107 -37
  57. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  58. package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
  59. package/lib/esm/test/AnnotationTestUtils.js +8 -2
  60. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  61. package/lib/esm/test/annotations/FrameGeometry.test.js +12 -4
  62. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  63. package/lib/esm/test/annotations/LeaderGeometry.test.js +21 -16
  64. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  65. package/lib/esm/test/annotations/TextAnnotation.test.js +180 -121
  66. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  67. package/lib/esm/test/annotations/TextBlock.test.js +249 -142
  68. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  69. package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts +2 -0
  70. package/lib/esm/test/hubaccess/ApplyChangeset.test.d.ts.map +1 -0
  71. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +86 -0
  72. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -0
  73. package/lib/esm/test/standalone/ChangesetReader.test.js +96 -0
  74. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  75. package/lib/esm/workspace/Workspace.d.ts +0 -1
  76. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  77. package/lib/esm/workspace/Workspace.js.map +1 -1
  78. 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