@@ -137,6 +137,158 @@ public async Task Render_ChangeTrace_RowsRendered()
137
137
await AsyncTestHelpers . AssertIsTrueRetryAsync ( ( ) => rows . Count == 2 , "Expected rows to be rendered." ) ;
138
138
}
139
139
140
+ [ Fact ]
141
+ public async Task Render_SpansOrderedByStartTime_RowsRenderedInCorrectOrder ( )
142
+ {
143
+ // Arrange
144
+ SetupTraceDetailsServices ( ) ;
145
+
146
+ var viewport = new ViewportInformation ( IsDesktop : true , IsUltraLowHeight : false , IsUltraLowWidth : false ) ;
147
+
148
+ var dimensionManager = Services . GetRequiredService < DimensionManager > ( ) ;
149
+ dimensionManager . InvokeOnViewportInformationChanged ( viewport ) ;
150
+
151
+ var telemetryRepository = Services . GetRequiredService < TelemetryRepository > ( ) ;
152
+ telemetryRepository . AddTraces ( new AddContext ( ) ,
153
+ new RepeatedField < ResourceSpans >
154
+ {
155
+ new ResourceSpans
156
+ {
157
+ Resource = CreateResource ( ) ,
158
+ ScopeSpans =
159
+ {
160
+ new ScopeSpans
161
+ {
162
+ Scope = CreateScope ( ) ,
163
+ Spans =
164
+ {
165
+ CreateSpan ( traceId : "1" , spanId : "1-1" ,
166
+ startTime : s_testTime . AddMinutes ( 1 ) ,
167
+ endTime : s_testTime . AddMinutes ( 10 ) ) ,
168
+ CreateSpan ( traceId : "1" , spanId : "2-1" ,
169
+ startTime : s_testTime . AddMinutes ( 1 ) ,
170
+ endTime : s_testTime . AddMinutes ( 10 ) ,
171
+ parentSpanId : "1-1" ) ,
172
+ CreateSpan ( traceId : "1" , spanId : "3-1" ,
173
+ startTime : s_testTime . AddMinutes ( 1 ) ,
174
+ endTime : s_testTime . AddMinutes ( 10 ) ,
175
+ parentSpanId : "2-1" ) ,
176
+ CreateSpan ( traceId : "1" , spanId : "3-3" ,
177
+ startTime : s_testTime . AddMinutes ( 3 ) ,
178
+ endTime : s_testTime . AddMinutes ( 5 ) ,
179
+ parentSpanId : "2-1" ) ,
180
+ CreateSpan ( traceId : "1" , spanId : "3-2" ,
181
+ startTime : s_testTime . AddMinutes ( 2 ) ,
182
+ endTime : s_testTime . AddMinutes ( 6 ) ,
183
+ parentSpanId : "2-1" )
184
+ }
185
+ }
186
+ }
187
+ }
188
+ } ) ;
189
+
190
+ // Act
191
+ var traceId = Convert . ToHexString ( Encoding . UTF8 . GetBytes ( "1" ) ) ;
192
+ var cut = RenderComponent < TraceDetail > ( builder =>
193
+ {
194
+ builder . Add ( p => p . TraceId , traceId ) ;
195
+ builder . AddCascadingValue ( viewport ) ;
196
+ } ) ;
197
+
198
+ var data = await cut . Instance . GetData ( new GridItemsProviderRequest < SpanWaterfallViewModel > ( ) ) ;
199
+
200
+ // Assert
201
+ Assert . Collection ( data . Items ,
202
+ item => Assert . Equal ( "Test span. Id: 1-1" , item . Span . Name ) ,
203
+ item => Assert . Equal ( "Test span. Id: 2-1" , item . Span . Name ) ,
204
+ item => Assert . Equal ( "Test span. Id: 3-1" , item . Span . Name ) ,
205
+ item => Assert . Equal ( "Test span. Id: 3-2" , item . Span . Name ) ,
206
+ item => Assert . Equal ( "Test span. Id: 3-3" , item . Span . Name ) ) ;
207
+ }
208
+
209
+ [ Fact ]
210
+ public void ToggleCollapse_SpanStateChanges ( )
211
+ {
212
+ // Arrange
213
+ SetupTraceDetailsServices ( ) ;
214
+
215
+ var viewport = new ViewportInformation ( IsDesktop : true , IsUltraLowHeight : false , IsUltraLowWidth : false ) ;
216
+ var dimensionManager = Services . GetRequiredService < DimensionManager > ( ) ;
217
+ dimensionManager . InvokeOnViewportInformationChanged ( viewport ) ;
218
+
219
+ var telemetryRepository = Services . GetRequiredService < TelemetryRepository > ( ) ;
220
+ telemetryRepository . AddTraces ( new AddContext ( ) ,
221
+ new RepeatedField < ResourceSpans >
222
+ {
223
+ new ResourceSpans
224
+ {
225
+ Resource = CreateResource ( ) ,
226
+ ScopeSpans =
227
+ {
228
+ new ScopeSpans
229
+ {
230
+ Scope = CreateScope ( ) ,
231
+ Spans =
232
+ {
233
+ CreateSpan ( traceId : "1" , spanId : "1-1" ,
234
+ startTime : s_testTime . AddMinutes ( 1 ) ,
235
+ endTime : s_testTime . AddMinutes ( 10 ) ) ,
236
+ CreateSpan ( traceId : "1" , spanId : "2-1" ,
237
+ startTime : s_testTime . AddMinutes ( 5 ) ,
238
+ endTime : s_testTime . AddMinutes ( 10 ) , parentSpanId : "1-1" ) ,
239
+ CreateSpan ( traceId : "1" , spanId : "3-1" ,
240
+ startTime : s_testTime . AddMinutes ( 6 ) ,
241
+ endTime : s_testTime . AddMinutes ( 10 ) , parentSpanId : "2-1" )
242
+ }
243
+ }
244
+ }
245
+ }
246
+ } ) ;
247
+
248
+ var traceId = Convert . ToHexString ( Encoding . UTF8 . GetBytes ( "1" ) ) ;
249
+ var cut = RenderComponent < TraceDetail > ( builder =>
250
+ {
251
+ builder . Add ( p => p . TraceId , traceId ) ;
252
+ builder . AddCascadingValue ( viewport ) ;
253
+ } ) ;
254
+
255
+ cut . WaitForAssertion ( ( ) => Assert . Equal ( 2 , cut . FindAll ( ".main-grid-expand-button" ) . Count ) ) ;
256
+ // Act and assert
257
+
258
+ // Collapse the middle span
259
+ cut . FindAll ( ".main-grid-expand-button" ) [ 1 ] . Click ( ) ;
260
+
261
+ cut . WaitForAssertion ( ( ) =>
262
+ {
263
+ var expandContainers = cut . FindAll ( ".main-grid-expand-container" ) ;
264
+ // There should now be two containers since the 3rd level element should now be filtered out
265
+ Assert . Collection ( expandContainers ,
266
+ container => Assert . True ( container . ClassList . Contains ( "main-grid-expanded" ) ) ,
267
+ container => Assert . True ( container . ClassList . Contains ( "main-grid-collapsed" ) ) ) ;
268
+ } ) ;
269
+
270
+ // Collapse the parent span
271
+ cut . FindAll ( ".main-grid-expand-button" ) [ 0 ] . Click ( ) ;
272
+ cut . WaitForAssertion ( ( ) =>
273
+ {
274
+ var expandContainers = cut . FindAll ( ".main-grid-expand-container" ) ;
275
+ // There should now be one container since the 2nd level element should now be filtered out
276
+ Assert . Collection ( expandContainers ,
277
+ container => Assert . True ( container . ClassList . Contains ( "main-grid-collapsed" ) ) ) ;
278
+ } ) ;
279
+
280
+ // Expand the parent span, we should now see the same two containers as before
281
+ cut . FindAll ( ".main-grid-expand-button" ) [ 0 ] . Click ( ) ;
282
+ cut . WaitForAssertion ( ( ) =>
283
+ {
284
+ var expandContainers = cut . FindAll ( ".main-grid-expand-container" ) ;
285
+ // There should now be two containers since the 3rd level element should now be filtered out
286
+ Assert . Collection ( expandContainers ,
287
+ container => Assert . True ( container . ClassList . Contains ( "main-grid-expanded" ) ) ,
288
+ container => Assert . True ( container . ClassList . Contains ( "main-grid-collapsed" ) ) ) ;
289
+ } ) ;
290
+ }
291
+
140
292
private void SetupTraceDetailsServices ( )
141
293
{
142
294
var version = typeof ( FluentMain ) . Assembly . GetName ( ) . Version ! ;
0 commit comments