@itwin/core-backend 5.2.3 → 5.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -1
- package/lib/cjs/CloudSqlite.d.ts +21 -9
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +9 -0
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +21 -9
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +9 -0
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js +13 -0
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +27 -0
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/package.json +14 -14
|
@@ -420,6 +420,19 @@ describe('InstanceKeyLRUCache', () => {
|
|
|
420
420
|
const retrievedResult2 = cache.get(testArgs1);
|
|
421
421
|
expect(retrievedResult2).to.be.undefined;
|
|
422
422
|
});
|
|
423
|
+
it('should throw when trying to delete with all undefined keys', () => {
|
|
424
|
+
const cache = new InstanceKeyLRUCache(3);
|
|
425
|
+
cache.set(testArgs1, testResults[0]);
|
|
426
|
+
cache.set(testArgs2, testResults[1]);
|
|
427
|
+
cache.set(testArgs3, testResults[2]);
|
|
428
|
+
expect(cache.size).to.equal(3);
|
|
429
|
+
expect(() => cache.delete({
|
|
430
|
+
partialKey: undefined,
|
|
431
|
+
federationGuid: undefined,
|
|
432
|
+
code: undefined
|
|
433
|
+
})).to.throw(Error, "ResolveInstanceKeyArgs must have a partialKey, code, or federationGuid");
|
|
434
|
+
expect(cache.size).to.equal(3);
|
|
435
|
+
});
|
|
423
436
|
it('should clear the cache', () => {
|
|
424
437
|
const cache = new InstanceKeyLRUCache(3);
|
|
425
438
|
cache.set(testArgs1, testResults[0]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementLRUCache.test.js","sourceRoot":"","sources":["../../../src/test/ElementLRUCache.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport { CachedElement, ElementLRUCache, InstanceKeyLRUCache } from \"../internal/ElementLRUCache\";\nimport { IModelJsNative } from \"../core-backend\";\nimport { Id64 } from \"@itwin/core-bentley\";\n\ndescribe('ElementLruCache', () => {\n const testElem1: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId\",\n model: \"testModel\",\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n },\n classFullName: \"testName\"\n },\n }\n\n const testElem2: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId2\",\n model: \"testModel2\",\n code: {\n spec: \"testSpec2\",\n scope: \"testScope2\",\n value: \"testValue2\"\n },\n classFullName: \"testName2\"\n },\n }\n\n const testElem3: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId3\",\n model: \"testModel3\",\n code: {\n spec: \"testSpec3\",\n scope: \"testScope3\"\n },\n classFullName: \"testName3\"\n },\n }\n\n const testElemFedGuid: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testIdFed\",\n model: \"testModel\",\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n },\n classFullName: \"testName\",\n federationGuid: \"testFedGuid\"\n },\n }\n\n const testElemCode: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId5\",\n model: \"testModel5\",\n code: {\n spec: \"testSpec2:testValue2\",\n scope: \"testScope2\"\n },\n classFullName: \"testName5\",\n federationGuid: \"testFedGuid5\"\n },\n }\n\n const testElemNoId: CachedElement = {\n loadOptions: {},\n elProps: {\n id: undefined,\n model: \"testModel5\",\n code: {\n spec: \"testSpec2\",\n scope: \"testScope2\"\n },\n classFullName: \"testName5\",\n federationGuid: \"testFedGuid5\"\n },\n }\n\n it('should store and retrieve a valid element', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem1);\n });\n\n it('should overwrite existing valid element', () => {\n const cache = new ElementLRUCache(3);\n const testElemModel = testElem1;\n cache.set(testElemModel);\n const retrievedElem = cache.get({ id: testElemModel.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElemModel);\n\n testElemModel.elProps.model = \"newModel\";\n cache.set(testElemModel);\n const retrievedElem2 = cache.get({ id: testElemModel.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElemModel);\n });\n\n it('should store and retrieve a valid element by fedGuid', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElemFedGuid);\n const retrievedElem = cache.get({ federationGuid: testElemFedGuid.elProps.federationGuid });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElemFedGuid);\n });\n\n it('should store and retrieve a valid element by code', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n const retrievedElem = cache.get({ code: testElem1.elProps.code });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem1);\n\n cache.set(testElem2);\n const retrievedElem2 = cache.get({ code: testElem2.elProps.code });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem2);\n });\n\n it('should fail to store an element without id', () => {\n const cache = new ElementLRUCache(3);\n expect(() => cache.set(testElemNoId)).to.throw(Error, \"Element must have an id\");\n });\n\n it('should delete least used element', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n cache.set(testElemFedGuid);\n expect(cache.size).to.equal(3);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem2);\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.be.undefined;\n\n const retrievedElem3 = cache.get({ id: testElem3.elProps.id });\n expect(retrievedElem3).to.not.be.undefined;\n expect(retrievedElem3).to.equal(testElem3);\n });\n\n it('should delete with id', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.delete({ id: testElem2.elProps.id });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with federation guid', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElemFedGuid);\n expect(cache.size).to.equal(3);\n cache.delete({ federationGuid: testElemFedGuid.elProps.federationGuid });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElemFedGuid.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with code', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.delete({ code: testElem2.elProps.code });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with model id', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.deleteWithModel(testElem2.elProps.model);\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should clear the cache', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n\n cache.clear();\n expect(cache.size).to.equal(0);\n\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem).to.be.undefined;\n });\n\n it('should not return wrong element when passed a manipulated code value', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem2);\n expect(cache.size).to.equal(1);\n\n const retrievedElem = cache.get({ code: testElemCode.elProps.code });\n expect(retrievedElem).to.be.undefined;\n });\n});\n\ndescribe('InstanceKeyLRUCache', () => {\n const testArgs1: IModelJsNative.ResolveInstanceKeyArgs = {\n partialKey: {\n id: Id64.fromJSON(\"0x123\"),\n baseClassName: \"baseName\",\n },\n }\n\n const testArgs2: IModelJsNative.ResolveInstanceKeyArgs = {\n federationGuid: \"testFedGuid\",\n }\n\n const testArgs3: IModelJsNative.ResolveInstanceKeyArgs = {\n code: {\n spec: \"testSpec\",\n scope: \"testScope\",\n value: \"testValue\"\n }\n }\n\n const testArgs4: IModelJsNative.ResolveInstanceKeyArgs = {\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n }\n }\n\n const testResults: IModelJsNative.ResolveInstanceKeyResult[] = [\n {\n id: Id64.fromJSON(\"0x123\"),\n classFullName: \"testName1\",\n },\n {\n id: Id64.fromJSON(\"0x122\"),\n classFullName: \"testName2\",\n },\n {\n id: Id64.fromJSON(\"0x133\"),\n classFullName: \"testName3\",\n },\n {\n id: Id64.fromJSON(\"0x144\"),\n classFullName: \"testName4\",\n }\n ];\n\n it('should store and retrieve a valid InstanceKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n });\n\n it('should overwrite existing valid InstanceKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n const testResult = testResults[0];\n cache.set(testArgs1, testResult);\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResult);\n\n const newTestResult = { id: testResult.id, classFullName: \"newModel\" };\n cache.set(testArgs1, newTestResult);\n const retrievedResult2 = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(newTestResult);\n });\n\n it('should store and retrieve a valid InstanceKey by fedGuid', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs2, testResults[0]);\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n });\n\n it('should store and retrieve a valid InstanceKey by code', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs3, testResults[0]);\n const retrievedResult = cache.get({ code: testArgs3.code });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n\n cache.set(testArgs4, testResults[1]);\n const retrievedResult2 = cache.get({ code: testArgs4.code });\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should find the same InstanceKey with either code, fedGuid, or Id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set({ ...testArgs1, ...testArgs2, ...testArgs3}, testResults[0]);\n\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResultById).to.not.be.undefined;\n expect(retrievedResultById).to.equal(testResults[0]);\n\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResultByFedGuid).to.not.be.undefined;\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\n\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\n expect(retrievedResultByCode).to.not.be.undefined;\n expect(retrievedResultByCode).to.equal(testResults[0]);\n });\n\n it('should update an existing InstanceKey with either code, fedGuid, or Id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[0]);\n cache.set(testArgs3, testResults[0]);\n\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResultById).to.not.be.undefined;\n expect(retrievedResultById).to.equal(testResults[0]);\n\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResultByFedGuid).to.not.be.undefined;\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\n\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\n expect(retrievedResultByCode).to.not.be.undefined;\n expect(retrievedResultByCode).to.equal(testResults[0]);\n });\n\n it('should delete least used element', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n cache.set(testArgs4, testResults[3]);\n expect(cache.size).to.equal(3);\n\n const retrievedResult = cache.get(testArgs2);\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[1]);\n\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.be.undefined;\n\n const retrievedResult3 = cache.get(testArgs3);\n expect(retrievedResult3).to.not.be.undefined;\n expect(retrievedResult3).to.equal(testResults[2]);\n });\n\n it('should delete with partialKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ partialKey: testArgs1.partialKey });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs2);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should delete with id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.deleteById(testArgs1.partialKey!.id);\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs2);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should throw when deleting with a bad id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n expect(() => cache.deleteById(\"badid\")).to.throw(Error, \"Invalid id provided\");\n expect(cache.size).to.equal(3);\n });\n\n it('should delete with federation guid', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ federationGuid: testArgs2.federationGuid });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs3);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[2]);\n });\n\n it('should delete with code', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ code: testArgs3.code });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ code: testArgs3.code });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[0]);\n });\n\n it('should delete with any applicable arg', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[0]);\n cache.set(testArgs3, testResults[0]);\n expect(cache.size).to.equal(1);\n cache.delete(testArgs3);\n expect(cache.size).to.equal(0);\n const retrievedResult = cache.get(testArgs1);\n expect(retrievedResult).to.be.undefined;\n\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.set(testArgs4, testResults[0]);\n expect(cache.size).to.equal(3);\n\n cache.delete(testArgs4);\n expect(cache.size).to.equal(2);\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.be.undefined;\n });\n\n it('should clear the cache', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n\n cache.clear();\n expect(cache.size).to.equal(0);\n\n const retrievedElem = cache.get(testArgs1);\n expect(retrievedElem).to.be.undefined;\n });\n});"]}
|
|
1
|
+
{"version":3,"file":"ElementLRUCache.test.js","sourceRoot":"","sources":["../../../src/test/ElementLRUCache.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport { CachedElement, ElementLRUCache, InstanceKeyLRUCache } from \"../internal/ElementLRUCache\";\nimport { IModelJsNative } from \"../core-backend\";\nimport { Id64 } from \"@itwin/core-bentley\";\n\ndescribe('ElementLruCache', () => {\n const testElem1: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId\",\n model: \"testModel\",\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n },\n classFullName: \"testName\"\n },\n }\n\n const testElem2: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId2\",\n model: \"testModel2\",\n code: {\n spec: \"testSpec2\",\n scope: \"testScope2\",\n value: \"testValue2\"\n },\n classFullName: \"testName2\"\n },\n }\n\n const testElem3: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId3\",\n model: \"testModel3\",\n code: {\n spec: \"testSpec3\",\n scope: \"testScope3\"\n },\n classFullName: \"testName3\"\n },\n }\n\n const testElemFedGuid: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testIdFed\",\n model: \"testModel\",\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n },\n classFullName: \"testName\",\n federationGuid: \"testFedGuid\"\n },\n }\n\n const testElemCode: CachedElement = {\n loadOptions: {},\n elProps: {\n id: \"testId5\",\n model: \"testModel5\",\n code: {\n spec: \"testSpec2:testValue2\",\n scope: \"testScope2\"\n },\n classFullName: \"testName5\",\n federationGuid: \"testFedGuid5\"\n },\n }\n\n const testElemNoId: CachedElement = {\n loadOptions: {},\n elProps: {\n id: undefined,\n model: \"testModel5\",\n code: {\n spec: \"testSpec2\",\n scope: \"testScope2\"\n },\n classFullName: \"testName5\",\n federationGuid: \"testFedGuid5\"\n },\n }\n\n it('should store and retrieve a valid element', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem1);\n });\n\n it('should overwrite existing valid element', () => {\n const cache = new ElementLRUCache(3);\n const testElemModel = testElem1;\n cache.set(testElemModel);\n const retrievedElem = cache.get({ id: testElemModel.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElemModel);\n\n testElemModel.elProps.model = \"newModel\";\n cache.set(testElemModel);\n const retrievedElem2 = cache.get({ id: testElemModel.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElemModel);\n });\n\n it('should store and retrieve a valid element by fedGuid', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElemFedGuid);\n const retrievedElem = cache.get({ federationGuid: testElemFedGuid.elProps.federationGuid });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElemFedGuid);\n });\n\n it('should store and retrieve a valid element by code', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n const retrievedElem = cache.get({ code: testElem1.elProps.code });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem1);\n\n cache.set(testElem2);\n const retrievedElem2 = cache.get({ code: testElem2.elProps.code });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem2);\n });\n\n it('should fail to store an element without id', () => {\n const cache = new ElementLRUCache(3);\n expect(() => cache.set(testElemNoId)).to.throw(Error, \"Element must have an id\");\n });\n\n it('should delete least used element', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n cache.set(testElemFedGuid);\n expect(cache.size).to.equal(3);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.not.be.undefined;\n expect(retrievedElem).to.equal(testElem2);\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.be.undefined;\n\n const retrievedElem3 = cache.get({ id: testElem3.elProps.id });\n expect(retrievedElem3).to.not.be.undefined;\n expect(retrievedElem3).to.equal(testElem3);\n });\n\n it('should delete with id', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.delete({ id: testElem2.elProps.id });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with federation guid', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElemFedGuid);\n expect(cache.size).to.equal(3);\n cache.delete({ federationGuid: testElemFedGuid.elProps.federationGuid });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElemFedGuid.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with code', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.delete({ code: testElem2.elProps.code });\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should delete with model id', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n cache.deleteWithModel(testElem2.elProps.model);\n expect(cache.size).to.equal(2);\n\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\n expect(retrievedElem).to.be.undefined;\n\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem2).to.not.be.undefined;\n expect(retrievedElem2).to.equal(testElem1);\n });\n\n it('should clear the cache', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem1);\n cache.set(testElem2);\n cache.set(testElem3);\n expect(cache.size).to.equal(3);\n\n cache.clear();\n expect(cache.size).to.equal(0);\n\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\n expect(retrievedElem).to.be.undefined;\n });\n\n it('should not return wrong element when passed a manipulated code value', () => {\n const cache = new ElementLRUCache(3);\n cache.set(testElem2);\n expect(cache.size).to.equal(1);\n\n const retrievedElem = cache.get({ code: testElemCode.elProps.code });\n expect(retrievedElem).to.be.undefined;\n });\n});\n\ndescribe('InstanceKeyLRUCache', () => {\n const testArgs1: IModelJsNative.ResolveInstanceKeyArgs = {\n partialKey: {\n id: Id64.fromJSON(\"0x123\"),\n baseClassName: \"baseName\",\n },\n }\n\n const testArgs2: IModelJsNative.ResolveInstanceKeyArgs = {\n federationGuid: \"testFedGuid\",\n }\n\n const testArgs3: IModelJsNative.ResolveInstanceKeyArgs = {\n code: {\n spec: \"testSpec\",\n scope: \"testScope\",\n value: \"testValue\"\n }\n }\n\n const testArgs4: IModelJsNative.ResolveInstanceKeyArgs = {\n code: {\n spec: \"testSpec\",\n scope: \"testScope\"\n }\n }\n\n const testResults: IModelJsNative.ResolveInstanceKeyResult[] = [\n {\n id: Id64.fromJSON(\"0x123\"),\n classFullName: \"testName1\",\n },\n {\n id: Id64.fromJSON(\"0x122\"),\n classFullName: \"testName2\",\n },\n {\n id: Id64.fromJSON(\"0x133\"),\n classFullName: \"testName3\",\n },\n {\n id: Id64.fromJSON(\"0x144\"),\n classFullName: \"testName4\",\n }\n ];\n\n it('should store and retrieve a valid InstanceKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n });\n\n it('should overwrite existing valid InstanceKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n const testResult = testResults[0];\n cache.set(testArgs1, testResult);\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResult);\n\n const newTestResult = { id: testResult.id, classFullName: \"newModel\" };\n cache.set(testArgs1, newTestResult);\n const retrievedResult2 = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(newTestResult);\n });\n\n it('should store and retrieve a valid InstanceKey by fedGuid', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs2, testResults[0]);\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n });\n\n it('should store and retrieve a valid InstanceKey by code', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs3, testResults[0]);\n const retrievedResult = cache.get({ code: testArgs3.code });\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[0]);\n\n cache.set(testArgs4, testResults[1]);\n const retrievedResult2 = cache.get({ code: testArgs4.code });\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should find the same InstanceKey with either code, fedGuid, or Id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set({ ...testArgs1, ...testArgs2, ...testArgs3}, testResults[0]);\n\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResultById).to.not.be.undefined;\n expect(retrievedResultById).to.equal(testResults[0]);\n\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResultByFedGuid).to.not.be.undefined;\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\n\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\n expect(retrievedResultByCode).to.not.be.undefined;\n expect(retrievedResultByCode).to.equal(testResults[0]);\n });\n\n it('should update an existing InstanceKey with either code, fedGuid, or Id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[0]);\n cache.set(testArgs3, testResults[0]);\n\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResultById).to.not.be.undefined;\n expect(retrievedResultById).to.equal(testResults[0]);\n\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResultByFedGuid).to.not.be.undefined;\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\n\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\n expect(retrievedResultByCode).to.not.be.undefined;\n expect(retrievedResultByCode).to.equal(testResults[0]);\n });\n\n it('should delete least used element', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n cache.set(testArgs4, testResults[3]);\n expect(cache.size).to.equal(3);\n\n const retrievedResult = cache.get(testArgs2);\n expect(retrievedResult).to.not.be.undefined;\n expect(retrievedResult).to.equal(testResults[1]);\n\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.be.undefined;\n\n const retrievedResult3 = cache.get(testArgs3);\n expect(retrievedResult3).to.not.be.undefined;\n expect(retrievedResult3).to.equal(testResults[2]);\n });\n\n it('should delete with partialKey', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ partialKey: testArgs1.partialKey });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs2);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should delete with id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.deleteById(testArgs1.partialKey!.id);\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs2);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[1]);\n });\n\n it('should throw when deleting with a bad id', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n expect(() => cache.deleteById(\"badid\")).to.throw(Error, \"Invalid id provided\");\n expect(cache.size).to.equal(3);\n });\n\n it('should delete with federation guid', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ federationGuid: testArgs2.federationGuid });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs3);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[2]);\n });\n\n it('should delete with code', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.delete({ code: testArgs3.code });\n expect(cache.size).to.equal(2);\n\n const retrievedResult = cache.get({ code: testArgs3.code });\n expect(retrievedResult).to.be.undefined;\n\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.not.be.undefined;\n expect(retrievedResult2).to.equal(testResults[0]);\n });\n\n it('should delete with any applicable arg', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[0]);\n cache.set(testArgs3, testResults[0]);\n expect(cache.size).to.equal(1);\n cache.delete(testArgs3);\n expect(cache.size).to.equal(0);\n const retrievedResult = cache.get(testArgs1);\n expect(retrievedResult).to.be.undefined;\n\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n cache.set(testArgs4, testResults[0]);\n expect(cache.size).to.equal(3);\n\n cache.delete(testArgs4);\n expect(cache.size).to.equal(2);\n const retrievedResult2 = cache.get(testArgs1);\n expect(retrievedResult2).to.be.undefined;\n });\n\n it('should throw when trying to delete with all undefined keys', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n\n expect(() => cache.delete({\n partialKey: undefined,\n federationGuid: undefined,\n code: undefined\n })).to.throw(Error, \"ResolveInstanceKeyArgs must have a partialKey, code, or federationGuid\");\n\n expect(cache.size).to.equal(3);\n });\n\n it('should clear the cache', () => {\n const cache = new InstanceKeyLRUCache(3);\n cache.set(testArgs1, testResults[0]);\n cache.set(testArgs2, testResults[1]);\n cache.set(testArgs3, testResults[2]);\n expect(cache.size).to.equal(3);\n\n cache.clear();\n expect(cache.size).to.equal(0);\n\n const retrievedElem = cache.get(testArgs1);\n expect(retrievedElem).to.be.undefined;\n });\n});"]}
|
|
@@ -2930,5 +2930,32 @@ describe("iModel", () => {
|
|
|
2930
2930
|
}
|
|
2931
2931
|
testImodel.close();
|
|
2932
2932
|
});
|
|
2933
|
+
it("should update codeValues that are switched between elements", async () => {
|
|
2934
|
+
const dbFileName = IModelTestUtils.prepareOutputFile("IModel", "change-codeValues.bim");
|
|
2935
|
+
const imodelDb = SnapshotDb.createEmpty(dbFileName, {
|
|
2936
|
+
rootSubject: { name: "change-codeValues" },
|
|
2937
|
+
});
|
|
2938
|
+
let categoryA = SpatialCategory.create(imodelDb, IModel.dictionaryId, "A");
|
|
2939
|
+
let categoryB = SpatialCategory.create(imodelDb, IModel.dictionaryId, "B");
|
|
2940
|
+
categoryA.userLabel = "A";
|
|
2941
|
+
categoryB.userLabel = "B";
|
|
2942
|
+
categoryA.insert();
|
|
2943
|
+
categoryB.insert();
|
|
2944
|
+
imodelDb.saveChanges();
|
|
2945
|
+
categoryA = imodelDb.elements.getElement(SpatialCategory.createCode(imodelDb, IModel.dictionaryId, "A"));
|
|
2946
|
+
categoryB = imodelDb.elements.getElement(SpatialCategory.createCode(imodelDb, IModel.dictionaryId, "B"));
|
|
2947
|
+
categoryA.code.value = "temp";
|
|
2948
|
+
categoryA.update();
|
|
2949
|
+
categoryB.code.value = "A";
|
|
2950
|
+
categoryB.update();
|
|
2951
|
+
categoryA.code.value = "B";
|
|
2952
|
+
categoryA.update();
|
|
2953
|
+
imodelDb.saveChanges();
|
|
2954
|
+
categoryA = imodelDb.elements.getElement(SpatialCategory.createCode(imodelDb, IModel.dictionaryId, "A"));
|
|
2955
|
+
categoryB = imodelDb.elements.getElement(SpatialCategory.createCode(imodelDb, IModel.dictionaryId, "B"));
|
|
2956
|
+
expect(categoryA.userLabel).to.equal("B", `categoryA.userLabel mismatch in ${imodelDb.name}`);
|
|
2957
|
+
expect(categoryB.userLabel).to.equal("A", `categoryB.userLabel mismatch in ${imodelDb.name}`);
|
|
2958
|
+
imodelDb.close();
|
|
2959
|
+
});
|
|
2933
2960
|
});
|
|
2934
2961
|
//# sourceMappingURL=IModel.test.js.map
|