Skip to content
代码片段 群组 项目
从无法访问的项目中派生。
issue_creation_page_test.dart 9.21 KiB
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.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/routers.dart';
import 'package:jihu_gitlab_app/core/token_provider.dart';
import 'package:jihu_gitlab_app/core/user_provider.dart';
import 'package:jihu_gitlab_app/core/widgets/markdown_input_box.dart';
import 'package:jihu_gitlab_app/core/widgets/unauthorized_view.dart';
import 'package:jihu_gitlab_app/generated/current_locale.dart';
import 'package:jihu_gitlab_app/generated/l10n.dart';
import 'package:jihu_gitlab_app/modules/issues/issue_creation_page.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 '../../test_data/members.dart';
import 'issue_creation_page_test.mocks.dart';

final client = MockHttpClient();

@GenerateNiceMocks([MockSpec<NavigatorObserver>()])
void main() {
  setUp(() async {
    SharedPreferences.setMockInitialValues(<String, Object>{});
    await LocalStorage.init();
    await TokenProvider().restore();
    await UserProvider().restore();
    S.load(CurrentLocale().value);
  });

  testWidgets('Should view create issue page when there is no auth', (WidgetTester tester) async {
    await tester.pumpWidget(MultiProvider(
      providers: [ChangeNotifierProvider(create: (context) => TokenProvider()), ChangeNotifierProvider(create: (context) => UserProvider())],
      child: const MaterialApp(
        home: Scaffold(
          body: IssueCreationPage(projectId: 10000, from: 'group', groupId: 0),
        ),
      ),
    ));
    await tester.pumpAndSettle();
    expect(find.byType(UnauthorizedView), findsOneWidget);
  });

  testWidgets('Should create an issue', (WidgetTester tester) async {
    TokenProvider().reset(Tester.token());
    UserProvider().reset(Tester.user());
    when(client.get("/api/v4/groups/0/iterations")).thenAnswer((realInvocation) => Future(() => Response.of([])));
    HttpClient.setInstance(client);
    await tester.pumpWidget(MultiProvider(
      providers: [ChangeNotifierProvider(create: (context) => TokenProvider()), ChangeNotifierProvider(create: (context) => UserProvider())],
      child: const MaterialApp(
        home: Scaffold(
          body: IssueCreationPage(
            projectId: 10000,
            from: 'group',
            groupId: 0,
          ),
        ),
      ),
    ));
    await tester.pumpAndSettle();
    expect(find.text('Create'), findsOneWidget);
    expect(find.text('Title (required)'), findsOneWidget);
    expect(find.text('Write a issue title'), findsOneWidget);
    expect(find.byType(MarkdownInputBox), findsOneWidget);