Selaa lähdekoodia

test: fix test

nathan 2 vuotta sitten
vanhempi
commit
b293150b19

+ 2 - 1
frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart

@@ -34,7 +34,8 @@ class BoardDataController {
 
   // key: the block id
   final LinkedHashMap<String, GridBlockCache> _blocks;
-  LinkedHashMap<String, GridBlockCache> get blocks => _blocks;
+  UnmodifiableMapView<String, GridBlockCache> get blocks =>
+      UnmodifiableMapView(_blocks);
 
   OnFieldsChanged? _onFieldsChanged;
   OnGridChanged? _onGridChanged;

+ 101 - 15
frontend/app_flowy/test/bloc_test/grid_test/util.dart

@@ -1,8 +1,12 @@
 import 'dart:collection';
+import 'package:app_flowy/plugins/board/application/board_data_controller.dart';
+import 'package:app_flowy/plugins/board/board.dart';
 import 'package:app_flowy/plugins/grid/application/block/block_cache.dart';
 import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart';
 import 'package:app_flowy/plugins/grid/application/field/field_controller.dart';
+import 'package:app_flowy/plugins/grid/application/field/field_editor_bloc.dart';
 import 'package:app_flowy/plugins/grid/application/field/field_service.dart';
+import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart';
 import 'package:app_flowy/plugins/grid/application/grid_data_controller.dart';
 import 'package:app_flowy/plugins/grid/application/row/row_bloc.dart';
 import 'package:app_flowy/plugins/grid/application/row/row_cache.dart';
@@ -16,29 +20,90 @@ import '../../util.dart';
 
 /// Create a empty Grid for test
 class AppFlowyGridTest {
-  final AppFlowyUnitTest _inner;
+  final AppFlowyUnitTest unitTest;
   late ViewPB gridView;
-  late GridDataController _dataController;
+  GridDataController? _gridDataController;
+  BoardDataController? _boardDataController;
 
-  AppFlowyGridTest(AppFlowyUnitTest unitTest) : _inner = unitTest;
+  AppFlowyGridTest({required this.unitTest});
 
   static Future<AppFlowyGridTest> ensureInitialized() async {
     final inner = await AppFlowyUnitTest.ensureInitialized();
-    return AppFlowyGridTest(inner);
+    return AppFlowyGridTest(unitTest: inner);
   }
 
-  List<RowInfo> get rowInfos => _dataController.rowInfos;
+  List<RowInfo> get rowInfos {
+    if (_gridDataController != null) {
+      return _gridDataController!.rowInfos;
+    }
 
-  UnmodifiableMapView<String, GridBlockCache> get blocks =>
-      _dataController.blocks;
+    if (_boardDataController != null) {
+      return _boardDataController!.rowInfos;
+    }
 
-  List<GridFieldContext> get fieldContexts =>
-      _dataController.fieldController.fieldContexts;
+    throw Exception();
+  }
+
+  UnmodifiableMapView<String, GridBlockCache> get blocks {
+    if (_gridDataController != null) {
+      return _gridDataController!.blocks;
+    }
+
+    if (_boardDataController != null) {
+      return _boardDataController!.blocks;
+    }
+
+    throw Exception();
+  }
+
+  List<GridFieldContext> get fieldContexts => fieldController.fieldContexts;
+
+  GridFieldController get fieldController {
+    if (_gridDataController != null) {
+      return _gridDataController!.fieldController;
+    }
+
+    if (_boardDataController != null) {
+      return _boardDataController!.fieldController;
+    }
 
-  GridFieldController get fieldController => _dataController.fieldController;
+    throw Exception();
+  }
 
   Future<void> createRow() async {
-    await _dataController.createRow();
+    if (_gridDataController != null) {
+      return _gridDataController!.createRow();
+    }
+
+    throw Exception();
+  }
+
+  FieldEditorBloc createFieldEditor({
+    GridFieldContext? fieldContext,
+  }) {
+    IFieldTypeOptionLoader loader;
+    if (fieldContext == null) {
+      loader = NewFieldTypeOptionLoader(gridId: gridView.id);
+    } else {
+      loader =
+          FieldTypeOptionLoader(gridId: gridView.id, field: fieldContext.field);
+    }
+
+    final editorBloc = FieldEditorBloc(
+      fieldName: fieldContext?.name ?? '',
+      isGroupField: fieldContext?.isGroupField ?? false,
+      loader: loader,
+      gridId: gridView.id,
+    );
+    return editorBloc;
+  }
+
+  Future<FieldEditorBloc> createFieldFromType(FieldType fieldType) async {
+    final editor = createFieldEditor()..add(const FieldEditorEvent.initial());
+    await gridResponseFuture();
+    editor.dataController.switchToField(fieldType);
+    await gridResponseFuture();
+    return Future(() => editor);
   }
 
   GridFieldContext singleSelectFieldContext() {
@@ -53,7 +118,7 @@ class AppFlowyGridTest {
   }
 
   Future<void> createTestGrid() async {
-    final app = await _inner.createTestApp();
+    final app = await unitTest.createTestApp();
     final builder = GridPluginBuilder();
     final result = await AppService().createView(
       appId: app.id,
@@ -65,9 +130,30 @@ class AppFlowyGridTest {
     await result.fold(
       (view) async {
         gridView = view;
-        _dataController = GridDataController(view: view);
-        final result = await _dataController.loadData();
+        _gridDataController = GridDataController(view: view);
+        final result = await _gridDataController!.loadData();
+        result.fold((l) => null, (r) => throw Exception(r));
+      },
+      (error) {},
+    );
+  }
+
+  Future<void> createTestBoard() async {
+    final app = await unitTest.createTestApp();
+    final builder = BoardPluginBuilder();
+    final result = await AppService().createView(
+      appId: app.id,
+      name: "Test Board",
+      dataFormatType: builder.dataFormatType,
+      pluginType: builder.pluginType,
+      layoutType: builder.layoutType!,
+    );
+    await result.fold(
+      (view) async {
+        _boardDataController = BoardDataController(view: view);
+        final result = await _boardDataController!.loadData();
         result.fold((l) => null, (r) => throw Exception(r));
+        gridView = view;
       },
       (error) {},
     );
@@ -101,7 +187,7 @@ class AppFlowyGridCellTest {
 
     final rowDataController = GridRowDataController(
       rowInfo: rowInfo,
-      fieldController: _gridTest._dataController.fieldController,
+      fieldController: _gridTest._gridDataController!.fieldController,
       rowCache: rowCache!,
     );
 

+ 1 - 0
frontend/app_flowy/test/bloc_test/menu_test/app_bloc_test.dart

@@ -90,6 +90,7 @@ void main() {
       "delete the document",
       build: () => AppBloc(app: app)..add(const AppEvent.initial()),
       act: (bloc) => bloc.add(AppEvent.deleteView(view.id)),
+      wait: blocResponseDuration(),
       verify: (bloc) {
         assert(bloc.state.views.isEmpty);
       },