@itwin/core-backend 5.5.0-dev.1 → 5.5.0-dev.10

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 (60) hide show
  1. package/CHANGELOG.md +24 -1
  2. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  3. package/lib/cjs/ChangesetECAdaptor.js +0 -2
  4. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  5. package/lib/cjs/IModelDb.d.ts +11 -2
  6. package/lib/cjs/IModelDb.d.ts.map +1 -1
  7. package/lib/cjs/IModelDb.js +20 -15
  8. package/lib/cjs/IModelDb.js.map +1 -1
  9. package/lib/cjs/TxnManager.d.ts.map +1 -1
  10. package/lib/cjs/TxnManager.js +2 -1
  11. package/lib/cjs/TxnManager.js.map +1 -1
  12. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  13. package/lib/esm/ChangesetECAdaptor.js +0 -2
  14. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  15. package/lib/esm/IModelDb.d.ts +11 -2
  16. package/lib/esm/IModelDb.d.ts.map +1 -1
  17. package/lib/esm/IModelDb.js +20 -15
  18. package/lib/esm/IModelDb.js.map +1 -1
  19. package/lib/esm/TxnManager.d.ts.map +1 -1
  20. package/lib/esm/TxnManager.js +2 -1
  21. package/lib/esm/TxnManager.js.map +1 -1
  22. package/lib/esm/test/annotations/Fields.test.js +2 -2
  23. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  24. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +5 -5
  25. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  26. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +39 -0
  27. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  28. package/lib/esm/test/imodel/IModel.test.js +31 -2
  29. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  30. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +432 -198
  31. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  32. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +272 -190
  33. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  34. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts +27 -0
  35. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -0
  36. package/lib/esm/test/incrementalSchemaLocater/TestContext.js +136 -0
  37. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -0
  38. package/lib/esm/test/standalone/ChangesetReader.test.js +222 -3
  39. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  40. package/lib/esm/test/standalone/RenderTimeline.test.js +1 -1
  41. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  42. package/lib/esm/test/standalone/StandaloneDb.test.d.ts +2 -0
  43. package/lib/esm/test/standalone/StandaloneDb.test.d.ts.map +1 -0
  44. package/lib/esm/test/standalone/StandaloneDb.test.js +103 -0
  45. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -0
  46. package/lib/esm/test/standalone/TxnManager.test.js +43 -0
  47. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  48. package/package.json +13 -13
  49. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts +0 -11
  50. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts.map +0 -1
  51. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js +0 -36
  52. package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +0 -1
  53. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts +0 -20
  54. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts.map +0 -1
  55. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js +0 -126
  56. package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +0 -1
  57. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +0 -24
  58. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +0 -1
  59. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +0 -67
  60. package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ChangesetReader.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangesetReader.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 { DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, ColorDef, GeometryStreamProps, IModel, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"node:path\";\r\nimport { DrawingCategory } from \"../../Category\";\r\nimport { ChangedECInstance, ChangesetECAdaptor, ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from \"../../ChangesetECAdaptor\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { BriefcaseDb, SnapshotDb } from \"../../IModelDb\";\r\nimport { SqliteChangeOp, SqliteChangesetReader } from \"../../SqliteChangesetReader\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { _nativeDb, ChannelControl } from \"../../core-backend\";\r\n\r\ndescribe(\"Changeset Reader API\", async () => {\r\n let iTwinId: GuidString;\r\n\r\n before(() => {\r\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n after(() => HubMock.shutdown());\r\n it(\"Able to recover from when ExclusiveRootClassId is NULL for overflow table\", async () => {\r\n /**\r\n * 1. Import schema with class that span overflow table.\r\n * 2. Insert a element for the class.\r\n * 3. Push changes to hub.\r\n * 4. Update the element.\r\n * 5. Push changes to hub.\r\n * 6. Delete the element.\r\n * 7. Set ExclusiveRootClassId to NULL for overflow table. (Simulate the issue)\r\n * 8. ECChangesetAdaptor should be able to read the changeset 2 in which element is updated against latest imodel where element is deleted.\r\n */\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const nProps = 36;\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n // Insert element with 100 properties\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const props = Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `test_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {});\r\n\r\n const geomElement = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...props,\r\n };\r\n\r\n // 2. Insert a element for the class.\r\n const id = rwIModel.elements.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n rwIModel.saveChanges();\r\n\r\n // 3. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 4. Update the element.\r\n const updatedElementProps = Object.assign(\r\n rwIModel.elements.getElementProps(id),\r\n Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `updated_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {}));\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n rwIModel.elements.updateElement(updatedElementProps);\r\n rwIModel.saveChanges();\r\n\r\n // 5. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n\r\n // 6. Delete the element.\r\n rwIModel.elements.deleteElement(id);\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, db: rwIModel, disableSchemaCheck: true });\r\n\r\n // Set ExclusiveRootClassId to NULL for overflow table to simulate the issue\r\n expect(rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\")).to.be.eq(DbResult.BE_SQLITE_OK);\r\n\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n let assertOnOverflowTable = false;\r\n const classId = getClassIdByName(rwIModel, \"GeometricElement2d\");\r\n\r\n while (adaptor.step()) {\r\n if (adaptor.op === \"Updated\" && adaptor.inserted?.$meta?.tables[0] === \"bis_GeometricElement2d_Overflow\") {\r\n\r\n assert.isUndefined(adaptor.inserted.ECClassId);\r\n assert.equal(adaptor.inserted.ECInstanceId, \"\");\r\n assert.deepEqual(adaptor.inserted.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.inserted.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.inserted.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.inserted.$meta.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.inserted.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.inserted.$meta?.stage, \"New\");\r\n\r\n assert.equal(adaptor.deleted!.ECInstanceId, \"\");\r\n assert.isUndefined(adaptor.deleted!.ECClassId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.deleted!.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.deleted!.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.deleted!.$meta!.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.deleted!.$meta?.stage, \"Old\");\r\n\r\n assertOnOverflowTable = true;\r\n }\r\n }\r\n\r\n assert.isTrue(assertOnOverflowTable);\r\n rwIModel.close();\r\n });\r\n\r\n function getClassIdByName(iModel: BriefcaseDb, className: string): Id64String {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModel.withPreparedStatement(`SELECT ECInstanceId from meta.ECClassDef where Name=?`, (stmt) => {\r\n stmt.bindString(1, className);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n return stmt.getValue(0).getId();\r\n });\r\n }\r\n\r\n async function getClassNameById(iModel: BriefcaseDb, classId: string): Promise<string | undefined> {\r\n const reader = iModel.createQueryReader(`select ec_classname(${classId});`);\r\n\r\n if (await reader.step())\r\n return reader.current[0] as string;\r\n\r\n return undefined;\r\n }\r\n\r\n it(\"Changeset reader / EC adaptor\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.saveChanges(\"user 1: schema changeset\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n }\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n let totalEl = 0;\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges(\"user 1: create drawing partition\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"user 1: create drawing partition\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n }\r\n\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\r\n for (let m = 0; m < noOfElements; ++m) {\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const prop = userProp(++totalEl);\r\n // Create props\r\n const geomElement = {\r\n classFullName: `TestDomain:${className}`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...prop,\r\n };\r\n const id = imodel.elements.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n }\r\n };\r\n const generatedStr = new Array(10).join(\"x\");\r\n insertElements(rwIModel, \"Test2dElement\", 1, () => {\r\n return { s: generatedStr };\r\n });\r\n\r\n const updatedElements = async () => {\r\n await rwIModel.locks.acquireLocks({ exclusive: \"0x20000000004\" });\r\n const updatedElement = rwIModel.elements.getElementProps(\"0x20000000004\");\r\n (updatedElement as any).s = \"updated property\";\r\n rwIModel.elements.updateElement(updatedElement);\r\n rwIModel.saveChanges(\"user 1: updated data\");\r\n await rwIModel.pushChanges({ description: \"user 1: update property id=0x20000000004\", accessToken: adminToken });\r\n };\r\n\r\n rwIModel.saveChanges(\"user 1: data\");\r\n\r\n if (true || \"test local changes\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n \r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n \r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n \r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\r\n\r\n await updatedElements();\r\n\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n if (true || \"updated element\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n const classId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].ECClassId, classId);\r\n assert.equal(changes[2].s, \"updated property\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[3].ECClassId, classId);\r\n assert.equal(changes[3].s, \"xxxxxxxxx\");\r\n assert.equal(changes[3].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"updated element when no classId\") {\r\n const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[2].ECClassId);\r\n assert.isDefined(changes[2].$meta?.fallbackClassId);\r\n assert.equal(changes[2].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[2].s);\r\n assert.equal(changes[2].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[3].ECClassId);\r\n assert.isDefined(changes[3].$meta?.fallbackClassId);\r\n assert.equal(changes[3].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[3].s);\r\n assert.equal(changes[3].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"test changeset file\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n \r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n \r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n \r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.acceptClass()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 1);\r\n assert.equal(changes[0].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.adaptor()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 2);\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n rwIModel.close();\r\n });\r\n it(\"revert timeline changes\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n let nProps = 0;\r\n // 1. Import schema with class that span overflow table.\r\n const addPropertyAndImportSchema = async () => {\r\n await rwIModel.acquireSchemaLock();\r\n ++nProps;\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00.${nProps}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i + 1}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n };\r\n await addPropertyAndImportSchema();\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const createEl = async (args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: drawingModelId });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...args,\r\n };\r\n return rwIModel.elements.insertElement(e1);;\r\n };\r\n const updateEl = async (id: Id64String, args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(id), args);\r\n rwIModel.elements.updateElement(updatedElementProps);\r\n };\r\n\r\n const deleteEl = async (id: Id64String) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n rwIModel.elements.deleteElement(id);\r\n };\r\n const getChanges = async () => {\r\n return HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir: path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\") });\r\n };\r\n\r\n const findEl = (id: Id64String) => {\r\n try {\r\n return rwIModel.elements.getElementProps(id);\r\n } catch {\r\n return undefined;\r\n }\r\n };\r\n // 2. Insert a element for the class\r\n const el1 = await createEl({ p1: \"test1\" });\r\n const el2 = await createEl({ p1: \"test2\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert 2 elements\" });\r\n\r\n // 3. Update the element.\r\n await updateEl(el1, { p1: \"test3\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element 1\" });\r\n\r\n // 4. Delete the element.\r\n await deleteEl(el2);\r\n const el3 = await createEl({ p1: \"test4\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element 2\" });\r\n\r\n // 5. import schema and insert element 4 & update element 3\r\n await addPropertyAndImportSchema();\r\n const el4 = await createEl({ p1: \"test5\", p2: \"test6\" });\r\n await updateEl(el3, { p1: \"test7\", p2: \"test8\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 4 & update element 3\" });\r\n\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n // 6. Revert to timeline 2\r\n await rwIModel.revertAndPushChanges({ toIndex: 2, description: \"revert to timeline 2\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"revert to timeline 2\");\r\n\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 6, description: \"reinstate last reverted changeset\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"reinstate last reverted changeset\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n\r\n await addPropertyAndImportSchema();\r\n const el5 = await createEl({ p1: \"test9\", p2: \"test10\", p3: \"test11\" });\r\n await updateEl(el1, { p1: \"test12\", p2: \"test13\", p3: \"test114\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 5 & update element 1\" });\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n // skip schema changes & auto generated comment\r\n await rwIModel.revertAndPushChanges({ toIndex: 1, skipSchemaChanges: true });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 8 to 1 (schema changes skipped)\");\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n assert.isUndefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 9 });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 9 to 9\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n assert.isDefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n rwIModel.close();\r\n });\r\n it(\"openGroup() & writeToFile()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = rwIModel.elements.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 3. Update the element.\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(e1id), { p1: \"test2\" });\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n rwIModel.elements.updateElement(updatedElementProps);\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n // 4. Delete the element.\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n rwIModel.elements.deleteElement(e1id);\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = (await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir })).slice(1);\r\n\r\n const testElementClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n if (true || \"Grouping changeset [2,3,4] should not contain TestDomain:Test2dElement as insert+update+delete=noop\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n\r\n expect(instances.length).to.eq(1);\r\n expect(instances[0].id).to.eq(\"0x20000000001\");\r\n expect(instances[0].classId).to.eq(drawingModelClassId);\r\n expect(instances[0].op).to.eq(\"Updated\");\r\n expect(instances[0].classFullName).to.eq(\"BisCore:DrawingModel\");\r\n }\r\n\r\n if (true || \"Grouping changeset [3,4] should contain update+delete=delete TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(1).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n\r\n const groupCsFile = path.join(KnownTestLocations.outputDir, \"changeset_grouping.ec\");\r\n if (true || \"Grouping changeset [2,3] should contain insert+update=insert TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(0, 2).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n\r\n reader.writeToFile({ fileName: groupCsFile, containsSchemaChanges: false, overwriteFile: true });\r\n }\r\n if (true || \"writeToFile() test\") {\r\n const reader = SqliteChangesetReader.openFile({ fileName: groupCsFile, db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n rwIModel.close();\r\n });\r\n\r\n it(\"Delete class FK constraint violation in cache table\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n const firstItems = firstBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInFirst, !!firstItems?.TestClass);\r\n\r\n const secondItems = secondBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInSecond, !!secondItems?.TestClass);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"import initial schema\");\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n\r\n // Sync the second briefcase with the iModel\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"imported schema\");\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Delete class major change\", accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, true);\r\n\r\n // Apply the latest changeset to a new briefcase\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);\r\n });\r\n\r\n\r\n it(\"Delete class FK constraint violation in cache table through a revert\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(className: string, firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"import initial schema\");\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"AnotherTestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"imported schema\");\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Add another class change\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Revert the latest changeset from the first briefcase\r\n try {\r\n await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: \"Revert last changeset\" });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, true);\r\n\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);\r\n });\r\n\r\n it(\"Track changeset health stats\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefcase, secondBriefcase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n\r\n [firstBriefcase, secondBriefcase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await firstBriefcase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefcase.saveChanges(\"import initial schema\");\r\n\r\n // Enable changeset tracking for both briefcases\r\n await Promise.all([firstBriefcase.enableChangesetStatTracking(), secondBriefcase.enableChangesetStatTracking()]);\r\n\r\n await firstBriefcase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Schema upgrade\r\n await secondBriefcase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"TestProperty\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n secondBriefcase.saveChanges(\"imported schema\");\r\n\r\n await secondBriefcase.pushChanges({ description: \"Added a property to TestClass and an enum\", accessToken: adminToken });\r\n await firstBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Major schema change\r\n await firstBriefcase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n firstBriefcase.saveChanges(\"imported schema\");\r\n\r\n await firstBriefcase.pushChanges({ description: \"Deleted TestClass\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n const firstBriefcaseChangesets = await firstBriefcase.getAllChangesetHealthData();\r\n const secondBriefcaseChangesets = await secondBriefcase.getAllChangesetHealthData();\r\n\r\n assert.equal(firstBriefcaseChangesets.length, 1);\r\n const firstBriefcaseChangeset = firstBriefcaseChangesets[0];\r\n\r\n expect(firstBriefcaseChangeset.changesetIndex).to.be.eql(2);\r\n expect(firstBriefcaseChangeset.uncompressedSizeBytes).to.be.greaterThan(300);\r\n expect(firstBriefcaseChangeset.insertedRows).to.be.greaterThanOrEqual(4);\r\n expect(firstBriefcaseChangeset.updatedRows).to.be.greaterThanOrEqual(1);\r\n expect(firstBriefcaseChangeset.deletedRows).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.totalFullTableScans).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.perStatementStats.length).to.be.eql(5);\r\n\r\n assert.equal(secondBriefcaseChangesets.length, 2);\r\n const [secondBriefcaseChangeset1, secondBriefcaseChangeset2] = secondBriefcaseChangesets;\r\n\r\n expect(secondBriefcaseChangeset1.changesetIndex).to.be.eql(1);\r\n expect(secondBriefcaseChangeset1.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset1.insertedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset1.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset1.deletedRows).to.be.greaterThanOrEqual(0)\r\n expect(secondBriefcaseChangeset1.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset1.perStatementStats.length).to.be.eql(11);\r\n\r\n expect(secondBriefcaseChangeset2.changesetIndex).to.be.eql(3);\r\n expect(secondBriefcaseChangeset2.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset2.insertedRows).to.be.greaterThanOrEqual(0);\r\n expect(secondBriefcaseChangeset2.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset2.deletedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset2.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset2.perStatementStats.length).to.be.eql(11);\r\n\r\n // Cleanup\r\n await Promise.all([secondBriefcase.close(), firstBriefcase.close()]);\r\n });\r\n it(\"openInMemory() & step()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = rwIModel.elements.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n const testElClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n if (true) {\r\n const reader = SqliteChangesetReader.openInMemory({ db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(1);\r\n const testEl = instances[0];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n\r\n // save changes and verify the the txn\r\n rwIModel.saveChanges();\r\n\r\n if (true) {\r\n const txnId = rwIModel.txns.getLastSavedTxnProps()?.id as string;\r\n expect(txnId).to.not.be.undefined;\r\n const reader = SqliteChangesetReader.openTxn({ db: rwIModel, disableSchemaCheck: true, txnId });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(3);\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n // DrawingModel new instance\r\n const drawingModelElNew = instances[0];\r\n expect(drawingModelElNew.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElNew.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElNew.$meta?.stage).to.equals(\"New\");\r\n expect(drawingModelElNew.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElNew.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElNew.LastMod).to.exist;\r\n expect(drawingModelElNew.GeometryGuid).to.exist;\r\n\r\n // DrawingModel old instance\r\n const drawingModelElOld = instances[1];\r\n expect(drawingModelElOld.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElOld.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElOld.$meta?.stage).to.equals(\"Old\");\r\n expect(drawingModelElOld.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElOld.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElOld.LastMod).to.null;\r\n expect(drawingModelElOld.GeometryGuid).to.null;\r\n\r\n // Test element instance\r\n const testEl = instances[2];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ChangesetReader.test.js","sourceRoot":"","sources":["../../../../src/test/standalone/ChangesetReader.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 { DbResult, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, ColorDef, GeometryStreamProps, IModel, QueryBinder, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Arc3d, IModelJson, Point3d } from \"@itwin/core-geometry\";\r\nimport * as chai from \"chai\";\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"node:path\";\r\nimport { DrawingCategory } from \"../../Category\";\r\nimport { ChangedECInstance, ChangesetECAdaptor, ChangesetECAdaptor as ECChangesetAdaptor, ECChangeUnifierCache, PartialECChangeUnifier } from \"../../ChangesetECAdaptor\";\r\nimport { _nativeDb, ChannelControl, GraphicalElement2d } from \"../../core-backend\";\r\nimport { BriefcaseDb, SnapshotDb } from \"../../IModelDb\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\nimport { SqliteChangeOp, SqliteChangesetReader } from \"../../SqliteChangesetReader\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\n\r\ndescribe(\"Changeset Reader API\", async () => {\r\n let iTwinId: GuidString;\r\n\r\n before(() => {\r\n HubMock.startup(\"ChangesetReaderTest\", KnownTestLocations.outputDir);\r\n iTwinId = HubMock.iTwinId;\r\n });\r\n after(() => HubMock.shutdown());\r\n it(\"Able to recover from when ExclusiveRootClassId is NULL for overflow table\", async () => {\r\n /**\r\n * 1. Import schema with class that span overflow table.\r\n * 2. Insert a element for the class.\r\n * 3. Push changes to hub.\r\n * 4. Update the element.\r\n * 5. Push changes to hub.\r\n * 6. Delete the element.\r\n * 7. Set ExclusiveRootClassId to NULL for overflow table. (Simulate the issue)\r\n * 8. ECChangesetAdaptor should be able to read the changeset 2 in which element is updated against latest imodel where element is deleted.\r\n */\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const nProps = 36;\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n // Insert element with 100 properties\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const props = Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `test_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {});\r\n\r\n const geomElement = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...props,\r\n };\r\n\r\n // 2. Insert a element for the class.\r\n const id = rwIModel.elements.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n rwIModel.saveChanges();\r\n\r\n // 3. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 4. Update the element.\r\n const updatedElementProps = Object.assign(\r\n rwIModel.elements.getElementProps(id),\r\n Array(nProps).fill(undefined).map((_, i) => {\r\n return { [`p${i}`]: `updated_${i}` };\r\n }).reduce((acc, curr) => {\r\n return { ...acc, ...curr };\r\n }, {}));\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n rwIModel.elements.updateElement(updatedElementProps);\r\n rwIModel.saveChanges();\r\n\r\n // 5. Push changes to hub.\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n\r\n // 6. Delete the element.\r\n rwIModel.elements.deleteElement(id);\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, db: rwIModel, disableSchemaCheck: true });\r\n\r\n // Set ExclusiveRootClassId to NULL for overflow table to simulate the issue\r\n expect(rwIModel[_nativeDb].executeSql(\"UPDATE ec_Table SET ExclusiveRootClassId=NULL WHERE Name='bis_GeometricElement2d_Overflow'\")).to.be.eq(DbResult.BE_SQLITE_OK);\r\n\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n let assertOnOverflowTable = false;\r\n const classId = getClassIdByName(rwIModel, \"GeometricElement2d\");\r\n\r\n while (adaptor.step()) {\r\n if (adaptor.op === \"Updated\" && adaptor.inserted?.$meta?.tables[0] === \"bis_GeometricElement2d_Overflow\") {\r\n\r\n assert.isUndefined(adaptor.inserted.ECClassId);\r\n assert.equal(adaptor.inserted.ECInstanceId, \"\");\r\n assert.deepEqual(adaptor.inserted.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.inserted.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.inserted.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.inserted.$meta.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.inserted.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.inserted.$meta?.stage, \"New\");\r\n\r\n assert.equal(adaptor.deleted!.ECInstanceId, \"\");\r\n assert.isUndefined(adaptor.deleted!.ECClassId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.tables, [\"bis_GeometricElement2d_Overflow\"]);\r\n assert.equal(adaptor.deleted!.$meta?.op, \"Updated\");\r\n assert.equal(adaptor.deleted!.$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(adaptor.deleted!.$meta!.fallbackClassId, classId);\r\n assert.deepEqual(adaptor.deleted!.$meta?.changeIndexes, [3]);\r\n assert.equal(adaptor.deleted!.$meta?.stage, \"Old\");\r\n\r\n assertOnOverflowTable = true;\r\n }\r\n }\r\n\r\n assert.isTrue(assertOnOverflowTable);\r\n rwIModel.close();\r\n });\r\n\r\n function getClassIdByName(iModel: BriefcaseDb, className: string): Id64String {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModel.withPreparedStatement(`SELECT ECInstanceId from meta.ECClassDef where Name=?`, (stmt) => {\r\n stmt.bindString(1, className);\r\n assert.equal(stmt.step(), DbResult.BE_SQLITE_ROW);\r\n return stmt.getValue(0).getId();\r\n });\r\n }\r\n\r\n async function getClassNameById(iModel: BriefcaseDb, classId: string): Promise<string | undefined> {\r\n const reader = iModel.createQueryReader(`select ec_classname(${classId});`);\r\n\r\n if (await reader.step())\r\n return reader.current[0] as string;\r\n\r\n return undefined;\r\n }\r\n\r\n it(\"Changeset reader / EC adaptor\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"s\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.saveChanges(\"user 1: schema changeset\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"push schema changeset\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n }\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n let totalEl = 0;\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges(\"user 1: create drawing partition\");\r\n if (true || \"push changes\") {\r\n // Push the changes to the hub\r\n const prePushChangeSetId = rwIModel.changeset.id;\r\n await rwIModel.pushChanges({ description: \"user 1: create drawing partition\", accessToken: adminToken });\r\n const postPushChangeSetId = rwIModel.changeset.id;\r\n assert(!!postPushChangeSetId);\r\n expect(prePushChangeSetId !== postPushChangeSetId);\r\n }\r\n\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const insertElements = (imodel: BriefcaseDb, className: string = \"Test2dElement\", noOfElements: number = 10, userProp: (n: number) => object) => {\r\n for (let m = 0; m < noOfElements; ++m) {\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n const prop = userProp(++totalEl);\r\n // Create props\r\n const geomElement = {\r\n classFullName: `TestDomain:${className}`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...prop,\r\n };\r\n const id = imodel.elements.insertElement(geomElement);\r\n assert.isTrue(Id64.isValidId64(id), \"insert worked\");\r\n }\r\n };\r\n const generatedStr = new Array(10).join(\"x\");\r\n insertElements(rwIModel, \"Test2dElement\", 1, () => {\r\n return { s: generatedStr };\r\n });\r\n\r\n const updatedElements = async () => {\r\n await rwIModel.locks.acquireLocks({ exclusive: \"0x20000000004\" });\r\n const updatedElement = rwIModel.elements.getElementProps(\"0x20000000004\");\r\n (updatedElement as any).s = \"updated property\";\r\n rwIModel.elements.updateElement(updatedElement);\r\n rwIModel.saveChanges(\"user 1: updated data\");\r\n await rwIModel.pushChanges({ description: \"user 1: update property id=0x20000000004\", accessToken: adminToken });\r\n };\r\n\r\n rwIModel.saveChanges(\"user 1: data\");\r\n\r\n if (true || \"test local changes\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n\r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n\r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n\r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openLocalChanges({ db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n await rwIModel.pushChanges({ description: \"schema changeset\", accessToken: adminToken });\r\n\r\n await updatedElements();\r\n\r\n const changesets = await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir });\r\n if (true || \"updated element\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n const classId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].ECClassId, classId);\r\n assert.equal(changes[2].s, \"updated property\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[3].ECClassId, classId);\r\n assert.equal(changes[3].s, \"xxxxxxxxx\");\r\n assert.equal(changes[3].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"updated element when no classId\") {\r\n const otherDb = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 4);\r\n\r\n // new value\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[2].ECClassId);\r\n assert.isDefined(changes[2].$meta?.fallbackClassId);\r\n assert.equal(changes[2].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[2].s);\r\n assert.equal(changes[2].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[2].$meta?.op, \"Updated\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n // old value\r\n assert.equal(changes[3].ECInstanceId, \"0x20000000004\");\r\n assert.isUndefined(changes[3].ECClassId);\r\n assert.isDefined(changes[3].$meta?.fallbackClassId);\r\n assert.equal(changes[3].$meta?.fallbackClassId, \"0x3d\");\r\n assert.isUndefined(changes[3].s);\r\n assert.equal(changes[3].$meta?.classFullName, \"BisCore:GeometricElement2d\");\r\n assert.equal(changes[3].$meta?.op, \"Updated\");\r\n assert.equal(changes[3].$meta?.stage, \"Old\");\r\n };\r\n\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[3].pathname, db: otherDb, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n\r\n if (true || \"test changeset file\") {\r\n const testChanges = async (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 3);\r\n\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.isNotNull(changes[0].LastMod);\r\n assert.isNotNull(changes[0].GeometryGuid);\r\n\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n assert.isNull(changes[1].LastMod);\r\n assert.isNull(changes[1].GeometryGuid);\r\n\r\n assert.equal(changes[2].ECInstanceId, \"0x20000000004\");\r\n assert.equal(changes[2].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n assert.equal(changes[2].$meta?.op, \"Inserted\");\r\n assert.equal(changes[2].$meta?.stage, \"New\");\r\n\r\n const el = changes.filter((x) => x.ECInstanceId === \"0x20000000004\")[0];\r\n assert.equal(el.Rotation, 0);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Origin, { X: 0, Y: 0 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxLow, { X: -25, Y: -25 });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.BBoxHigh, { X: 15, Y: 15 });\r\n\r\n assert.equal(el.Category.Id, \"0x20000000002\");\r\n assert.isNotEmpty(el.Category.RelECClassId);\r\n\r\n const categoryRelClass = await getClassNameById(rwIModel, el.Category.RelECClassId);\r\n assert.equal(\"BisCore:GeometricElement2dIsInCategory\", categoryRelClass);\r\n assert.equal(el.s, \"xxxxxxxxx\");\r\n assert.isNull(el.CodeValue);\r\n assert.isNull(el.UserLabel);\r\n assert.isNull(el.JsonProperties);\r\n assert.instanceOf(el.GeometryStream, Uint8Array);\r\n assert.typeOf(el.FederationGuid, \"string\");\r\n assert.typeOf(el.LastMod, \"string\");\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.Parent, { Id: null, RelECClassId: null });\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n assert.deepEqual(el.TypeDefinition, { Id: null, RelECClassId: null });\r\n\r\n assert.equal(el.CodeSpec.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeSpec.RelECClassId);\r\n\r\n const codeSpecRelClass = await getClassNameById(rwIModel, el.CodeSpec.RelECClassId);\r\n assert.equal(\"BisCore:CodeSpecSpecifiesCode\", codeSpecRelClass);\r\n\r\n assert.equal(el.CodeScope.Id, \"0x1\");\r\n assert.isNotEmpty(el.CodeScope.RelECClassId);\r\n\r\n const codeScopeRelClass = await getClassNameById(rwIModel, el.CodeScope.RelECClassId);\r\n assert.equal(\"BisCore:ElementScopesCode\", codeScopeRelClass);\r\n\r\n assert.deepEqual(el.$meta, {\r\n tables: [\r\n \"bis_GeometricElement2d\",\r\n \"bis_Element\",\r\n ],\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n changeIndexes: [\r\n 2,\r\n 1,\r\n ],\r\n stage: \"New\",\r\n });\r\n }\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n await testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.acceptClass()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 1);\r\n assert.equal(changes[0].$meta?.classFullName, \"TestDomain:Test2dElement\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptClass(\"TestDomain.Test2dElement\");\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n if (true || \"test ChangesetAdaptor.adaptor()\") {\r\n const testChanges = (changes: ChangedECInstance[]) => {\r\n assert.equal(changes.length, 2);\r\n assert.equal(changes[0].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[0].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[0].$meta?.op, \"Updated\");\r\n assert.equal(changes[0].$meta?.stage, \"New\");\r\n assert.equal(changes[1].ECInstanceId, \"0x20000000001\");\r\n assert.equal(changes[1].$meta?.classFullName, \"BisCore:DrawingModel\");\r\n assert.equal(changes[1].$meta?.op, \"Updated\");\r\n assert.equal(changes[1].$meta?.stage, \"Old\");\r\n };\r\n if (true || \"test with InMemoryInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createInMemoryCache());\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n\r\n if (true || \"test with SqliteBackedInstanceCache\") {\r\n using reader = SqliteChangesetReader.openFile({ fileName: changesets[2].pathname, db: rwIModel, disableSchemaCheck: true });\r\n using adaptor = new ECChangesetAdaptor(reader);\r\n adaptor.acceptOp(\"Updated\")\r\n using pcu = new PartialECChangeUnifier(reader.db, ECChangeUnifierCache.createSqliteBackedCache(rwIModel));\r\n while (adaptor.step()) {\r\n pcu.appendFrom(adaptor);\r\n }\r\n testChanges(Array.from(pcu.instances));\r\n }\r\n }\r\n rwIModel.close();\r\n });\r\n it(\"revert timeline changes\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n let nProps = 0;\r\n // 1. Import schema with class that span overflow table.\r\n const addPropertyAndImportSchema = async () => {\r\n await rwIModel.acquireSchemaLock();\r\n ++nProps;\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00.${nProps}\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n ${Array(nProps).fill(undefined).map((_, i) => `<ECProperty propertyName=\"p${i + 1}\" typeName=\"string\"/>`).join(\"\\n\")}\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n };\r\n await addPropertyAndImportSchema();\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const createEl = async (args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: drawingModelId });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...args,\r\n };\r\n return rwIModel.elements.insertElement(e1);;\r\n };\r\n const updateEl = async (id: Id64String, args: { [key: string]: any }) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(id), args);\r\n rwIModel.elements.updateElement(updatedElementProps);\r\n };\r\n\r\n const deleteEl = async (id: Id64String) => {\r\n await rwIModel.locks.acquireLocks({ exclusive: id });\r\n rwIModel.elements.deleteElement(id);\r\n };\r\n const getChanges = async () => {\r\n return HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir: path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\") });\r\n };\r\n\r\n const findEl = (id: Id64String) => {\r\n try {\r\n return rwIModel.elements.getElementProps(id);\r\n } catch {\r\n return undefined;\r\n }\r\n };\r\n // 2. Insert a element for the class\r\n const el1 = await createEl({ p1: \"test1\" });\r\n const el2 = await createEl({ p1: \"test2\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert 2 elements\" });\r\n\r\n // 3. Update the element.\r\n await updateEl(el1, { p1: \"test3\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element 1\" });\r\n\r\n // 4. Delete the element.\r\n await deleteEl(el2);\r\n const el3 = await createEl({ p1: \"test4\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element 2\" });\r\n\r\n // 5. import schema and insert element 4 & update element 3\r\n await addPropertyAndImportSchema();\r\n const el4 = await createEl({ p1: \"test5\", p2: \"test6\" });\r\n await updateEl(el3, { p1: \"test7\", p2: \"test8\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 4 & update element 3\" });\r\n\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n // 6. Revert to timeline 2\r\n await rwIModel.revertAndPushChanges({ toIndex: 2, description: \"revert to timeline 2\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"revert to timeline 2\");\r\n\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 6, description: \"reinstate last reverted changeset\" });\r\n assert.equal((await getChanges()).at(-1)!.description, \"reinstate last reverted changeset\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\"]);\r\n\r\n await addPropertyAndImportSchema();\r\n const el5 = await createEl({ p1: \"test9\", p2: \"test10\", p3: \"test11\" });\r\n await updateEl(el1, { p1: \"test12\", p2: \"test13\", p3: \"test114\" });\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"import schema, insert element 5 & update element 1\" });\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n // skip schema changes & auto generated comment\r\n await rwIModel.revertAndPushChanges({ toIndex: 1, skipSchemaChanges: true });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 8 to 1 (schema changes skipped)\");\r\n assert.isUndefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isUndefined(findEl(el3));\r\n assert.isUndefined(findEl(el4));\r\n assert.isUndefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n\r\n await rwIModel.revertAndPushChanges({ toIndex: 9 });\r\n assert.equal((await getChanges()).at(-1)!.description, \"Reverted changes from 9 to 9\");\r\n assert.isDefined(findEl(el1));\r\n assert.isUndefined(findEl(el2));\r\n assert.isDefined(findEl(el3));\r\n assert.isDefined(findEl(el4));\r\n assert.isDefined(findEl(el5));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n assert.deepEqual(Object.getOwnPropertyNames(rwIModel.getMetaData(\"TestDomain:Test2dElement\").properties), [\"p1\", \"p2\", \"p3\"]);\r\n rwIModel.close();\r\n });\r\n it(\"openGroup() & writeToFile()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = rwIModel.elements.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n\r\n // 3. Update the element.\r\n const updatedElementProps = Object.assign(rwIModel.elements.getElementProps(e1id), { p1: \"test2\" });\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n rwIModel.elements.updateElement(updatedElementProps);\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"update element\", accessToken: adminToken });\r\n\r\n // 4. Delete the element.\r\n await rwIModel.locks.acquireLocks({ exclusive: e1id });\r\n rwIModel.elements.deleteElement(e1id);\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"delete element\", accessToken: adminToken });\r\n\r\n const targetDir = path.join(KnownTestLocations.outputDir, rwIModelId, \"changesets\");\r\n const changesets = (await HubMock.downloadChangesets({ iModelId: rwIModelId, targetDir })).slice(1);\r\n\r\n const testElementClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n if (true || \"Grouping changeset [2,3,4] should not contain TestDomain:Test2dElement as insert+update+delete=noop\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n\r\n expect(instances.length).to.eq(1);\r\n expect(instances[0].id).to.eq(\"0x20000000001\");\r\n expect(instances[0].classId).to.eq(drawingModelClassId);\r\n expect(instances[0].op).to.eq(\"Updated\");\r\n expect(instances[0].classFullName).to.eq(\"BisCore:DrawingModel\");\r\n }\r\n\r\n if (true || \"Grouping changeset [3,4] should contain update+delete=delete TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(1).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Deleted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n\r\n const groupCsFile = path.join(KnownTestLocations.outputDir, \"changeset_grouping.ec\");\r\n if (true || \"Grouping changeset [2,3] should contain insert+update=insert TestDomain:Test2dElement\") {\r\n const reader = SqliteChangesetReader.openGroup({ changesetFiles: changesets.slice(0, 2).map((c) => c.pathname), db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n\r\n reader.writeToFile({ fileName: groupCsFile, containsSchemaChanges: false, overwriteFile: true });\r\n }\r\n if (true || \"writeToFile() test\") {\r\n const reader = SqliteChangesetReader.openFile({ fileName: groupCsFile, db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ECChangesetAdaptor(reader);\r\n const instances: ({ id: string, classId?: string, op: SqliteChangeOp, classFullName?: string })[] = [];\r\n while (adaptor.step()) {\r\n if (adaptor.inserted) {\r\n instances.push({ id: adaptor.inserted?.ECInstanceId, classId: adaptor.inserted.ECClassId, op: adaptor.op, classFullName: adaptor.inserted.$meta?.classFullName });\r\n } else if (adaptor.deleted) {\r\n instances.push({ id: adaptor.deleted?.ECInstanceId, classId: adaptor.deleted.ECClassId, op: adaptor.op, classFullName: adaptor.deleted.$meta?.classFullName });\r\n }\r\n }\r\n expect(instances.length).to.eq(3);\r\n expect(instances[0]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[1]).deep.eq({\r\n id: \"0x20000000004\",\r\n classId: testElementClassId,\r\n op: \"Inserted\",\r\n classFullName: \"TestDomain:Test2dElement\",\r\n });\r\n expect(instances[2]).deep.eq({\r\n id: \"0x20000000001\",\r\n classId: drawingModelClassId,\r\n op: \"Updated\",\r\n classFullName: \"BisCore:DrawingModel\",\r\n });\r\n }\r\n rwIModel.close();\r\n });\r\n\r\n it(\"Delete class FK constraint violation in cache table\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n const firstItems = firstBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInFirst, !!firstItems?.TestClass);\r\n\r\n const secondItems = secondBriefcase.getSchemaProps(\"TestSchema\").items;\r\n assert.equal(isClassInSecond, !!secondItems?.TestClass);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = 'TestClass'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"import initial schema\");\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n\r\n // Sync the second briefcase with the iModel\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"imported schema\");\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Delete class major change\", accessToken: adminToken });\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, true);\r\n\r\n // Apply the latest changeset to a new briefcase\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);\r\n });\r\n\r\n\r\n it(\"Delete class FK constraint violation in cache table through a revert\", async () => {\r\n // Helper to check if TestClass exists in schema and cache table for both briefcases\r\n function checkClass(className: string, firstBriefcase: BriefcaseDb, isClassInFirst: boolean, secondBriefcase: BriefcaseDb, isClassInSecond: boolean) {\r\n assert.equal(isClassInFirst, !!firstBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n assert.equal(isClassInSecond, !!secondBriefcase.getSchemaProps(\"TestSchema\").items?.[className]);\r\n\r\n const sql = `SELECT ch.classId FROM ec_cache_ClassHierarchy ch JOIN ec_Class c ON ch.classId = c.Id WHERE c.Name = '${className}'`;\r\n const firstStmt = firstBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(firstStmt.step(), isClassInFirst ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n firstStmt[Symbol.dispose]();\r\n\r\n const secondStmt = secondBriefcase.prepareSqliteStatement(sql);\r\n assert.equal(secondStmt.step(), isClassInSecond ? DbResult.BE_SQLITE_ROW : DbResult.BE_SQLITE_DONE);\r\n secondStmt[Symbol.dispose]();\r\n }\r\n\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefCase, secondBriefCase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n\r\n // Enable shared channel for both\r\n [firstBriefCase, secondBriefCase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"import initial schema\");\r\n\r\n // Push the changes to the hub\r\n await firstBriefCase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Import the schema\r\n await firstBriefCase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n\r\n <ECEntityClass typeName=\"AnotherTestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefCase.saveChanges(\"imported schema\");\r\n\r\n // Push the changeset to the hub\r\n await firstBriefCase.pushChanges({ description: \"Add another class change\", accessToken: adminToken });\r\n // Sync the second briefcase\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, true, secondBriefCase, true);\r\n\r\n // Revert the latest changeset from the first briefcase\r\n try {\r\n await firstBriefCase.revertAndPushChanges({ toIndex: 2, description: \"Revert last changeset\" });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, true);\r\n\r\n try {\r\n await secondBriefCase.pullChanges({ accessToken: adminToken });\r\n } catch (error: any) {\r\n assert.fail(`Should not have failed with the error: ${error.message}`);\r\n }\r\n\r\n checkClass(\"TestClass\", firstBriefCase, true, secondBriefCase, true);\r\n checkClass(\"AnotherTestClass\", firstBriefCase, false, secondBriefCase, false);\r\n\r\n // Cleanup\r\n await Promise.all([secondBriefCase.close(), firstBriefCase.close()]);\r\n });\r\n\r\n it(\"Track changeset health stats\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n\r\n // Open two briefcases for the same iModel\r\n const [firstBriefcase, secondBriefcase] = await Promise.all([\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken }),\r\n HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken })\r\n ]);\r\n\r\n [firstBriefcase, secondBriefcase].forEach(briefcase => briefcase.channels.addAllowedChannel(ChannelControl.sharedChannelName));\r\n\r\n await firstBriefcase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n </ECEntityClass>\r\n </ECSchema>`]);\r\n firstBriefcase.saveChanges(\"import initial schema\");\r\n\r\n // Enable changeset tracking for both briefcases\r\n await Promise.all([firstBriefcase.enableChangesetStatTracking(), secondBriefcase.enableChangesetStatTracking()]);\r\n\r\n await firstBriefcase.pushChanges({ description: \"push initial schema changeset\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Schema upgrade\r\n await secondBriefcase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEntityClass typeName=\"TestClass\">\r\n <BaseClass>bis:PhysicalElement</BaseClass>\r\n <ECProperty propertyName=\"TestProperty\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n secondBriefcase.saveChanges(\"imported schema\");\r\n\r\n await secondBriefcase.pushChanges({ description: \"Added a property to TestClass and an enum\", accessToken: adminToken });\r\n await firstBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n // Major schema change\r\n await firstBriefcase.importSchemaStrings([`<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"2.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"CoreCustomAttributes\" version=\"1.0.0\" alias=\"CoreCA\" />\r\n\r\n <ECCustomAttributes>\r\n <DynamicSchema xmlns = 'CoreCustomAttributes.1.0.0' />\r\n </ECCustomAttributes>\r\n\r\n <ECEnumeration typeName=\"TestEnum\" backingTypeName=\"int\" isStrict=\"true\">\r\n <ECEnumerator name=\"Enumerator1\" value=\"1\" displayLabel=\"TestEnumerator1\"/>\r\n <ECEnumerator name=\"Enumerator2\" value=\"2\" displayLabel=\"TestEnumerator2\"/>\r\n </ECEnumeration>\r\n </ECSchema>`]);\r\n firstBriefcase.saveChanges(\"imported schema\");\r\n\r\n await firstBriefcase.pushChanges({ description: \"Deleted TestClass\", accessToken: adminToken });\r\n await secondBriefcase.pullChanges({ accessToken: adminToken });\r\n\r\n const firstBriefcaseChangesets = await firstBriefcase.getAllChangesetHealthData();\r\n const secondBriefcaseChangesets = await secondBriefcase.getAllChangesetHealthData();\r\n\r\n assert.equal(firstBriefcaseChangesets.length, 1);\r\n const firstBriefcaseChangeset = firstBriefcaseChangesets[0];\r\n\r\n expect(firstBriefcaseChangeset.changesetIndex).to.be.eql(2);\r\n expect(firstBriefcaseChangeset.uncompressedSizeBytes).to.be.greaterThan(300);\r\n expect(firstBriefcaseChangeset.insertedRows).to.be.greaterThanOrEqual(4);\r\n expect(firstBriefcaseChangeset.updatedRows).to.be.greaterThanOrEqual(1);\r\n expect(firstBriefcaseChangeset.deletedRows).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.totalFullTableScans).to.be.eql(0);\r\n expect(firstBriefcaseChangeset.perStatementStats.length).to.be.eql(5);\r\n\r\n assert.equal(secondBriefcaseChangesets.length, 2);\r\n const [secondBriefcaseChangeset1, secondBriefcaseChangeset2] = secondBriefcaseChangesets;\r\n\r\n expect(secondBriefcaseChangeset1.changesetIndex).to.be.eql(1);\r\n expect(secondBriefcaseChangeset1.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset1.insertedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset1.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset1.deletedRows).to.be.greaterThanOrEqual(0)\r\n expect(secondBriefcaseChangeset1.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset1.perStatementStats.length).to.be.eql(11);\r\n\r\n expect(secondBriefcaseChangeset2.changesetIndex).to.be.eql(3);\r\n expect(secondBriefcaseChangeset2.uncompressedSizeBytes).to.be.greaterThan(40000);\r\n expect(secondBriefcaseChangeset2.insertedRows).to.be.greaterThanOrEqual(0);\r\n expect(secondBriefcaseChangeset2.updatedRows).to.be.greaterThanOrEqual(921);\r\n expect(secondBriefcaseChangeset2.deletedRows).to.be.eql(52);\r\n expect(secondBriefcaseChangeset2.totalFullTableScans).to.be.eql(0);\r\n expect(secondBriefcaseChangeset2.perStatementStats.length).to.be.eql(11);\r\n\r\n // Cleanup\r\n await Promise.all([secondBriefcase.close(), firstBriefcase.close()]);\r\n });\r\n it(\"openInMemory() & step()\", async () => {\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const rwIModelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(rwIModelId);\r\n const rwIModel = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: rwIModelId, accessToken: adminToken });\r\n // 1. Import schema with class that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"Test2dElement\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p1\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n await rwIModel.importSchemaStrings([schema]);\r\n rwIModel.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await rwIModel.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(rwIModel, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(rwIModel, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n rwIModel.saveChanges();\r\n await rwIModel.pushChanges({ description: \"setup category\", accessToken: adminToken });\r\n\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const e1 = {\r\n classFullName: `TestDomain:Test2dElement`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n ...{ p1: \"test1\" },\r\n };\r\n\r\n // 2. Insert a element for the class\r\n await rwIModel.locks.acquireLocks({ shared: drawingModelId });\r\n const e1id = rwIModel.elements.insertElement(e1);\r\n assert.isTrue(Id64.isValidId64(e1id), \"insert worked\");\r\n const testElClassId: Id64String = getClassIdByName(rwIModel, \"Test2dElement\");\r\n\r\n if (true) {\r\n const reader = SqliteChangesetReader.openInMemory({ db: rwIModel, disableSchemaCheck: true });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(1);\r\n const testEl = instances[0];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n\r\n // save changes and verify the the txn\r\n rwIModel.saveChanges();\r\n\r\n if (true) {\r\n const txnId = rwIModel.txns.getLastSavedTxnProps()?.id as string;\r\n expect(txnId).to.not.be.undefined;\r\n const reader = SqliteChangesetReader.openTxn({ db: rwIModel, disableSchemaCheck: true, txnId });\r\n const adaptor = new ChangesetECAdaptor(reader);\r\n const unifier = new PartialECChangeUnifier(rwIModel)\r\n while (adaptor.step()) {\r\n unifier.appendFrom(adaptor);\r\n }\r\n reader.close();\r\n\r\n // verify the inserted element's properties\r\n const instances = Array.from(unifier.instances);\r\n expect(instances.length).to.equals(3);\r\n const drawingModelClassId: Id64String = getClassIdByName(rwIModel, \"DrawingModel\");\r\n\r\n // DrawingModel new instance\r\n const drawingModelElNew = instances[0];\r\n expect(drawingModelElNew.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElNew.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElNew.$meta?.stage).to.equals(\"New\");\r\n expect(drawingModelElNew.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElNew.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElNew.LastMod).to.exist;\r\n expect(drawingModelElNew.GeometryGuid).to.exist;\r\n\r\n // DrawingModel old instance\r\n const drawingModelElOld = instances[1];\r\n expect(drawingModelElOld.$meta?.op).to.equals(\"Updated\");\r\n expect(drawingModelElOld.$meta?.classFullName).to.equals(\"BisCore:DrawingModel\");\r\n expect(drawingModelElOld.$meta?.stage).to.equals(\"Old\");\r\n expect(drawingModelElOld.ECClassId).to.equals(drawingModelClassId);\r\n expect(drawingModelElOld.ECInstanceId).to.equals(drawingModelId);\r\n expect(drawingModelElOld.LastMod).to.null;\r\n expect(drawingModelElOld.GeometryGuid).to.null;\r\n\r\n // Test element instance\r\n const testEl = instances[2];\r\n expect(testEl.$meta?.op).to.equals(\"Inserted\");\r\n expect(testEl.$meta?.classFullName).to.equals(\"TestDomain:Test2dElement\");\r\n expect(testEl.$meta?.stage).to.equals(\"New\");\r\n expect(testEl.ECClassId).to.equals(testElClassId);\r\n expect(testEl.ECInstanceId).to.equals(e1id);\r\n expect(testEl.Model.Id).to.equals(drawingModelId);\r\n expect(testEl.Category.Id).to.equals(drawingCategoryId);\r\n expect(testEl.Origin.X).to.equals(0);\r\n expect(testEl.Origin.Y).to.equals(0);\r\n expect(testEl.Rotation).to.equals(0);\r\n expect(testEl.BBoxLow.X).to.equals(-25);\r\n expect(testEl.BBoxLow.Y).to.equals(-25);\r\n expect(testEl.BBoxHigh.X).to.equals(15);\r\n expect(testEl.BBoxHigh.Y).to.equals(15);\r\n expect(testEl.p1).to.equals(\"test1\");\r\n }\r\n await rwIModel.pushChanges({ description: \"insert element\", accessToken: adminToken });\r\n });\r\n it(\"Instance update to a different class (bug)\", async () => {\r\n /**\r\n * Test scenario: Verifies changeset reader behavior when an instance ID is reused with a different class.\r\n *\r\n * Steps:\r\n * 1. Import schema with two classes (T1 and T2) that inherit from GraphicalElement2d.\r\n * - T1 has property 'p' of type string\r\n * - T2 has property 'p' of type long\r\n * 2. Insert an element of type T1 with id=elId and property p=\"wwww\"\r\n * 3. Push changeset #1: \"insert element\"\r\n * 4. Delete the T1 element\r\n * 5. Manipulate the element ID sequence to force reuse of the same ID\r\n * 6. Insert a new element of type T2 with the same id=elId but property p=1111\r\n * 7. Push changeset #2: \"buggy changeset\"\r\n *\r\n * Verification:\r\n * - Changeset #2 should show an \"Updated\" operation (not Delete+Insert)\r\n * - In bis_Element table: ECClassId changes from T1 to T2\r\n * - In bis_GeometricElement2d table: ECClassId changes from T1 to T2\r\n * - Property 'p' changes from string \"wwww\" to integer 1111\r\n *\r\n * This tests the changeset reader's ability to handle instance class changes,\r\n * which can occur in edge cases where IDs are reused with different types.\r\n */\r\n const adminToken = \"super manager token\";\r\n const iModelName = \"test\";\r\n const modelId = await HubMock.createNewIModel({ iTwinId, iModelName, description: \"TestSubject\", accessToken: adminToken });\r\n assert.isNotEmpty(modelId);\r\n let b1 = await HubWrappers.downloadAndOpenBriefcase({ iTwinId, iModelId: modelId, accessToken: adminToken });\r\n // 1. Import schema with classes that span overflow table.\r\n const schema = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestDomain\" alias=\"ts\" version=\"01.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.1\">\r\n <ECSchemaReference name=\"BisCore\" version=\"01.00\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"T1\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p\" typeName=\"string\"/>\r\n </ECEntityClass>\r\n <ECEntityClass typeName=\"T2\">\r\n <BaseClass>bis:GraphicalElement2d</BaseClass>\r\n <ECProperty propertyName=\"p\" typeName=\"long\"/>\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n await b1.importSchemaStrings([schema]);\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n // Create drawing model and category\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n const codeProps = Code.createEmpty();\r\n codeProps.value = \"DrawingModel\";\r\n const [, drawingModelId] = IModelTestUtils.createAndInsertDrawingPartitionAndModel(b1, codeProps, true);\r\n let drawingCategoryId = DrawingCategory.queryCategoryIdByName(b1, IModel.dictionaryId, \"MyDrawingCategory\");\r\n if (undefined === drawingCategoryId)\r\n drawingCategoryId = DrawingCategory.insert(b1, IModel.dictionaryId, \"MyDrawingCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n\r\n const geomElementT1 = {\r\n classFullName: `TestDomain:T1`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n p: \"wwww\",\r\n };\r\n\r\n const elId = b1.elements.insertElement(geomElementT1);\r\n assert.isTrue(Id64.isValidId64(elId), \"insert worked\");\r\n b1.saveChanges();\r\n await b1.pushChanges({ description: \"insert element\" });\r\n\r\n await b1.locks.acquireLocks({ shared: drawingModelId, exclusive: elId });\r\n await b1.locks.acquireLocks({ shared: IModel.dictionaryId });\r\n b1.elements.deleteElement(elId);\r\n b1.saveChanges();\r\n\r\n // Force id set to reproduce same instance with different classid\r\n const bid = BigInt(elId) - 1n\r\n b1[_nativeDb].saveLocalValue(\"bis_elementidsequence\", bid.toString());\r\n b1.saveChanges();\r\n const fileName = b1[_nativeDb].getFilePath();\r\n b1.close();\r\n\r\n b1 = await BriefcaseDb.open({ fileName });\r\n b1.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n\r\n const geomElementT2 = {\r\n classFullName: `TestDomain:T2`,\r\n model: drawingModelId,\r\n category: drawingCategoryId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n p: 1111,\r\n };\r\n\r\n const elId2 = b1.elements.insertElement(geomElementT2);\r\n chai.expect(elId).equals(elId2);\r\n\r\n b1.saveChanges();\r\n await b1.pushChanges({ description: \"buggy changeset\" });\r\n\r\n const getChanges = async () => {\r\n return HubMock.downloadChangesets({ iModelId: modelId, targetDir: path.join(KnownTestLocations.outputDir, modelId, \"changesets\") });\r\n };\r\n\r\n\r\n const changesets = await getChanges();\r\n chai.expect(changesets.length).equals(2);\r\n chai.expect(changesets[0].description).equals(\"insert element\");\r\n chai.expect(changesets[1].description).equals(\"buggy changeset\");\r\n\r\n const getClassId = async (name: string) => {\r\n const r = b1.createQueryReader(\"SELECT FORMAT('0x%x', ec_classid(?))\", QueryBinder.from([name]));\r\n if (await r.step()) {\r\n return r.current[0];\r\n }\r\n }\r\n\r\n const t1ClassId = await getClassId(\"TestDomain:T1\");\r\n const t2ClassId = await getClassId(\"TestDomain:T2\");\r\n\r\n const reader = SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 });\r\n let bisElementAsserted = false;\r\n let bisGeometricElement2dAsserted = false;\r\n while (reader.step()) {\r\n if (reader.tableName === \"bis_Element\" && reader.op === \"Updated\") {\r\n bisElementAsserted = true;\r\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\r\n \"Id\",\r\n \"ECClassId\",\r\n \"ModelId\",\r\n \"LastMod\",\r\n \"CodeSpecId\",\r\n \"CodeScopeId\",\r\n \"CodeValue\",\r\n \"UserLabel\",\r\n \"ParentId\",\r\n \"ParentRelECClassId\",\r\n \"FederationGuid\",\r\n \"JsonProperties\",\r\n ]);\r\n\r\n const oldId = reader.getChangeValueId(0, \"Old\");\r\n const newId = reader.getChangeValueId(0, \"New\");\r\n chai.expect(oldId).equals(elId);\r\n chai.expect(newId).to.be.undefined;\r\n\r\n const oldClassId = reader.getChangeValueId(1, \"Old\");\r\n const newClassId = reader.getChangeValueId(1, \"New\");\r\n chai.expect(oldClassId).equals(t1ClassId);\r\n chai.expect(newClassId).equals(t2ClassId);\r\n chai.expect(oldClassId).is.not.equal(newClassId);\r\n }\r\n if (reader.tableName === \"bis_GeometricElement2d\" && reader.op === \"Updated\") {\r\n bisGeometricElement2dAsserted = true;\r\n chai.expect(reader.getColumnNames(reader.tableName)).deep.equals([\r\n \"ElementId\",\r\n \"ECClassId\",\r\n \"CategoryId\",\r\n \"Origin_X\",\r\n \"Origin_Y\",\r\n \"Rotation\",\r\n \"BBoxLow_X\",\r\n \"BBoxLow_Y\",\r\n \"BBoxHigh_X\",\r\n \"BBoxHigh_Y\",\r\n \"GeometryStream\",\r\n \"TypeDefinitionId\",\r\n \"TypeDefinitionRelECClassId\",\r\n \"js1\",\r\n \"js2\",\r\n ]);\r\n\r\n // ECInstanceId\r\n const oldId = reader.getChangeValueId(0, \"Old\");\r\n const newId = reader.getChangeValueId(0, \"New\");\r\n chai.expect(oldId).equals(elId);\r\n chai.expect(newId).to.be.undefined;\r\n\r\n // ECClassId (changed)\r\n const oldClassId = reader.getChangeValueId(1, \"Old\");\r\n const newClassId = reader.getChangeValueId(1, \"New\");\r\n chai.expect(oldClassId).equals(t1ClassId);\r\n chai.expect(newClassId).equals(t2ClassId);\r\n chai.expect(oldClassId).is.not.equal(newClassId);\r\n\r\n // Property 'p' changed type and value.\r\n const oldP = reader.getChangeValueText(13, \"Old\");\r\n const newP = reader.getChangeValueInteger(13, \"New\");\r\n chai.expect(oldP).equals(\"wwww\");\r\n chai.expect(newP).equals(1111);\r\n }\r\n }\r\n\r\n chai.expect(bisElementAsserted).to.be.true;\r\n chai.expect(bisGeometricElement2dAsserted).to.be.true;\r\n reader.close();\r\n\r\n\r\n // ChangesetECAdaptor works incorrectly as it does not expect ECClassId to change in an update.\r\n const adaptor = new ChangesetECAdaptor(\r\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\r\n );\r\n\r\n adaptor.acceptClass(GraphicalElement2d.classFullName)\r\n adaptor.acceptOp(\"Updated\");\r\n\r\n let ecChangeForElementAsserted = false;\r\n let ecChangeForGeometricElement2dAsserted = false;\r\n while(adaptor.step()){\r\n if (adaptor.reader.tableName === \"bis_Element\"){\r\n ecChangeForElementAsserted = true;\r\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n }\r\n if (adaptor.reader.tableName === \"bis_GeometricElement2d\") {\r\n ecChangeForGeometricElement2dAsserted = true;\r\n chai.expect(adaptor.inserted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.deleted?.$meta?.classFullName).equals(\"TestDomain:T1\"); // WRONG should be TestDomain:T2\r\n chai.expect(adaptor.inserted?.p).equals(\"0x457\"); // CORRECT p in T2 is integer\r\n chai.expect(adaptor.deleted?.p).equals(\"wwww\"); // CORRECT p in T1 is string\r\n }\r\n }\r\n chai.expect(ecChangeForElementAsserted).to.be.true;\r\n chai.expect(ecChangeForGeometricElement2dAsserted).to.be.true;\r\n adaptor.close();\r\n\r\n // PartialECChangeUnifier fail to combine changes correctly when ECClassId is updated.\r\n const adaptor2 = new ChangesetECAdaptor(\r\n SqliteChangesetReader.openFile({ fileName: changesets[1].pathname, disableSchemaCheck: true, db: b1 })\r\n );\r\n const unifier = new PartialECChangeUnifier(b1);\r\n adaptor2.acceptClass(GraphicalElement2d.classFullName)\r\n adaptor2.acceptOp(\"Updated\");\r\n while(adaptor2.step()){\r\n unifier.appendFrom(adaptor2);\r\n }\r\n\r\n chai.expect(unifier.getInstanceCount()).to.be.equals(2); // WRONG should be 1\r\n\r\n b1.saveChanges();\r\n b1.close();\r\n });\r\n\r\n});\r\n"]}