alexeyinkin commented on code in PR #26978:
URL: https://github.com/apache/beam/pull/26978#discussion_r1221434136


##########
learning/tour-of-beam/frontend/integration_test/tour_page_test.dart:
##########
@@ -259,3 +264,103 @@ Set<String> _getExpandedIds(WidgetTester wt) {
   final controller = getContentTreeController(wt);
   return controller.expandedIds;
 }
+
+Future<void> _checkSdkChanges(WidgetTester wt) async {
+  await _selectUnitWithSnippetsInAllSdks(wt);
+  await _checkSnippetChangesOnSdkChanging(wt);
+}
+
+Future<void> _selectUnitWithSnippetsInAllSdks(WidgetTester wt) async {
+  final unitWithSnippets = await _findUnitWithSnippetsInAllSdks(wt);
+
+  if (unitWithSnippets == null) {
+    fail('No unit with snippets in all sdks');
+  }
+
+  final controller = getContentTreeController(wt);
+  controller.onNodePressed(unitWithSnippets);
+  await wt.pumpAndSettle();
+}
+
+Future<UnitModel?> _findUnitWithSnippetsInAllSdks(WidgetTester wt) async {
+  final commonUnits = await _getCommonUnitsInAllSdks(wt);
+  for (final unit in commonUnits) {
+    if (await _hasSnippetsInAllSdks(unit)) {
+      return unit;
+    }
+  }
+  return null;
+}
+
+Future<bool> _hasSnippetsInAllSdks(UnitModel unit) async {
+  final unitContentCache = GetIt.instance.get<UnitContentCache>();
+  final sdks = GetIt.instance.get<SdkCache>().getSdks();
+  for (final sdk in sdks) {
+    final unitContent = await unitContentCache.getUnitContent(sdk.id, unit.id);
+    if (unitContent.taskSnippetId == null) {
+      return false;
+    }
+  }
+  return true;
+}
+
+Future<List<UnitModel>> _getCommonUnitsInAllSdks(WidgetTester wt) async {
+  final contentTrees = await _loadAllContentTrees(wt);
+  final sdkUnits = List<List<UnitModel>>.empty(growable: true);
+  for (final tree in contentTrees) {
+    sdkUnits.add(tree.getUnits().toList());

Review Comment:
   `toSet()` maybe?



##########
learning/tour-of-beam/frontend/integration_test/tour_page_test.dart:
##########
@@ -259,3 +264,103 @@ Set<String> _getExpandedIds(WidgetTester wt) {
   final controller = getContentTreeController(wt);
   return controller.expandedIds;
 }
+
+Future<void> _checkSdkChanges(WidgetTester wt) async {
+  await _selectUnitWithSnippetsInAllSdks(wt);
+  await _checkSnippetChangesOnSdkChanging(wt);
+}
+
+Future<void> _selectUnitWithSnippetsInAllSdks(WidgetTester wt) async {
+  final unitWithSnippets = await _findUnitWithSnippetsInAllSdks(wt);
+
+  if (unitWithSnippets == null) {
+    fail('No unit with snippets in all sdks');
+  }
+
+  final controller = getContentTreeController(wt);
+  controller.onNodePressed(unitWithSnippets);
+  await wt.pumpAndSettle();
+}
+
+Future<UnitModel?> _findUnitWithSnippetsInAllSdks(WidgetTester wt) async {
+  final commonUnits = await _getCommonUnitsInAllSdks(wt);
+  for (final unit in commonUnits) {
+    if (await _hasSnippetsInAllSdks(unit)) {
+      return unit;
+    }
+  }
+  return null;
+}
+
+Future<bool> _hasSnippetsInAllSdks(UnitModel unit) async {
+  final unitContentCache = GetIt.instance.get<UnitContentCache>();
+  final sdks = GetIt.instance.get<SdkCache>().getSdks();
+  for (final sdk in sdks) {
+    final unitContent = await unitContentCache.getUnitContent(sdk.id, unit.id);
+    if (unitContent.taskSnippetId == null) {
+      return false;
+    }
+  }
+  return true;
+}
+
+Future<List<UnitModel>> _getCommonUnitsInAllSdks(WidgetTester wt) async {
+  final contentTrees = await _loadAllContentTrees(wt);
+  final sdkUnits = List<List<UnitModel>>.empty(growable: true);
+  for (final tree in contentTrees) {
+    sdkUnits.add(tree.getUnits().toList());
+  }
+
+  // Identifies and stores the common units across all lists within
+  // the 'sdkUnits' list by iteratively removing elements from the first list
+  // that don't exist in the subsequent lists.
+  final commonUnitTitles = sdkUnits.first;
+  for (final units in sdkUnits.skip(1)) {
+    commonUnitTitles.removeWhere((u) => !units.contains(u));
+  }
+
+  return commonUnitTitles;
+}
+
+Future<List<ContentTreeModel>> _loadAllContentTrees(WidgetTester wt) async {
+  final sdkCache = GetIt.instance.get<SdkCache>();
+  final contentTreeCache = GetIt.instance.get<ContentTreeCache>();
+  final sdks = sdkCache.getSdks();
+  final nullableTrees = await Future.wait(
+    sdks.map((sdk) async => contentTreeCache.getContentTree(sdk)),
+  );
+
+  return nullableTrees.whereNotNull().toList(growable: false);
+}
+
+Future<void> _checkSnippetChangesOnSdkChanging(WidgetTester wt) async {
+  final defaultSdk = _getTourNotifier(wt).playgroundController.sdk;
+  final sdkCache = GetIt.instance.get<SdkCache>();
+
+  String? previousPath;
+  for (final sdk in sdkCache.getSdks()) {
+    if (sdk == defaultSdk) {
+      continue;
+    }
+
+    await _setSdk(sdk.title, wt);
+
+    final selectedExample =
+        _getTourNotifier(wt).playgroundController.selectedExample;
+    final appNotifier = GetIt.instance.get<AppNotifier>();
+    final actualPath = selectedExample?.path;
+    final actualSdk = selectedExample?.sdk;
+    expect(actualPath, isNot(previousPath));

Review Comment:
   Redundant.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to