从无法访问的项目中派生。
create_issue_in_sub_group_test.dart 41.33 KiB
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jihu_gitlab_app/core/dependency_injector.dart';
import 'package:jihu_gitlab_app/core/local_storage.dart';
import 'package:jihu_gitlab_app/core/net/http_client.dart';
import 'package:jihu_gitlab_app/core/net/response.dart';
import 'package:jihu_gitlab_app/core/token_provider.dart';
import 'package:jihu_gitlab_app/core/user_provider.dart';
import 'package:jihu_gitlab_app/modules/issues/description_selector.dart';
import 'package:jihu_gitlab_app/modules/issues/issue_creation_page.dart';
import 'package:jihu_gitlab_app/modules/projects/group_details/group_and_project.dart';
import 'package:jihu_gitlab_app/modules/projects/group_details/subgroups/subgroup_list_model.dart';
import 'package:jihu_gitlab_app/modules/projects/groups/group_provider.dart';
import 'package:jihu_gitlab_app/modules/projects/groups/projects_groups_page.dart';
import 'package:jihu_gitlab_app/modules/projects/projects.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../core/net/http_request_test.mocks.dart';
import '../mocker/tester.dart';
import 'create_issue_in_sub_group_test.mocks.dart';
final client = MockHttpClient();
@GenerateNiceMocks([MockSpec<GroupProvider>()])
void main() {
var projectsModel = ProjectsModel();
var subgroupListModel = SubgroupListModel();
locator.registerSingleton(subgroupListModel);
locator.registerSingleton(projectsModel);
var provider = MockGroupProvider();
when(provider.loadFromLocal()).thenAnswer((_) => Future(() => [GroupAndProject(null, 118014, "highsoft", SubgroupItemType.group, "highsof-t", 0, false)]));
projectsModel.injectDataProviderForTesting(provider);
testWidgets('Should sub group page can create issue', (WidgetTester tester) async {
SharedPreferences.setMockInitialValues(<String, Object>{});
await LocalStorage.init();
await TokenProvider().reset(Tester.token());
UserProvider().reset(Tester.user());
HttpClient.setInstance(client);
when(client.get<List<dynamic>>('/api/v4/groups/1?all_available=true&page=1&per_page=50')).thenAnswer((_) => Future(() => Response.of<List<dynamic>>([])));
when(client.get<List<dynamic>>('/api/v4/groups/1/subgroups?all_available=true&page=1&per_page=50')).thenAnswer((_) => Future(() => Response.of<List<dynamic>>([])));
when(client.get<List<dynamic>>('/api/v4/groups/?top_level_only=true&page=1&per_page=50')).thenAnswer((_) => Future(() => Response.of<List<dynamic>>([])));
TokenProvider().reset(Tester.token());
UserProvider().reset(Tester.user());
when(client.get<Map<String, dynamic>>("/api/v4/user")).thenAnswer((_) => Future(() => Response.of<Map<String, dynamic>>({'id': 5882})));
HttpClient.setInstance(client);
await tester.pumpWidget(MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => TokenProvider()), ChangeNotifierProvider(create: (context) => UserProvider())],
child: MaterialApp(routes: {
SubgroupPage.routeName: (context) => const SubgroupPage(arguments: {"name": "name1", "groupId": 1, "relativePath": "highsof-t"})
}, home: const Scaffold(body: ProjectsGroupsPage()))));
// 用户点击进入sub group页面
await tester.pumpAndSettle();
await tester.tap(find.text(groups[0]['name']));
await tester.pumpAndSettle();
expect(find.byType(SubgroupPage), findsOneWidget);
// 用户创建issue,选择project (展示并加载project列表)
await tester.tap(find.byIcon(Icons.add_box_outlined));
await tester.pumpAndSettle(const Duration(seconds: 1));
expect(find.text('Select project'), findsOneWidget);
expect(find.text('Go Demo'), findsOneWidget);
expect(find.text('感知上次流水线的运行结果'), findsOneWidget);