Skip to content
代码片段 群组 项目
从无法访问的项目中派生。
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);