Skip to content
代码片段 群组 项目
提交 5d121570 编辑于 作者: Raymond Liao's avatar Raymond Liao :nerd: 提交者: Neil Wang
浏览文件

feat: #633 Should user tap Merge Request to-do item to navigate to Merge Request Details page

上级 b365f76d
No related branches found
No related tags found
无相关合并请求
...@@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; ...@@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:jihu_gitlab_app/core/layout/adaptive.dart'; import 'package:jihu_gitlab_app/core/layout/adaptive.dart';
import 'package:jihu_gitlab_app/core/load_state.dart'; import 'package:jihu_gitlab_app/core/load_state.dart';
import 'package:jihu_gitlab_app/core/uri_launcher.dart';
import 'package:jihu_gitlab_app/core/user_provider.dart'; import 'package:jihu_gitlab_app/core/user_provider.dart';
import 'package:jihu_gitlab_app/core/widgets/alerter.dart'; import 'package:jihu_gitlab_app/core/widgets/alerter.dart';
import 'package:jihu_gitlab_app/core/widgets/avatar/avatar.dart'; import 'package:jihu_gitlab_app/core/widgets/avatar/avatar.dart';
...@@ -18,7 +17,6 @@ import 'package:jihu_gitlab_app/modules/mr/merge_request_page.dart'; ...@@ -18,7 +17,6 @@ import 'package:jihu_gitlab_app/modules/mr/merge_request_page.dart';
import 'package:jihu_gitlab_app/modules/to_dos/to_do.dart'; import 'package:jihu_gitlab_app/modules/to_dos/to_do.dart';
import 'package:jihu_gitlab_app/modules/to_dos/to_dos_view_model.dart'; import 'package:jihu_gitlab_app/modules/to_dos/to_dos_view_model.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher_string.dart';
typedef OnItemTapped = void Function(ToDo todo); typedef OnItemTapped = void Function(ToDo todo);
...@@ -110,7 +108,6 @@ class ToDosViewState extends State<ToDosView> with AutomaticKeepAliveClientMixin ...@@ -110,7 +108,6 @@ class ToDosViewState extends State<ToDosView> with AutomaticKeepAliveClientMixin
return InkWell( return InkWell(
key: const Key('ToDosViewItem'), key: const Key('ToDosViewItem'),
onTap: () => onItemTaped(todoItem, index), onTap: () => onItemTaped(todoItem, index),
onLongPress: () => onItemLongPress(todoItem, index),
child: Container( child: Container(
constraints: const BoxConstraints(minHeight: 50), constraints: const BoxConstraints(minHeight: 50),
decoration: BoxDecoration( decoration: BoxDecoration(
...@@ -223,8 +220,10 @@ class ToDosViewState extends State<ToDosView> with AutomaticKeepAliveClientMixin ...@@ -223,8 +220,10 @@ class ToDosViewState extends State<ToDosView> with AutomaticKeepAliveClientMixin
void onItemTaped(ToDo todo, int index) { void onItemTaped(ToDo todo, int index) {
setState(() => _model.onItemSelected(todo.isNotIssue ? null : todo)); setState(() => _model.onItemSelected(todo.isNotIssue ? null : todo));
if (todo.isNotIssue) { if (todo.targetType == 'MergeRequest') {
_openUrlForItem(todo); Navigator.of(context).pushNamed(MergeRequestPage.routeName, arguments: todo.toMergeRequestParams).then((value) {
if (!isDesktopLayout(context) && ToDoState.pending == _model.todoState) showConfirmToMarkTodoItemDoneAlert(todo);
});
return; return;
} }
if (isDesktopLayout(context)) { if (isDesktopLayout(context)) {
...@@ -240,34 +239,6 @@ class ToDosViewState extends State<ToDosView> with AutomaticKeepAliveClientMixin ...@@ -240,34 +239,6 @@ class ToDosViewState extends State<ToDosView> with AutomaticKeepAliveClientMixin
} }
} }
void onItemLongPress(ToDo todo, int index) {
setState(() => _model.onItemSelected(todo.isNotIssue ? null : todo));
if (!todo.isNotIssue) return;
Navigator.of(context).pushNamed(MergeRequestPage.routeName, arguments: todo.toMergeRequestParams).then((value) {
if (!isDesktopLayout(context) && ToDoState.pending == _model.todoState) showConfirmToMarkTodoItemDoneAlert(todo);
});
}
_openUrlForItem(ToDo todo) {
Alerter.showCupertinoAlert(context,
content: JiHuLocalizations.dictionary().openBrowserAlertContent,
okTitle: JiHuLocalizations.dictionary().open,
onCancelPressed: () => Navigator.pop(context),
onOkPressed: () async {
var uri = Uri.parse(todo.targetUrl);
var can = await UriLauncher.instance().canLaunch(uri);
var result = await UriLauncher.instance().launch(uri, mode: LaunchMode.externalApplication);
setState(() {
Navigator.pop(context);
});
if (!(can && result)) {
Toast.show(JiHuLocalizations.dictionary().openUrlFailed(todo.targetUrl));
return;
}
showConfirmToMarkTodoItemDoneAlert(todo);
});
}
@override @override
bool get wantKeepAlive => true; bool get wantKeepAlive => true;
} }
...@@ -21,7 +21,7 @@ Future<void> mergeRequestTest(WidgetTester tester, String targetString, bool isD ...@@ -21,7 +21,7 @@ Future<void> mergeRequestTest(WidgetTester tester, String targetString, bool isD
when(client.get('/api/v4/projects/59893')).thenAnswer((_) => Future(() => Response.of<Map>({"path_with_namespace": "ultimate-plan/jihu-gitlab-app/jihu-gitlab-app"}))); when(client.get('/api/v4/projects/59893')).thenAnswer((_) => Future(() => Response.of<Map>({"path_with_namespace": "ultimate-plan/jihu-gitlab-app/jihu-gitlab-app"})));
when(client.post('/api/graphql', getMergeRequestDetailsGraphQLRequestBody('ultimate-plan/jihu-gitlab-app/jihu-gitlab-app', 84))) when(client.post('/api/graphql', getMergeRequestDetailsGraphQLRequestBody('ultimate-plan/jihu-gitlab-app/jihu-gitlab-app', 84)))
.thenAnswer((_) => Future(() => Response.of<Map<String, dynamic>>(isDraft ? mrGraphQLDraftResponse : mrGraphQLResponse))); .thenAnswer((_) => Future(() => Response.of<Map<String, dynamic>>(isDraft ? mrGraphQLDraftResponse : mrGraphQLResponse)));
await tester.longPress(find.text(targetString)); await tester.tap(find.text(targetString));
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
await tester.pump(const Duration(seconds: 1)); await tester.pump(const Duration(seconds: 1));
} }
......
...@@ -8,7 +8,6 @@ import 'package:jihu_gitlab_app/core/global_keys.dart'; ...@@ -8,7 +8,6 @@ import 'package:jihu_gitlab_app/core/global_keys.dart';
import 'package:jihu_gitlab_app/core/local_storage.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/http_client.dart';
import 'package:jihu_gitlab_app/core/net/response.dart' as r; import 'package:jihu_gitlab_app/core/net/response.dart' as r;
import 'package:jihu_gitlab_app/core/uri_launcher.dart'; import 'package:jihu_gitlab_app/core/uri_launcher.dart';
import 'package:jihu_gitlab_app/core/user_provider.dart'; import 'package:jihu_gitlab_app/core/user_provider.dart';
import 'package:jihu_gitlab_app/core/widgets/home/home_drawer.dart'; import 'package:jihu_gitlab_app/core/widgets/home/home_drawer.dart';
...@@ -274,18 +273,18 @@ void main() { ...@@ -274,18 +273,18 @@ void main() {
UserProvider().reset(Tester.user()); UserProvider().reset(Tester.user());
when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData))); when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData)));
when(client.post<dynamic>("/api/v4/todos/143074/mark_as_done", {})).thenAnswer((_) => Future(() => r.Response.of<dynamic>(markAsDoneResponse))); when(client.post<dynamic>("/api/v4/todos/143074/mark_as_done", {})).thenAnswer((_) => Future(() => r.Response.of<dynamic>(markAsDoneResponse)));
when(client.get<Map<String, dynamic>>("/api/v4/projects/59893/merge_requests/371/approvals")).thenAnswer((_) => Future(() => r.Response.of<Map<String, dynamic>>(approvalResponse)));
when(client.get('/api/v4/projects/59893')).thenAnswer((_) => Future(() => r.Response.of<Map>({"path_with_namespace": "ultimate-plan/jihu-gitlab-app/jihu-gitlab-app"})));
when(client.post('/api/graphql', getMergeRequestDetailsGraphQLRequestBody('ultimate-plan/jihu-gitlab-app/jihu-gitlab-app', 371)))
.thenAnswer((_) => Future(() => r.Response.of<Map<String, dynamic>>(mrRebaseGraphQLResponse)));
HttpClient.setInstance(client); HttpClient.setInstance(client);
var uri = Uri.parse('https://jihulab.com/ultimate-plan/jihu-gitlab-app/jihu-gitlab-app/-/merge_requests/84'); var parameters = {'projectId': 59893, 'projectName': "demo", 'mergeRequestIid': 371, 'fullPath': 'ultimate-plan/jihu-gitlab-app/jihu-gitlab-app'};
when(mockUriLauncher.canLaunch(uri)).thenAnswer((realInvocation) => Future(() => true));
when(mockUriLauncher.launch(uri, mode: LaunchMode.externalApplication)).thenAnswer((realInvocation) => Future(() => true));
UriLauncher.instance().injectInstanceForTesting(mockUriLauncher);
await tester.pumpWidget(MultiProvider( await tester.pumpWidget(MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => UserProvider()), ChangeNotifierProvider(create: (context) => LocaleProvider())], providers: [ChangeNotifierProvider(create: (context) => UserProvider())],
child: const MaterialApp( child: MaterialApp(
home: Scaffold(body: ToDosPage()), routes: {MergeRequestPage.routeName: (context) => MergeRequestPage(arguments: parameters)},
localizationsDelegates: [GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate], home: const Scaffold(body: ToDosPage()),
))); )));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
...@@ -294,15 +293,11 @@ void main() { ...@@ -294,15 +293,11 @@ void main() {
await tester.tap(find.text('merge request item')); await tester.tap(find.text('merge request item'));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byType(CupertinoAlertDialog), findsOneWidget); expect(find.byType(MergeRequestPage), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().openBrowserAlertContent), findsOneWidget); expect(find.text('demo #371'), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().open), findsOneWidget); expect(find.text('Draft: Resolve "Feature: 开发人员 Rebase MR"'), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().cancel), findsOneWidget); await tester.tap(find.byType(BackButton));
await tester.tap(find.text(JiHuLocalizations.dictionary().open));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
verify(mockUriLauncher.canLaunch(uri)).called(1);
verify(mockUriLauncher.launch(uri, mode: LaunchMode.externalApplication)).called(1);
expect(find.byType(CupertinoAlertDialog), findsOneWidget); expect(find.byType(CupertinoAlertDialog), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().markTodoAsDoneTitle), findsOneWidget); expect(find.text(JiHuLocalizations.dictionary().markTodoAsDoneTitle), findsOneWidget);
...@@ -320,38 +315,7 @@ void main() { ...@@ -320,38 +315,7 @@ void main() {
UserProvider().fullResetToken(); UserProvider().fullResetToken();
}); });
testWidgets('Should nothing happened when long press others in todo view', (WidgetTester tester) async { testWidgets('Should enter merge request view when tap mr in todo view', (WidgetTester tester) async {
await setUpMobileBinding(tester);
UserProvider().resetToken(Tester.token());
UserProvider().reset(Tester.user());
when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData)));
when(client.post<dynamic>("/api/v4/todos/143074/mark_as_done", {})).thenAnswer((_) => Future(() => r.Response.of<dynamic>(markAsDoneResponse)));
HttpClient.setInstance(client);
var uri = Uri.parse('https://jihulab.com/ultimate-plan/jihu-gitlab-app/jihu-gitlab-app/-/merge_requests/84');
when(mockUriLauncher.canLaunch(uri)).thenAnswer((realInvocation) => Future(() => true));
when(mockUriLauncher.launch(uri, mode: LaunchMode.externalApplication)).thenAnswer((realInvocation) => Future(() => true));
UriLauncher.instance().injectInstanceForTesting(mockUriLauncher);
await tester.pumpWidget(MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => UserProvider()), ChangeNotifierProvider(create: (context) => LocaleProvider())],
child: const MaterialApp(
home: Scaffold(body: ToDosPage()),
localizationsDelegates: [GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate],
)));
await tester.pumpAndSettle();
expect(find.text("To Do"), findsOneWidget);
expect(find.text("回复评论"), findsOneWidget);
await tester.longPress(find.text('回复评论'));
await tester.pumpAndSettle();
expect(find.text("To Do"), findsOneWidget);
expect(find.text("回复评论"), findsOneWidget);
UriLauncher.instance().fullReset();
UserProvider().fullReset();
UserProvider().fullResetToken();
});
testWidgets('Should enter merge request view when long press mr in todo view', (WidgetTester tester) async {
await setUpMobileBinding(tester); await setUpMobileBinding(tester);
UserProvider().resetToken(Tester.token()); UserProvider().resetToken(Tester.token());
UserProvider().reset(Tester.user()); UserProvider().reset(Tester.user());
...@@ -382,7 +346,7 @@ void main() { ...@@ -382,7 +346,7 @@ void main() {
expect(find.text("To Do"), findsOneWidget); expect(find.text("To Do"), findsOneWidget);
expect(find.text("merge request item"), findsOneWidget); expect(find.text("merge request item"), findsOneWidget);
await tester.longPress(find.text('merge request item')); await tester.tap(find.text('merge request item'));
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
await tester.pump(const Duration(seconds: 1)); await tester.pump(const Duration(seconds: 1));
} }
...@@ -392,92 +356,45 @@ void main() { ...@@ -392,92 +356,45 @@ void main() {
UserProvider().fullResetToken(); UserProvider().fullResetToken();
}); });
testWidgets('Should display data change nothing when cancel open url for the Merge Request message', (WidgetTester tester) async { testWidgets('Should display data change nothing when cancel mark item as done for the Merge Request message', (WidgetTester tester) async {
await setUpMobileBinding(tester); await setUpMobileBinding(tester);
UserProvider().resetToken(Tester.token()); UserProvider().resetToken(Tester.token());
UserProvider().reset(Tester.user()); UserProvider().reset(Tester.user());
when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData))); when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData)));
when(client.post<dynamic>("/api/v4/todos/143074/mark_as_done", {})).thenAnswer((_) => Future(() => r.Response.of<dynamic>(markAsDoneResponse)));
when(client.get<Map<String, dynamic>>("/api/v4/projects/59893/merge_requests/371/approvals")).thenAnswer((_) => Future(() => r.Response.of<Map<String, dynamic>>(approvalResponse)));
when(client.get('/api/v4/projects/59893')).thenAnswer((_) => Future(() => r.Response.of<Map>({"path_with_namespace": "ultimate-plan/jihu-gitlab-app/jihu-gitlab-app"})));
when(client.post('/api/graphql', getMergeRequestDetailsGraphQLRequestBody('ultimate-plan/jihu-gitlab-app/jihu-gitlab-app', 371)))
.thenAnswer((_) => Future(() => r.Response.of<Map<String, dynamic>>(mrRebaseGraphQLResponse)));
HttpClient.setInstance(client); HttpClient.setInstance(client);
var parameters = {'projectId': 59893, 'projectName': "demo", 'mergeRequestIid': 371, 'fullPath': 'ultimate-plan/jihu-gitlab-app/jihu-gitlab-app'};
await tester.pumpWidget(MultiProvider( await tester.pumpWidget(MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => UserProvider()), ChangeNotifierProvider(create: (context) => LocaleProvider())], providers: [ChangeNotifierProvider(create: (context) => UserProvider())],
child: const MaterialApp( child: MaterialApp(
home: Scaffold(body: ToDosPage()), routes: {MergeRequestPage.routeName: (context) => MergeRequestPage(arguments: parameters)},
localizationsDelegates: [GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate], home: const Scaffold(body: ToDosPage()),
))); )));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
await tester.tap(find.text('merge request item')); expect(find.text("To Do"), findsOneWidget);
await tester.pumpAndSettle(); expect(find.text("merge request item"), findsOneWidget);
await tester.tap(find.text(JiHuLocalizations.dictionary().cancel));
await tester.pumpAndSettle();
expect(find.byType(CupertinoAlertDialog), findsNothing);
UserProvider().fullReset();
UserProvider().fullResetToken();
});
testWidgets('Should display open url fail notice when open url failed for the Merge Request message', (WidgetTester tester) async {
await setUpMobileBinding(tester);
UserProvider().resetToken(Tester.token());
UserProvider().reset(Tester.user());
when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData)));
HttpClient.setInstance(client);
var uri = Uri.parse('https://jihulab.com/ultimate-plan/jihu-gitlab-app/jihu-gitlab-app/-/merge_requests/84');
when(mockUriLauncher.canLaunch(uri)).thenAnswer((realInvocation) => Future(() => false));
when(mockUriLauncher.launch(uri, mode: LaunchMode.externalApplication)).thenAnswer((realInvocation) => Future(() => false));
UriLauncher.instance().injectInstanceForTesting(mockUriLauncher);
await tester.pumpWidget(MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => UserProvider()), ChangeNotifierProvider(create: (context) => LocaleProvider())],
child: const MaterialApp(
home: Scaffold(body: ToDosPage()),
localizationsDelegates: [GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate],
)));
await tester.pumpAndSettle();
await tester.tap(find.text('merge request item')); await tester.tap(find.text('merge request item'));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
await tester.tap(find.text(JiHuLocalizations.dictionary().open)); expect(find.byType(MergeRequestPage), findsOneWidget);
expect(find.text('demo #371'), findsOneWidget);
expect(find.text('Draft: Resolve "Feature: 开发人员 Rebase MR"'), findsOneWidget);
await tester.tap(find.byType(BackButton));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
verify(mockUriLauncher.canLaunch(uri)).called(1);
verify(mockUriLauncher.launch(uri, mode: LaunchMode.externalApplication)).called(1);
expect(find.byType(CupertinoAlertDialog), findsNothing);
UriLauncher.instance().fullReset();
UserProvider().fullReset();
UserProvider().fullResetToken();
});
testWidgets('Should display data change nothing when cancel mark item as done for the Merge Request message', (WidgetTester tester) async {
await setUpMobileBinding(tester);
UserProvider().resetToken(Tester.token()); expect(find.byType(CupertinoAlertDialog), findsOneWidget);
UserProvider().reset(Tester.user()); expect(find.text(JiHuLocalizations.dictionary().markTodoAsDoneTitle), findsOneWidget);
when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData))); expect(find.text(JiHuLocalizations.dictionary().markTodoAsDoneContent), findsOneWidget);
HttpClient.setInstance(client); expect(find.text(JiHuLocalizations.dictionary().cancel), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().yes), findsOneWidget);
var uri = Uri.parse('https://jihulab.com/ultimate-plan/jihu-gitlab-app/jihu-gitlab-app/-/merge_requests/84');
when(mockUriLauncher.canLaunch(uri)).thenAnswer((realInvocation) => Future(() => true));
when(mockUriLauncher.launch(uri, mode: LaunchMode.externalApplication)).thenAnswer((realInvocation) => Future(() => true));
UriLauncher.instance().injectInstanceForTesting(mockUriLauncher);
await tester.pumpWidget(MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => UserProvider()), ChangeNotifierProvider(create: (context) => LocaleProvider())],
child: const MaterialApp(
home: Scaffold(body: ToDosPage()),
localizationsDelegates: [GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate],
)));
await tester.pumpAndSettle();
await tester.tap(find.text('merge request item'));
await tester.pumpAndSettle();
await tester.tap(find.text(JiHuLocalizations.dictionary().open));
await tester.pumpAndSettle();
await tester.tap(find.text(JiHuLocalizations.dictionary().cancel)); await tester.tap(find.text(JiHuLocalizations.dictionary().cancel));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byType(CupertinoAlertDialog), findsNothing); expect(find.byType(CupertinoAlertDialog), findsNothing);
...@@ -495,18 +412,18 @@ void main() { ...@@ -495,18 +412,18 @@ void main() {
UserProvider().reset(Tester.user()); UserProvider().reset(Tester.user());
when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData))); when(client.get<List<dynamic>>("/api/v4/todos?page=1&per_page=20&state=pending")).thenAnswer((_) => Future(() => r.Response.of<List<dynamic>>(todoPendingResponseData)));
when(client.post<dynamic>("/api/v4/todos/143074/mark_as_done", {})).thenThrow(Exception()); when(client.post<dynamic>("/api/v4/todos/143074/mark_as_done", {})).thenThrow(Exception());
when(client.get<Map<String, dynamic>>("/api/v4/projects/59893/merge_requests/371/approvals")).thenAnswer((_) => Future(() => r.Response.of<Map<String, dynamic>>(approvalResponse)));
when(client.get('/api/v4/projects/59893')).thenAnswer((_) => Future(() => r.Response.of<Map>({"path_with_namespace": "ultimate-plan/jihu-gitlab-app/jihu-gitlab-app"})));
when(client.post('/api/graphql', getMergeRequestDetailsGraphQLRequestBody('ultimate-plan/jihu-gitlab-app/jihu-gitlab-app', 371)))
.thenAnswer((_) => Future(() => r.Response.of<Map<String, dynamic>>(mrRebaseGraphQLResponse)));
HttpClient.setInstance(client); HttpClient.setInstance(client);
var uri = Uri.parse('https://jihulab.com/ultimate-plan/jihu-gitlab-app/jihu-gitlab-app/-/merge_requests/84'); var parameters = {'projectId': 59893, 'projectName': "demo", 'mergeRequestIid': 371, 'fullPath': 'ultimate-plan/jihu-gitlab-app/jihu-gitlab-app'};
when(mockUriLauncher.canLaunch(uri)).thenAnswer((realInvocation) => Future(() => true));
when(mockUriLauncher.launch(uri, mode: LaunchMode.externalApplication)).thenAnswer((realInvocation) => Future(() => true));
UriLauncher.instance().injectInstanceForTesting(mockUriLauncher);
await tester.pumpWidget(MultiProvider( await tester.pumpWidget(MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => UserProvider()), ChangeNotifierProvider(create: (context) => LocaleProvider())], providers: [ChangeNotifierProvider(create: (context) => UserProvider())],
child: const MaterialApp( child: MaterialApp(
home: Scaffold(body: ToDosPage()), routes: {MergeRequestPage.routeName: (context) => MergeRequestPage(arguments: parameters)},
localizationsDelegates: [GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate], home: const Scaffold(body: ToDosPage()),
))); )));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
...@@ -515,12 +432,10 @@ void main() { ...@@ -515,12 +432,10 @@ void main() {
await tester.tap(find.text('merge request item')); await tester.tap(find.text('merge request item'));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byType(CupertinoAlertDialog), findsOneWidget); expect(find.byType(MergeRequestPage), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().openBrowserAlertContent), findsOneWidget); expect(find.text('demo #371'), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().open), findsOneWidget); expect(find.text('Draft: Resolve "Feature: 开发人员 Rebase MR"'), findsOneWidget);
expect(find.text(JiHuLocalizations.dictionary().cancel), findsOneWidget); await tester.tap(find.byType(BackButton));
await tester.tap(find.text(JiHuLocalizations.dictionary().open));
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byType(CupertinoAlertDialog), findsOneWidget); expect(find.byType(CupertinoAlertDialog), findsOneWidget);
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册