util.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart';
  2. import 'package:app_flowy/plugins/grid/application/grid_data_controller.dart';
  3. import 'package:app_flowy/plugins/grid/application/row/row_bloc.dart';
  4. import 'package:app_flowy/plugins/grid/application/row/row_cache.dart';
  5. import 'package:app_flowy/plugins/grid/application/row/row_data_controller.dart';
  6. import 'package:app_flowy/plugins/grid/grid.dart';
  7. import 'package:app_flowy/workspace/application/app/app_service.dart';
  8. import 'package:flowy_sdk/protobuf/flowy-folder/view.pb.dart';
  9. import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
  10. import '../../util.dart';
  11. /// Create a empty Grid for test
  12. class AppFlowyGridTest {
  13. // ignore: unused_field
  14. final AppFlowyUnitTest _inner;
  15. late ViewPB gridView;
  16. AppFlowyGridTest(AppFlowyUnitTest unitTest) : _inner = unitTest;
  17. static Future<AppFlowyGridTest> ensureInitialized() async {
  18. final inner = await AppFlowyUnitTest.ensureInitialized();
  19. final test = AppFlowyGridTest(inner);
  20. await test._createTestGrid();
  21. return test;
  22. }
  23. Future<void> _createTestGrid() async {
  24. final app = await _inner.createTestApp();
  25. final builder = GridPluginBuilder();
  26. final result = await AppService().createView(
  27. appId: app.id,
  28. name: "Test Grid",
  29. dataType: builder.dataType,
  30. pluginType: builder.pluginType,
  31. layoutType: builder.layoutType!,
  32. );
  33. result.fold(
  34. (view) => gridView = view,
  35. (error) {},
  36. );
  37. }
  38. }
  39. class AppFlowyGridSelectOptionCellTest {
  40. final AppFlowyGridCellTest _cellTest;
  41. AppFlowyGridSelectOptionCellTest(AppFlowyGridCellTest cellTest)
  42. : _cellTest = cellTest;
  43. static Future<AppFlowyGridSelectOptionCellTest> ensureInitialized() async {
  44. final cellTest = await AppFlowyGridCellTest.ensureInitialized();
  45. final test = AppFlowyGridSelectOptionCellTest(cellTest);
  46. return test;
  47. }
  48. /// For the moment, just edit the first row of the grid.
  49. Future<GridSelectOptionCellController> makeCellController(
  50. FieldType fieldType) async {
  51. assert(fieldType == FieldType.SingleSelect ||
  52. fieldType == FieldType.MultiSelect);
  53. final fieldContexts =
  54. _cellTest._dataController.fieldController.fieldContexts;
  55. final field =
  56. fieldContexts.firstWhere((element) => element.fieldType == fieldType);
  57. final builder = await _cellTest.cellControllerBuilder(0, field.id);
  58. final cellController = builder.build() as GridSelectOptionCellController;
  59. return cellController;
  60. }
  61. }
  62. class AppFlowyGridCellTest {
  63. // ignore: unused_field
  64. final AppFlowyGridTest _gridTest;
  65. final GridDataController _dataController;
  66. AppFlowyGridCellTest(AppFlowyGridTest gridTest)
  67. : _gridTest = gridTest,
  68. _dataController = GridDataController(view: gridTest.gridView);
  69. static Future<AppFlowyGridCellTest> ensureInitialized() async {
  70. final gridTest = await AppFlowyGridTest.ensureInitialized();
  71. final test = AppFlowyGridCellTest(gridTest);
  72. await test._loadGridData();
  73. return test;
  74. }
  75. Future<void> _loadGridData() async {
  76. final result = await _dataController.loadData();
  77. result.fold((l) => null, (r) => throw Exception(r));
  78. }
  79. Future<GridCellControllerBuilder> cellControllerBuilder(
  80. int rowIndex, String fieldId) async {
  81. final RowInfo rowInfo = _dataController.rowInfos[rowIndex];
  82. final blockCache = _dataController.blocks[rowInfo.rowPB.blockId];
  83. final rowCache = blockCache?.rowCache;
  84. final rowDataController = GridRowDataController(
  85. rowInfo: rowInfo,
  86. fieldController: _dataController.fieldController,
  87. rowCache: rowCache!,
  88. );
  89. final rowBloc = RowBloc(
  90. rowInfo: rowInfo,
  91. dataController: rowDataController,
  92. )..add(const RowEvent.initial());
  93. await gridResponseFuture(millseconds: 300);
  94. return GridCellControllerBuilder(
  95. cellId: rowBloc.state.gridCellMap[fieldId]!,
  96. cellCache: rowCache.cellCache,
  97. delegate: rowDataController,
  98. );
  99. }
  100. }
  101. Future<void> gridResponseFuture({int millseconds = 100}) {
  102. return Future.delayed(gridResponseDuration(millseconds: millseconds));
  103. }
  104. Duration gridResponseDuration({int millseconds = 100}) {
  105. return Duration(milliseconds: millseconds);
  106. }