@itwin/rpcinterface-full-stack-tests 3.2.0-dev.8 → 3.3.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/dist/0.bundled-tests.js +150 -150
- package/lib/dist/0.bundled-tests.js.map +1 -1
- package/lib/dist/1.bundled-tests.js.map +1 -1
- package/lib/dist/2.bundled-tests.js +6 -6
- package/lib/dist/2.bundled-tests.js.map +1 -1
- package/lib/dist/bundled-tests.js +9921 -10457
- package/lib/dist/bundled-tests.js.map +1 -1
- package/lib/frontend/IModelConnection.test.js +21 -0
- package/lib/frontend/IModelConnection.test.js.map +1 -1
- package/lib/frontend/Views.test.js +5 -0
- package/lib/frontend/Views.test.js.map +1 -1
- package/package.json +18 -18
|
@@ -254,6 +254,27 @@ describe("IModelReadRpcInterface Methods from an IModelConnection", () => {
|
|
|
254
254
|
const result = await core_common_1.IModelReadRpcInterface.getClient().getMassProperties(iModel.getRpcProps(), requestProps);
|
|
255
255
|
expect(result).to.not.be.null;
|
|
256
256
|
});
|
|
257
|
+
it("getMassPropertiesPerCandidate should be able to process multiple elements", async () => {
|
|
258
|
+
const candidates = [...await iModel.elements.queryIds({ from: "BisCore.GeometricElement3d", limit: 2, where: "GeometryStream IS NOT NULL" })];
|
|
259
|
+
expect(candidates.length).to.be.equal(2);
|
|
260
|
+
const requestProps = {
|
|
261
|
+
operations: [core_common_1.MassPropertiesOperation.AccumulateVolumes],
|
|
262
|
+
candidates: core_bentley_1.CompressedId64Set.compressIds(candidates),
|
|
263
|
+
};
|
|
264
|
+
const result = await core_common_1.IModelReadRpcInterface.getClient().getMassPropertiesPerCandidate(iModel.getRpcProps(), requestProps);
|
|
265
|
+
expect(result).to.not.be.null;
|
|
266
|
+
expect(result.length).to.be.equal(2);
|
|
267
|
+
const candidate1Result = result.find((r) => r.candidate === candidates[0]);
|
|
268
|
+
const candidate2Result = result.find((r) => r.candidate === candidates[1]);
|
|
269
|
+
expect(candidate1Result).to.not.be.undefined;
|
|
270
|
+
expect(candidate2Result).to.not.be.undefined;
|
|
271
|
+
expect(candidate1Result === null || candidate1Result === void 0 ? void 0 : candidate1Result.status).to.be.equal(core_bentley_1.BentleyStatus.SUCCESS);
|
|
272
|
+
expect(candidate2Result === null || candidate2Result === void 0 ? void 0 : candidate2Result.status).to.be.equal(core_bentley_1.BentleyStatus.SUCCESS);
|
|
273
|
+
const expectedCandidate1Result = await core_common_1.IModelReadRpcInterface.getClient().getMassProperties(iModel.getRpcProps(), { operation: core_common_1.MassPropertiesOperation.AccumulateVolumes, candidates: [candidates[0]] });
|
|
274
|
+
const expectedCandidate2Result = await core_common_1.IModelReadRpcInterface.getClient().getMassProperties(iModel.getRpcProps(), { operation: core_common_1.MassPropertiesOperation.AccumulateVolumes, candidates: [candidates[1]] });
|
|
275
|
+
expect(candidate1Result).to.deep.eq(Object.assign(Object.assign({}, expectedCandidate1Result), { candidate: candidates[0] }));
|
|
276
|
+
expect(candidate2Result).to.deep.eq(Object.assign(Object.assign({}, expectedCandidate2Result), { candidate: candidates[1] }));
|
|
277
|
+
});
|
|
257
278
|
});
|
|
258
279
|
describe("Snapping", () => {
|
|
259
280
|
let iModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelConnection.test.js","sourceRoot":"","sources":["../../src/frontend/IModelConnection.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 * as chai from \"chai\";\r\nimport { AccessToken, Id64, Id64Set } from \"@itwin/core-bentley\";\r\nimport { Matrix4d, Point3d, XYZProps, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport {\r\n EcefLocation, GeoCoordStatus, IModelReadRpcInterface, IModelVersion, MassPropertiesOperation, MassPropertiesRequestProps, ModelQueryParams,\r\n} from \"@itwin/core-common\";\r\nimport { CheckpointConnection, IModelApp, IModelConnection, SpatialModelState, ViewState } from \"@itwin/core-frontend\";\r\nimport { TestFrontendAuthorizationClient } from \"@itwin/oidc-signin-tool/lib/cjs/frontend\";\r\nimport { TestContext } from \"./setup/TestContext\";\r\n\r\n/* eslint-disable deprecation/deprecation */\r\n\r\nconst expect = chai.expect;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\n(global as any).btoa = (str: string) => {\r\n const buffer = Buffer.from(str, \"binary\");\r\n return buffer.toString(\"base64\");\r\n};\r\n\r\ndescribe(\"IModel Connection\", () => {\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n if (!testContext.settings.runiModelReadRpcTests)\r\n this.skip();\r\n\r\n accessToken = testContext.adminUserAccessToken;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n });\r\n\r\n it(\"should successfully open an IModelConnection for read\", async () => {\r\n const iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n\r\n const iModel: IModelConnection = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n\r\n expect(iModel).to.exist.and.be.not.empty;\r\n\r\n const iModelRpcProps = iModel.getRpcProps();\r\n expect(iModelRpcProps).to.exist.and.be.not.empty;\r\n });\r\n\r\n it(\"should successfully close an open an IModelConnection\", async () => {\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n const iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n const iModel = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n\r\n expect(iModel).to.exist;\r\n return expect(iModel.close()).to.eventually.be.fulfilled;\r\n });\r\n});\r\n\r\ndescribe.skip(\"IModel Connection with client credentials\", () => {\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n // If client credentials are not supplied or imodel read rpc tests are disabled skip test suite\r\n if (!testContext.settings.clientConfiguration || !testContext.settings.runiModelReadRpcTests)\r\n this.skip();\r\n accessToken = testContext.clientAccessToken!;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n });\r\n\r\n it(\"should successfully open an IModelConnection for read\", async () => {\r\n const iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n const changeSetId = (await testContext.iModelWithChangesets!.getConnection()).changeset.id;\r\n\r\n const iModel = await CheckpointConnection.openRemote(iTwinId, iModelId, undefined === changeSetId ? IModelVersion.latest() : IModelVersion.asOfChangeSet(changeSetId));\r\n\r\n expect(iModel).to.exist.and.be.not.empty;\r\n\r\n const iModelRpcProps = iModel.getRpcProps();\r\n expect(iModelRpcProps).to.exist.and.be.not.empty;\r\n });\r\n});\r\n\r\ndescribe(\"IModelReadRpcInterface Methods from an IModelConnection\", () => {\r\n let iModel: IModelConnection;\r\n let iTwinId: string;\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n if (!testContext.settings.runiModelReadRpcTests) {\r\n this.skip();\r\n }\r\n\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n accessToken = testContext.adminUserAccessToken;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n iModel = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n });\r\n\r\n it(\"queryEntityIds should work as expected\", async () => {\r\n const ids = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:Subject\" });\r\n expect(ids).to.exist;\r\n });\r\n\r\n it(\"getToolTipMessage should work as expected\", async () => {\r\n const ids: Id64Set = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:Subject\" });\r\n const id = ids.values().next().value;\r\n\r\n const tooltip = await iModel.getToolTipMessage(id); // \"0x338\"\r\n\r\n expect(tooltip).to.not.be.undefined;\r\n });\r\n\r\n it(\"getDefaultViewId should work as expected\", async () => {\r\n const result = await iModel.views.queryDefaultViewId();\r\n\r\n expect(result).to.not.be.undefined;\r\n });\r\n\r\n it(\"getGeometrySummary should work as expected\", async () => {\r\n const ids: Id64Set = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:Subject\" });\r\n const id = ids.values().next().value;\r\n const result = await IModelReadRpcInterface.getClient().getGeometrySummary(iModel.getRpcProps(), { elementIds: [id], options: {} });\r\n expect(result).to.not.be.undefined;\r\n });\r\n\r\n it(\"requestSnap should work as expected\", async () => {\r\n const ids: Id64Set = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:PhysicalElement\" });\r\n const id = ids.values().next().value;\r\n\r\n const worldToView = Matrix4d.createIdentity();\r\n const snap = await iModel.requestSnap({\r\n id,\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n worldToView: worldToView.toJSON(),\r\n });\r\n\r\n expect(snap.status).to.not.be.undefined;\r\n });\r\n\r\n it(\"queryModelProps should work as expected\", async () => {\r\n const modelQueryParams: ModelQueryParams = { limit: 10, from: SpatialModelState.classFullName, wantPrivate: false };\r\n const curModelProps = await iModel.models.queryProps(modelQueryParams);\r\n\r\n expect(curModelProps).to.not.be.undefined;\r\n expect(curModelProps.length).gt(0);\r\n });\r\n\r\n it(\"getModelProps should work as expected\", async () => {\r\n const modelQueryParams: ModelQueryParams = { limit: 10, from: SpatialModelState.classFullName, wantPrivate: false };\r\n const curModelProps = await iModel.models.queryProps(modelQueryParams);\r\n const modelId = curModelProps[0].id!.toString();\r\n\r\n await iModel.models.load(modelId); // \"0x1c\"\r\n\r\n expect(iModel.models.loaded.size).to.equal(1);\r\n expect(iModel.models.loaded.get(modelId)).to.not.be.undefined;\r\n });\r\n\r\n it(\"getClassHierarchy should work as expected\", async () => {\r\n const result = await iModel.findClassFor(\"BisCore:LineStyle\", undefined);\r\n expect(result).undefined;\r\n });\r\n\r\n it(\"getViewThumbnail should work as expected\", async () => {\r\n const modelQueryParams: ModelQueryParams = { limit: 10, from: ViewState.classFullName };\r\n const modelProps = await iModel.views.queryProps(modelQueryParams);\r\n const viewId = modelProps[0].id!.toString();\r\n const result = await iModel.views.getThumbnail(viewId);\r\n expect(result).to.not.be.undefined;\r\n });\r\n\r\n it(\"getIModelCoordinatesFromGeoCoordinates should work as expected\", async () => {\r\n const wgs84Converter = iModel.geoServices.getConverter(\"WGS84\");\r\n const nad27Converter = iModel.geoServices.getConverter(\"NAD27\");\r\n\r\n const geoPointList: XYZProps[] = [];\r\n\r\n for (let iLatitude = 0; iLatitude < 10; iLatitude++) {\r\n for (let iLongitude = 0; iLongitude < 10; iLongitude++) {\r\n geoPointList.push({ x: (132.600 + 0.02 * iLongitude), y: (34.350 + 0.02 * iLatitude), z: 0.0 });\r\n }\r\n }\r\n\r\n const testPoints: XYZProps[] = [];\r\n for (let iGeoPoint = 1; iGeoPoint < geoPointList.length; iGeoPoint += 2)\r\n testPoints.push(geoPointList[iGeoPoint]);\r\n\r\n const wgs84Response = await wgs84Converter!.getIModelCoordinatesFromGeoCoordinates(testPoints);\r\n\r\n // shouldn't have any from the cache.\r\n expect(wgs84Response.fromCache === 0).to.be.true;\r\n\r\n // shouldn't have any failures.\r\n for (const result of wgs84Response.iModelCoords) {\r\n expect(GeoCoordStatus.Success === result.s);\r\n }\r\n\r\n const nad27Response = await nad27Converter!.getIModelCoordinatesFromGeoCoordinates(testPoints);\r\n\r\n // shouldn't have any from the cache.\r\n expect(nad27Response.fromCache).eq(0);\r\n });\r\n\r\n it(\"getGeoCoordinatesFromIModelCoordinates should work as expected\", async () => {\r\n const ecefProps = new EcefLocation({ orientation: YawPitchRollAngles.createDegrees(0, 0, 0), origin: Point3d.create(0, 0, 0) });\r\n iModel.setEcefLocation(ecefProps);\r\n\r\n await iModel.spatialToCartographic({ x: 6378.137, y: 0, z: 0 });\r\n });\r\n\r\n /* NEEDSWORK queryPage no longer exists; you cannot specify a specific rows-per-page to query for (only a maximum via LIMIT).\r\n it(\"queryRowCount should work as expected\", async () => {\r\n const getRowPerPage = (nPageSize: number, nRowCount: number) => {\r\n const nRowPerPage = nRowCount / nPageSize;\r\n const nPages = Math.ceil(nRowPerPage);\r\n const nRowOnLastPage = nRowCount - (Math.floor(nRowPerPage) * pageSize);\r\n const pages = new Array(nPages).fill(pageSize);\r\n if (nRowPerPage) {\r\n pages[nPages - 1] = nRowOnLastPage;\r\n }\r\n return pages;\r\n };\r\n\r\n const pageSize = 5;\r\n const query = \"SELECT ECInstanceId as Id, Parent.Id as ParentId FROM BisCore.Element\";\r\n const rowCount = await iModel.queryRowCount(query);\r\n\r\n // verify row per page\r\n const rowPerPage = getRowPerPage(pageSize, rowCount);\r\n for (let k = 0; k < rowPerPage.length; k++) {\r\n const row = await iModel.queryPage(query, undefined, { size: pageSize, start: k });\r\n expect(row.length).to.be.equal(rowPerPage[k]);\r\n }\r\n\r\n // verify with async iterator\r\n const resultSet = [];\r\n for await (const row of iModel.query(query, undefined, { size: pageSize })) {\r\n resultSet.push(row);\r\n expect(Reflect.has(row, \"id\")).to.be.true;\r\n if (Reflect.ownKeys(row).length > 1) {\r\n expect(Reflect.has(row, \"parentId\")).to.be.true;\r\n const parentId: string = row.parentId;\r\n expect(parentId.startsWith(\"0x\")).to.be.true;\r\n }\r\n const id: string = row.id;\r\n expect(id.startsWith(\"0x\"));\r\n }\r\n expect(rowCount).to.be.equal(resultSet.length);\r\n });\r\n */\r\n\r\n it(\"queryModelRanges should work as expected\", async () => {\r\n const modelProps = await iModel.models.queryProps({ limit: 10, from: \"BisCore.SpatialModel\" });\r\n const modelId = modelProps[0].id!.toString();\r\n\r\n let idSet: Id64Set = Id64.toIdSet(modelId);\r\n\r\n let ranges = await iModel.models.queryModelRanges(idSet);\r\n\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.equal(1);\r\n idSet = new Set<string>();\r\n for (const modelProp of modelProps) {\r\n idSet.add(modelProp.id!.toString());\r\n }\r\n ranges = await iModel.models.queryModelRanges(idSet);\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.gte(1);\r\n\r\n });\r\n\r\n it(\"queryModelRanges should properly handle models that aren't geometric\", async () => {\r\n // the below clause is created specifically for the test iModel, if that iModel were to be changed and it contained models that were geometricModels\r\n // but not PhysicalModels then the test may fail.\r\n let ranges;\r\n let modelProps = await iModel.models.queryProps({ limit: 10, from: \"BisCore.Model\", where: \"ec_classname(ECClassId) <> 'BisCore:PhysicalModel'\" });\r\n let idSet: Id64Set = new Set<string>();\r\n for (const modelProp of modelProps) {\r\n idSet.add(modelProp.id!.toString());\r\n }\r\n if (idSet.size === 1) { // queryModelRanges throws error if idSet size is 1 AND the id in the set returns some error for querying its extents\r\n await expect(iModel.models.queryModelRanges(idSet)).to.be.rejectedWith(Error);\r\n } else {\r\n ranges = await iModel.models.queryModelRanges(idSet);\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.equal(0);\r\n }\r\n const dictModelId = await iModel.models.getDictionaryModel();\r\n idSet = Id64.toIdSet(dictModelId);\r\n await expect(iModel.models.queryModelRanges(idSet)).to.be.rejectedWith(Error);\r\n\r\n modelProps = await iModel.models.queryProps({ limit: 10, from: \"BisCore.SpatialModel\" });\r\n idSet.add(modelProps[0].id!.toString());\r\n ranges = await iModel.models.queryModelRanges(idSet);\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.equal(1);\r\n });\r\n it(\"getMassProperties should work as expected\", async () => {\r\n const requestProps: MassPropertiesRequestProps = {\r\n operation: MassPropertiesOperation.AccumulateVolumes,\r\n };\r\n\r\n const result = await IModelReadRpcInterface.getClient().getMassProperties(iModel.getRpcProps(), requestProps);\r\n expect(result).to.not.be.null;\r\n });\r\n});\r\n\r\ndescribe(\"Snapping\", () => {\r\n let iModel: IModelConnection;\r\n let iTwinId: string;\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n if (!testContext.settings.runiModelReadRpcTests)\r\n this.skip();\r\n\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n accessToken = testContext.adminUserAccessToken;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n iModel = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n });\r\n\r\n it(\"should be able to request a snap\", async () => {\r\n const ids = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:PhysicalElement\" });\r\n const id = ids.values().next().value;\r\n\r\n const worldToView = Matrix4d.createIdentity();\r\n const snapProps = {\r\n id,\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n worldToView: worldToView.toJSON(),\r\n };\r\n\r\n const snap = await IModelReadRpcInterface.getClient().requestSnap(iModel.getRpcProps(), id, snapProps);\r\n expect(snap.status).to.not.be.undefined;\r\n });\r\n\r\n it(\"should be able to cancel a snap\", async () => {\r\n const ids = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:PhysicalElement\" });\r\n const id = ids.values().next().value;\r\n\r\n const worldToView = Matrix4d.createIdentity();\r\n const snapProps = {\r\n id,\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n worldToView: worldToView.toJSON(),\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n const promise = IModelReadRpcInterface.getClient().requestSnap(iModel.getRpcProps(), id, snapProps);\r\n try {\r\n await IModelReadRpcInterface.getClient().cancelSnap(iModel.getRpcProps(), id);\r\n const snap = await promise;\r\n\r\n // This is what we expect if the snap is completed before the cancellation is processed.\r\n expect(snap.status).not.to.be.undefined;\r\n } catch (err: any) {\r\n // This is what we expect if the cancellation occurs in time to really cancel the snap.\r\n expect(err.message).to.equal(\"aborted\");\r\n }\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"IModelConnection.test.js","sourceRoot":"","sources":["../../src/frontend/IModelConnection.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 * as chai from \"chai\";\r\nimport { AccessToken, BentleyStatus, CompressedId64Set, Id64, Id64Set } from \"@itwin/core-bentley\";\r\nimport { Matrix4d, Point3d, XYZProps, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport {\r\n EcefLocation, GeoCoordStatus, IModelReadRpcInterface, IModelVersion, MassPropertiesOperation, MassPropertiesPerCandidateRequestProps, MassPropertiesRequestProps, ModelQueryParams,\r\n} from \"@itwin/core-common\";\r\nimport { CheckpointConnection, IModelApp, IModelConnection, SpatialModelState, ViewState } from \"@itwin/core-frontend\";\r\nimport { TestFrontendAuthorizationClient } from \"@itwin/oidc-signin-tool/lib/cjs/frontend\";\r\nimport { TestContext } from \"./setup/TestContext\";\r\n\r\n/* eslint-disable deprecation/deprecation */\r\n\r\nconst expect = chai.expect;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-var-requires\r\n(global as any).btoa = (str: string) => {\r\n const buffer = Buffer.from(str, \"binary\");\r\n return buffer.toString(\"base64\");\r\n};\r\n\r\ndescribe(\"IModel Connection\", () => {\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n if (!testContext.settings.runiModelReadRpcTests)\r\n this.skip();\r\n\r\n accessToken = testContext.adminUserAccessToken;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n });\r\n\r\n it(\"should successfully open an IModelConnection for read\", async () => {\r\n const iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n\r\n const iModel: IModelConnection = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n\r\n expect(iModel).to.exist.and.be.not.empty;\r\n\r\n const iModelRpcProps = iModel.getRpcProps();\r\n expect(iModelRpcProps).to.exist.and.be.not.empty;\r\n });\r\n\r\n it(\"should successfully close an open an IModelConnection\", async () => {\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n const iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n const iModel = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n\r\n expect(iModel).to.exist;\r\n return expect(iModel.close()).to.eventually.be.fulfilled;\r\n });\r\n});\r\n\r\ndescribe.skip(\"IModel Connection with client credentials\", () => {\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n // If client credentials are not supplied or imodel read rpc tests are disabled skip test suite\r\n if (!testContext.settings.clientConfiguration || !testContext.settings.runiModelReadRpcTests)\r\n this.skip();\r\n accessToken = testContext.clientAccessToken!;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n });\r\n\r\n it(\"should successfully open an IModelConnection for read\", async () => {\r\n const iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n const changeSetId = (await testContext.iModelWithChangesets!.getConnection()).changeset.id;\r\n\r\n const iModel = await CheckpointConnection.openRemote(iTwinId, iModelId, undefined === changeSetId ? IModelVersion.latest() : IModelVersion.asOfChangeSet(changeSetId));\r\n\r\n expect(iModel).to.exist.and.be.not.empty;\r\n\r\n const iModelRpcProps = iModel.getRpcProps();\r\n expect(iModelRpcProps).to.exist.and.be.not.empty;\r\n });\r\n});\r\n\r\ndescribe(\"IModelReadRpcInterface Methods from an IModelConnection\", () => {\r\n let iModel: IModelConnection;\r\n let iTwinId: string;\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n if (!testContext.settings.runiModelReadRpcTests) {\r\n this.skip();\r\n }\r\n\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n accessToken = testContext.adminUserAccessToken;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n iModel = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n });\r\n\r\n it(\"queryEntityIds should work as expected\", async () => {\r\n const ids = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:Subject\" });\r\n expect(ids).to.exist;\r\n });\r\n\r\n it(\"getToolTipMessage should work as expected\", async () => {\r\n const ids: Id64Set = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:Subject\" });\r\n const id = ids.values().next().value;\r\n\r\n const tooltip = await iModel.getToolTipMessage(id); // \"0x338\"\r\n\r\n expect(tooltip).to.not.be.undefined;\r\n });\r\n\r\n it(\"getDefaultViewId should work as expected\", async () => {\r\n const result = await iModel.views.queryDefaultViewId();\r\n\r\n expect(result).to.not.be.undefined;\r\n });\r\n\r\n it(\"getGeometrySummary should work as expected\", async () => {\r\n const ids: Id64Set = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:Subject\" });\r\n const id = ids.values().next().value;\r\n const result = await IModelReadRpcInterface.getClient().getGeometrySummary(iModel.getRpcProps(), { elementIds: [id], options: {} });\r\n expect(result).to.not.be.undefined;\r\n });\r\n\r\n it(\"requestSnap should work as expected\", async () => {\r\n const ids: Id64Set = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:PhysicalElement\" });\r\n const id = ids.values().next().value;\r\n\r\n const worldToView = Matrix4d.createIdentity();\r\n const snap = await iModel.requestSnap({\r\n id,\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n worldToView: worldToView.toJSON(),\r\n });\r\n\r\n expect(snap.status).to.not.be.undefined;\r\n });\r\n\r\n it(\"queryModelProps should work as expected\", async () => {\r\n const modelQueryParams: ModelQueryParams = { limit: 10, from: SpatialModelState.classFullName, wantPrivate: false };\r\n const curModelProps = await iModel.models.queryProps(modelQueryParams);\r\n\r\n expect(curModelProps).to.not.be.undefined;\r\n expect(curModelProps.length).gt(0);\r\n });\r\n\r\n it(\"getModelProps should work as expected\", async () => {\r\n const modelQueryParams: ModelQueryParams = { limit: 10, from: SpatialModelState.classFullName, wantPrivate: false };\r\n const curModelProps = await iModel.models.queryProps(modelQueryParams);\r\n const modelId = curModelProps[0].id!.toString();\r\n\r\n await iModel.models.load(modelId); // \"0x1c\"\r\n\r\n expect(iModel.models.loaded.size).to.equal(1);\r\n expect(iModel.models.loaded.get(modelId)).to.not.be.undefined;\r\n });\r\n\r\n it(\"getClassHierarchy should work as expected\", async () => {\r\n const result = await iModel.findClassFor(\"BisCore:LineStyle\", undefined);\r\n expect(result).undefined;\r\n });\r\n\r\n it(\"getViewThumbnail should work as expected\", async () => {\r\n const modelQueryParams: ModelQueryParams = { limit: 10, from: ViewState.classFullName };\r\n const modelProps = await iModel.views.queryProps(modelQueryParams);\r\n const viewId = modelProps[0].id!.toString();\r\n const result = await iModel.views.getThumbnail(viewId);\r\n expect(result).to.not.be.undefined;\r\n });\r\n\r\n it(\"getIModelCoordinatesFromGeoCoordinates should work as expected\", async () => {\r\n const wgs84Converter = iModel.geoServices.getConverter(\"WGS84\");\r\n const nad27Converter = iModel.geoServices.getConverter(\"NAD27\");\r\n\r\n const geoPointList: XYZProps[] = [];\r\n\r\n for (let iLatitude = 0; iLatitude < 10; iLatitude++) {\r\n for (let iLongitude = 0; iLongitude < 10; iLongitude++) {\r\n geoPointList.push({ x: (132.600 + 0.02 * iLongitude), y: (34.350 + 0.02 * iLatitude), z: 0.0 });\r\n }\r\n }\r\n\r\n const testPoints: XYZProps[] = [];\r\n for (let iGeoPoint = 1; iGeoPoint < geoPointList.length; iGeoPoint += 2)\r\n testPoints.push(geoPointList[iGeoPoint]);\r\n\r\n const wgs84Response = await wgs84Converter!.getIModelCoordinatesFromGeoCoordinates(testPoints);\r\n\r\n // shouldn't have any from the cache.\r\n expect(wgs84Response.fromCache === 0).to.be.true;\r\n\r\n // shouldn't have any failures.\r\n for (const result of wgs84Response.iModelCoords) {\r\n expect(GeoCoordStatus.Success === result.s);\r\n }\r\n\r\n const nad27Response = await nad27Converter!.getIModelCoordinatesFromGeoCoordinates(testPoints);\r\n\r\n // shouldn't have any from the cache.\r\n expect(nad27Response.fromCache).eq(0);\r\n });\r\n\r\n it(\"getGeoCoordinatesFromIModelCoordinates should work as expected\", async () => {\r\n const ecefProps = new EcefLocation({ orientation: YawPitchRollAngles.createDegrees(0, 0, 0), origin: Point3d.create(0, 0, 0) });\r\n iModel.setEcefLocation(ecefProps);\r\n\r\n await iModel.spatialToCartographic({ x: 6378.137, y: 0, z: 0 });\r\n });\r\n\r\n /* NEEDSWORK queryPage no longer exists; you cannot specify a specific rows-per-page to query for (only a maximum via LIMIT).\r\n it(\"queryRowCount should work as expected\", async () => {\r\n const getRowPerPage = (nPageSize: number, nRowCount: number) => {\r\n const nRowPerPage = nRowCount / nPageSize;\r\n const nPages = Math.ceil(nRowPerPage);\r\n const nRowOnLastPage = nRowCount - (Math.floor(nRowPerPage) * pageSize);\r\n const pages = new Array(nPages).fill(pageSize);\r\n if (nRowPerPage) {\r\n pages[nPages - 1] = nRowOnLastPage;\r\n }\r\n return pages;\r\n };\r\n\r\n const pageSize = 5;\r\n const query = \"SELECT ECInstanceId as Id, Parent.Id as ParentId FROM BisCore.Element\";\r\n const rowCount = await iModel.queryRowCount(query);\r\n\r\n // verify row per page\r\n const rowPerPage = getRowPerPage(pageSize, rowCount);\r\n for (let k = 0; k < rowPerPage.length; k++) {\r\n const row = await iModel.queryPage(query, undefined, { size: pageSize, start: k });\r\n expect(row.length).to.be.equal(rowPerPage[k]);\r\n }\r\n\r\n // verify with async iterator\r\n const resultSet = [];\r\n for await (const row of iModel.query(query, undefined, { size: pageSize })) {\r\n resultSet.push(row);\r\n expect(Reflect.has(row, \"id\")).to.be.true;\r\n if (Reflect.ownKeys(row).length > 1) {\r\n expect(Reflect.has(row, \"parentId\")).to.be.true;\r\n const parentId: string = row.parentId;\r\n expect(parentId.startsWith(\"0x\")).to.be.true;\r\n }\r\n const id: string = row.id;\r\n expect(id.startsWith(\"0x\"));\r\n }\r\n expect(rowCount).to.be.equal(resultSet.length);\r\n });\r\n */\r\n\r\n it(\"queryModelRanges should work as expected\", async () => {\r\n const modelProps = await iModel.models.queryProps({ limit: 10, from: \"BisCore.SpatialModel\" });\r\n const modelId = modelProps[0].id!.toString();\r\n\r\n let idSet: Id64Set = Id64.toIdSet(modelId);\r\n\r\n let ranges = await iModel.models.queryModelRanges(idSet);\r\n\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.equal(1);\r\n idSet = new Set<string>();\r\n for (const modelProp of modelProps) {\r\n idSet.add(modelProp.id!.toString());\r\n }\r\n ranges = await iModel.models.queryModelRanges(idSet);\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.gte(1);\r\n\r\n });\r\n\r\n it(\"queryModelRanges should properly handle models that aren't geometric\", async () => {\r\n // the below clause is created specifically for the test iModel, if that iModel were to be changed and it contained models that were geometricModels\r\n // but not PhysicalModels then the test may fail.\r\n let ranges;\r\n let modelProps = await iModel.models.queryProps({ limit: 10, from: \"BisCore.Model\", where: \"ec_classname(ECClassId) <> 'BisCore:PhysicalModel'\" });\r\n let idSet: Id64Set = new Set<string>();\r\n for (const modelProp of modelProps) {\r\n idSet.add(modelProp.id!.toString());\r\n }\r\n if (idSet.size === 1) { // queryModelRanges throws error if idSet size is 1 AND the id in the set returns some error for querying its extents\r\n await expect(iModel.models.queryModelRanges(idSet)).to.be.rejectedWith(Error);\r\n } else {\r\n ranges = await iModel.models.queryModelRanges(idSet);\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.equal(0);\r\n }\r\n const dictModelId = await iModel.models.getDictionaryModel();\r\n idSet = Id64.toIdSet(dictModelId);\r\n await expect(iModel.models.queryModelRanges(idSet)).to.be.rejectedWith(Error);\r\n\r\n modelProps = await iModel.models.queryProps({ limit: 10, from: \"BisCore.SpatialModel\" });\r\n idSet.add(modelProps[0].id!.toString());\r\n ranges = await iModel.models.queryModelRanges(idSet);\r\n expect(ranges).to.not.be.undefined;\r\n expect(ranges.length).to.be.equal(1);\r\n });\r\n it(\"getMassProperties should work as expected\", async () => {\r\n const requestProps: MassPropertiesRequestProps = {\r\n operation: MassPropertiesOperation.AccumulateVolumes,\r\n };\r\n\r\n const result = await IModelReadRpcInterface.getClient().getMassProperties(iModel.getRpcProps(), requestProps);\r\n expect(result).to.not.be.null;\r\n });\r\n it(\"getMassPropertiesPerCandidate should be able to process multiple elements\", async () => {\r\n const candidates = [...await iModel.elements.queryIds({ from: \"BisCore.GeometricElement3d\", limit: 2, where: \"GeometryStream IS NOT NULL\" })];\r\n expect(candidates.length).to.be.equal(2);\r\n\r\n const requestProps: MassPropertiesPerCandidateRequestProps = {\r\n operations: [MassPropertiesOperation.AccumulateVolumes],\r\n candidates: CompressedId64Set.compressIds(candidates),\r\n };\r\n\r\n const result = await IModelReadRpcInterface.getClient().getMassPropertiesPerCandidate(iModel.getRpcProps(), requestProps);\r\n expect(result).to.not.be.null;\r\n expect(result.length).to.be.equal(2);\r\n const candidate1Result = result.find((r) => r.candidate === candidates[0]);\r\n const candidate2Result = result.find((r) => r.candidate === candidates[1]);\r\n expect(candidate1Result).to.not.be.undefined;\r\n expect(candidate2Result).to.not.be.undefined;\r\n expect(candidate1Result?.status).to.be.equal(BentleyStatus.SUCCESS);\r\n expect(candidate2Result?.status).to.be.equal(BentleyStatus.SUCCESS);\r\n\r\n const expectedCandidate1Result = await IModelReadRpcInterface.getClient().getMassProperties(\r\n iModel.getRpcProps(),\r\n { operation: MassPropertiesOperation.AccumulateVolumes, candidates: [candidates[0]] },\r\n );\r\n const expectedCandidate2Result = await IModelReadRpcInterface.getClient().getMassProperties(\r\n iModel.getRpcProps(),\r\n { operation: MassPropertiesOperation.AccumulateVolumes, candidates: [candidates[1]] },\r\n );\r\n\r\n expect(candidate1Result).to.deep.eq({ ...expectedCandidate1Result, candidate: candidates[0] });\r\n expect(candidate2Result).to.deep.eq({ ...expectedCandidate2Result, candidate: candidates[1] });\r\n });\r\n});\r\n\r\ndescribe(\"Snapping\", () => {\r\n let iModel: IModelConnection;\r\n let iTwinId: string;\r\n let accessToken: AccessToken;\r\n let testContext: TestContext;\r\n\r\n before(async function () {\r\n testContext = await TestContext.instance();\r\n\r\n if (!testContext.settings.runiModelReadRpcTests)\r\n this.skip();\r\n\r\n const iModelId = testContext.iModelWithChangesets!.iModelId;\r\n iTwinId = testContext.iModelWithChangesets!.iTwinId;\r\n accessToken = testContext.adminUserAccessToken;\r\n IModelApp.authorizationClient = new TestFrontendAuthorizationClient(accessToken);\r\n iModel = await CheckpointConnection.openRemote(iTwinId, iModelId);\r\n });\r\n\r\n it(\"should be able to request a snap\", async () => {\r\n const ids = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:PhysicalElement\" });\r\n const id = ids.values().next().value;\r\n\r\n const worldToView = Matrix4d.createIdentity();\r\n const snapProps = {\r\n id,\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n worldToView: worldToView.toJSON(),\r\n };\r\n\r\n const snap = await IModelReadRpcInterface.getClient().requestSnap(iModel.getRpcProps(), id, snapProps);\r\n expect(snap.status).to.not.be.undefined;\r\n });\r\n\r\n it(\"should be able to cancel a snap\", async () => {\r\n const ids = await iModel.elements.queryIds({ limit: 10, from: \"BisCore:PhysicalElement\" });\r\n const id = ids.values().next().value;\r\n\r\n const worldToView = Matrix4d.createIdentity();\r\n const snapProps = {\r\n id,\r\n testPoint: { x: 1, y: 2, z: 3 },\r\n closePoint: { x: 1, y: 2, z: 3 },\r\n worldToView: worldToView.toJSON(),\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n const promise = IModelReadRpcInterface.getClient().requestSnap(iModel.getRpcProps(), id, snapProps);\r\n try {\r\n await IModelReadRpcInterface.getClient().cancelSnap(iModel.getRpcProps(), id);\r\n const snap = await promise;\r\n\r\n // This is what we expect if the snap is completed before the cancellation is processed.\r\n expect(snap.status).not.to.be.undefined;\r\n } catch (err: any) {\r\n // This is what we expect if the cancellation occurs in time to really cancel the snap.\r\n expect(err.message).to.equal(\"aborted\");\r\n }\r\n });\r\n});\r\n"]}
|
|
@@ -29,5 +29,10 @@ describe("IModel Views", () => {
|
|
|
29
29
|
const viewState = await views.load(props[0].id);
|
|
30
30
|
expect(viewState).to.exist.and.be.not.empty;
|
|
31
31
|
});
|
|
32
|
+
it("should create viewstate3d using viewcreator3d", async () => {
|
|
33
|
+
const viewcreator3d = new core_frontend_1.ViewCreator3d(iModel);
|
|
34
|
+
const viewState = await viewcreator3d.createDefaultView();
|
|
35
|
+
expect(viewState).to.exist.and.be.not.empty;
|
|
36
|
+
});
|
|
32
37
|
});
|
|
33
38
|
//# sourceMappingURL=Views.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Views.test.js","sourceRoot":"","sources":["../../src/frontend/Views.test.ts"],"names":[],"mappings":";;AAAA;;;+FAG+F;AAC/F,6BAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"Views.test.js","sourceRoot":"","sources":["../../src/frontend/Views.test.ts"],"names":[],"mappings":";;AAAA;;;+FAG+F;AAC/F,6BAA6B;AAC7B,wDAAyF;AACzF,qDAAkD;AAElD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAE3B,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,MAAwB,CAAC;IAC7B,IAAI,KAA6B,CAAC;IAElC,MAAM,CAAC,KAAK;QACV,gCAAgC;QAChC,MAAM,WAAW,GAAG,MAAM,yBAAW,CAAC,QAAQ,EAAE,CAAC;QAEjD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,qBAAqB,EAAE;YAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;SACb;QAED,MAAM,GAAG,MAAM,WAAW,CAAC,oBAAqB,CAAC,aAAa,EAAE,CAAC;QACjE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,gCAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,gCAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC;QAEjD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,aAAa,GAAG,IAAI,6BAAa,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAE1D,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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 * as chai from \"chai\";\r\nimport { IModelConnection, SpatialViewState, ViewCreator3d } from \"@itwin/core-frontend\";\r\nimport { TestContext } from \"./setup/TestContext\";\r\n\r\nconst expect = chai.expect;\r\n\r\ndescribe(\"IModel Views\", () => {\r\n let iModel: IModelConnection;\r\n let views: IModelConnection.Views;\r\n\r\n before(async function () {\r\n // Ensure the singleton is setup\r\n const testContext = await TestContext.instance();\r\n\r\n if (!testContext.settings.runiModelReadRpcTests) {\r\n this.skip();\r\n }\r\n\r\n iModel = await testContext.iModelWithChangesets!.getConnection();\r\n views = iModel.views;\r\n });\r\n\r\n it(\"should query ids\", async () => {\r\n const props = await views.queryProps({ from: SpatialViewState.classFullName });\r\n expect(props).to.exist.and.be.not.empty;\r\n });\r\n\r\n it(\"should load\", async () => {\r\n const props = await views.queryProps({ from: SpatialViewState.classFullName });\r\n const viewState = await views.load(props[0].id!);\r\n\r\n expect(viewState).to.exist.and.be.not.empty;\r\n });\r\n\r\n it(\"should create viewstate3d using viewcreator3d\", async () => {\r\n const viewcreator3d = new ViewCreator3d(iModel);\r\n const viewState = await viewcreator3d.createDefaultView();\r\n\r\n expect(viewState).to.exist.and.be.not.empty;\r\n });\r\n});\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/rpcinterface-full-stack-tests",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0-dev.1",
|
|
4
4
|
"description": "Test the full iTwin.js Core stack (frontend and backend) using standard RPC interfaces",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -22,17 +22,17 @@
|
|
|
22
22
|
"@itwin/imodels-access-frontend": "^1.0.1",
|
|
23
23
|
"@itwin/imodels-client-authoring": "^1.0.1",
|
|
24
24
|
"@itwin/imodels-client-management": "^1.0.1",
|
|
25
|
-
"@itwin/build-tools": "3.
|
|
26
|
-
"@itwin/core-bentley": "3.
|
|
27
|
-
"@itwin/core-common": "3.
|
|
28
|
-
"@itwin/core-frontend": "3.
|
|
29
|
-
"@itwin/core-geometry": "3.
|
|
30
|
-
"@itwin/core-quantity": "3.
|
|
31
|
-
"@itwin/certa": "3.
|
|
32
|
-
"@itwin/eslint-plugin": "3.
|
|
25
|
+
"@itwin/build-tools": "3.3.0-dev.1",
|
|
26
|
+
"@itwin/core-bentley": "3.3.0-dev.1",
|
|
27
|
+
"@itwin/core-common": "3.3.0-dev.1",
|
|
28
|
+
"@itwin/core-frontend": "3.3.0-dev.1",
|
|
29
|
+
"@itwin/core-geometry": "3.3.0-dev.1",
|
|
30
|
+
"@itwin/core-quantity": "3.3.0-dev.1",
|
|
31
|
+
"@itwin/certa": "3.3.0-dev.1",
|
|
32
|
+
"@itwin/eslint-plugin": "3.3.0-dev.1",
|
|
33
33
|
"@itwin/oidc-signin-tool": "^3.2.2",
|
|
34
|
-
"@itwin/presentation-common": "3.
|
|
35
|
-
"@itwin/presentation-frontend": "3.
|
|
34
|
+
"@itwin/presentation-common": "3.3.0-dev.1",
|
|
35
|
+
"@itwin/presentation-frontend": "3.3.0-dev.1",
|
|
36
36
|
"@itwin/service-authorization": "^0.6.1",
|
|
37
37
|
"chai": "^4.1.2",
|
|
38
38
|
"chai-as-promised": "^7",
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
"puppeteer": "chrome-86"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@itwin/core-backend": "3.
|
|
47
|
-
"@itwin/express-server": "3.
|
|
46
|
+
"@itwin/core-backend": "3.3.0-dev.1",
|
|
47
|
+
"@itwin/express-server": "3.3.0-dev.1",
|
|
48
48
|
"@itwin/imodels-access-backend": "^1.0.1",
|
|
49
|
-
"@itwin/presentation-backend": "3.
|
|
49
|
+
"@itwin/presentation-backend": "3.3.0-dev.1",
|
|
50
50
|
"@itwin/projects-client": "^0.6.0",
|
|
51
51
|
"@types/chai": "^4.1.4",
|
|
52
52
|
"@types/chai-as-promised": "^7",
|
|
53
53
|
"@types/mocha": "^8.2.2",
|
|
54
|
-
"@types/node": "
|
|
54
|
+
"@types/node": "16.11.7",
|
|
55
55
|
"@types/puppeteer": "2.0.1",
|
|
56
56
|
"cpx2": "^3.0.0",
|
|
57
57
|
"eslint": "^7.11.0",
|
|
@@ -71,8 +71,8 @@
|
|
|
71
71
|
"extends": "plugin:@itwin/itwinjs-recommended"
|
|
72
72
|
},
|
|
73
73
|
"scripts": {
|
|
74
|
-
"build": "tsc 1>&2
|
|
75
|
-
"build:ci": "npm run -s build",
|
|
74
|
+
"build": "tsc 1>&2",
|
|
75
|
+
"build:ci": "npm run -s build && npm run -s webpack:test",
|
|
76
76
|
"clean": "rimraf lib .rush/temp/package-deps*.json integration_test_results",
|
|
77
77
|
"copy:config": "internal-tools copy-config",
|
|
78
78
|
"cover": "",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"test": "",
|
|
84
84
|
"test:integration": "npm-run-all -r -p start:backend test:integration:chrome",
|
|
85
85
|
"test:integration:chrome": "certa -r chrome",
|
|
86
|
-
"webpack:
|
|
86
|
+
"webpack:test": "webpack --config webpack.config.js 1>&2"
|
|
87
87
|
},
|
|
88
88
|
"readme": "# iTwin.js RPC Interface Integration Tests\r\n\r\nCopyright © Bentley Systems, Incorporated. All rights reserved. See LICENSE.md for license terms and full copyright notice.\r\n\r\nThis package contains the iTwin.js RPC Interface integration tests and configuration setup to run them against a deployed backend.\r\n\r\n## Prerequisites\r\n\r\nRefer to the iTwin.js [prerequisites](https://github.com/iTwin/itwinjs-core#prerequisites)\r\n\r\n## Running the tests\r\n\r\nBefore running the tests, the environment needs to be setup. The easiest way is to configure a [.env] file in the working directory, the [template.env](./template.env) file has information about how to set one up and all the variables that need to be configured.\r\n\r\nAll test related settings are contained in the `process.env` variable and parsed by [Settings.ts](./setup/Settings.ts). If something required is missing or not configured properly, the tests will fail to setup.\r\n\r\n### Setting up the required context\r\n\r\nThe tests require an Project and iModel to be setup in order to run properly.\r\n\r\nThe iModel doesn't require anything special and can be a seed iModel.\r\n\r\n### Specifying users to be used for testing\r\n\r\nThe tests require a single user to be specified. The user's access rules required are:\r\n\r\n1. User1 - full access to the Project and an iModel (requires iModelHub Read iModel Project Role)\r\n - i.e., \"user_with_access_username\" in the `.env` file.\r\n\r\n### Specifying the backend\r\n\r\nIf the specified address for the backend is \"localhost\", you must have built a backend and start it.\r\n\r\nIf you do not specify the address to be \"localhost\" for the backend, you must specify a valid URL to a hosted backend.\r\n\r\n### Configuring OIDC\r\n\r\nBy default the tests will retrieve valid OIDC tokens on behalf of each user specified in `environment` in order to make API calls. However,\r\nif you wish to use JWTs instead, you may set the `oidc_client_id` environment variable which will use OIDC authentication instead of SAML.\r\n\r\nIn order to run the integration tests they need to have a valid OIDC client id which can be obtains by performing the following steps:\r\n\r\n1. Go to the \"[Register your application](https://developer.bentley.com/register/)\" page and sign in\r\n1. Click 'New App'\r\n1. Select \"SPA\" application\r\n1. Specify a client name (can be anything you want)\r\n1. Add `http://localhost:5000` as a redirect url\r\n1. Hit 'Next' to finish\r\n\r\n### Actually running the tests\r\n\r\nOnce all the required environment variables are setup, to run the integration tests:\r\n\r\n1. Install dependencies: `npm install`\r\n2. Clean output: `npm run clean`\r\n3. Build source: `npm run build`\r\n4. Run tests: `npm test:integration`\r\n\r\n## Development instructions\r\n\r\nThe base 'after all' and 'before all' hooks are implemented in TestSetup.test.ts. Any cleanup and setup steps should be added here.\r\n\r\nThe `TestContext` class follows the singleton pattern and will automatically be setup when its static instance is invoked via its `TestContext.instance()`.\r\nThe setup uses a [.env file](./.env) and `process.env` to populate the `TestContext`.\r\n"
|
|
89
89
|
}
|