4
4
*--------------------------------------------------------------------------------------------*/
5
5
6
6
import { assert , expect } from "chai" ;
7
+ import { from , mergeMap , take } from "rxjs" ;
7
8
import sinon from "sinon" ;
8
9
import { CompressedId64Set , Id64 } from "@itwin/core-bentley" ;
9
10
import { Code , ColorDef , IModel , IModelReadRpcInterface , RenderMode } from "@itwin/core-common" ;
@@ -15,6 +16,7 @@ import { createECSqlQueryExecutor } from "@itwin/presentation-core-interop";
15
16
import { createIModelHierarchyProvider , createLimitingECSqlQueryExecutor , HierarchyNode } from "@itwin/presentation-hierarchies" ;
16
17
import { InstanceKey } from "@itwin/presentation-shared" ;
17
18
import { HierarchyCacheMode , initialize as initializePresentationTesting , terminate as terminatePresentationTesting } from "@itwin/presentation-testing" ;
19
+ import { toVoidPromise } from "../../../../tree-widget-react-internal.js" ;
18
20
import { createVisibilityStatus } from "../../../../tree-widget-react/components/trees/common/Tooltip.js" ;
19
21
import { ModelsTreeIdsCache } from "../../../../tree-widget-react/components/trees/models-tree/internal/ModelsTreeIdsCache.js" ;
20
22
import { createModelsTreeVisibilityHandler } from "../../../../tree-widget-react/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js" ;
@@ -29,7 +31,7 @@ import {
29
31
insertSpatialCategory ,
30
32
insertSubject ,
31
33
} from "../../../IModelUtils.js" ;
32
- import { TestUtils } from "../../../TestUtils.js" ;
34
+ import { TestUtils , waitFor } from "../../../TestUtils.js" ;
33
35
import { createFakeSinonViewport , createIModelAccess } from "../../Common.js" ;
34
36
import {
35
37
createCategoryHierarchyNode ,
@@ -39,7 +41,7 @@ import {
39
41
createModelHierarchyNode ,
40
42
createSubjectHierarchyNode ,
41
43
} from "../Utils.js" ;
42
- import { validateHierarchyVisibility , VisibilityExpectations } from "./VisibilityValidation.js" ;
44
+ import { validateHierarchyVisibility , validateNodeVisibility , VisibilityExpectations } from "./VisibilityValidation.js" ;
43
45
44
46
import type { Visibility } from "../../../../tree-widget-react/components/trees/common/Tooltip.js" ;
45
47
import type { HierarchyVisibilityHandler } from "../../../../tree-widget-react/components/trees/common/UseHierarchyVisibility.js" ;
@@ -49,7 +51,6 @@ import type { GeometricElement3dProps, QueryBinder } from "@itwin/core-common";
49
51
import type { GroupingHierarchyNode , HierarchyNodeIdentifiersPath , HierarchyProvider , NonGroupingHierarchyNode } from "@itwin/presentation-hierarchies" ;
50
52
import type { Id64String } from "@itwin/core-bentley" ;
51
53
import type { ValidateNodeProps } from "./VisibilityValidation.js" ;
52
-
53
54
interface VisibilityOverrides {
54
55
models ?: Map < Id64String , Visibility > ;
55
56
categories ?: Map < Id64String , Visibility > ;
@@ -2196,7 +2197,7 @@ describe("ModelsTreeVisibilityHandler", () => {
2196
2197
} ) ;
2197
2198
} ) ;
2198
2199
2199
- it ( "validates visibility for large iModel" , async function ( ) {
2200
+ it . only ( "validates visibility for large iModel" , async function ( ) {
2200
2201
await using buildIModelResult = await buildIModel ( this , async ( builder ) => {
2201
2202
const modelsToTurnOn = new Array < string > ( ) ;
2202
2203
let elementId = "" ;
@@ -2217,13 +2218,21 @@ describe("ModelsTreeVisibilityHandler", () => {
2217
2218
await Promise . all ( ids . modelsToTurnOn . map ( async ( modelId ) => handler . changeVisibility ( createModelHierarchyNode ( modelId ) , true ) ) ) ;
2218
2219
viewport . setAlwaysDrawn ( new Set ( [ ids . elementId ] ) ) ;
2219
2220
viewport . renderFrame ( ) ;
2220
- await validateHierarchyVisibility ( {
2221
- provider,
2222
- handler,
2223
- viewport,
2224
- visibilityExpectations : VisibilityExpectations . all ( "visible" ) ,
2225
- waitForOptions : { timeout : 2000 } ,
2226
- } ) ;
2221
+ await toVoidPromise (
2222
+ from ( provider . getNodes ( { parentNode : undefined } ) ) . pipe (
2223
+ mergeMap ( async ( node ) => {
2224
+ await validateNodeVisibility ( { node, visibilityExpectations : VisibilityExpectations . all ( "visible" ) , viewport, handler } ) ;
2225
+ return provider . getNodes ( { parentNode : node } )
2226
+ } ) ,
2227
+ mergeMap ( ( nodeIterator ) => nodeIterator ) ,
2228
+ take ( 1 ) ,
2229
+ mergeMap ( async ( node ) =>
2230
+ waitFor ( async ( ) => validateNodeVisibility ( { node, visibilityExpectations : VisibilityExpectations . all ( "visible" ) , viewport, handler } ) , {
2231
+ timeout : 2000 ,
2232
+ } ) ,
2233
+ ) ,
2234
+ ) ,
2235
+ ) ;
2227
2236
} ) ;
2228
2237
2229
2238
it ( "showing model makes it, all its categories and elements visible and doesn't affect other models" , async function ( ) {
0 commit comments