SHA256
135 lines
3.6 KiB
Dart
135 lines
3.6 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import 'package:ttx_page_admin/main.dart';
|
|
|
|
Future<HttpServer> _startMockBackend() async {
|
|
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
|
|
|
|
server.listen((request) async {
|
|
final path = request.uri.pathSegments.join('/');
|
|
|
|
Future<void> writeJson(Map<String, Object?> body) async {
|
|
request.response.headers.contentType = ContentType.json;
|
|
request.response.write(jsonEncode(body));
|
|
await request.response.close();
|
|
}
|
|
|
|
if (request.method == 'GET' && path == 'rest/auth/loginPageConfig') {
|
|
await writeJson({
|
|
'code': '0',
|
|
'data': {
|
|
'server': 'http://127.0.0.1:${server.port}/',
|
|
'db': 'studio',
|
|
'appName': 'TTX Studio',
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (request.method == 'POST' && path == 'rest/auth/login') {
|
|
await writeJson({
|
|
'code': '0',
|
|
'message': 'ok',
|
|
'leftDays': 30,
|
|
'session': {
|
|
'user': 'admin',
|
|
'db': 'studio',
|
|
'tk': 'token-1',
|
|
'client': 'client-1',
|
|
'locale': 'zh-CN',
|
|
'timezone': 'Asia/Shanghai',
|
|
'portal': 'studio',
|
|
},
|
|
'appConfig': {'appName': 'TTX Studio'},
|
|
'systemConfig': {'showDashboard': true},
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (request.method == 'GET' && path == 'user/getUser') {
|
|
await writeJson({
|
|
'code': '0',
|
|
'data': {
|
|
'code': 'admin',
|
|
'name': '管理员',
|
|
'isDeveloper': true,
|
|
'portal': 'studio',
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (request.method == 'POST' && path == 'cbt/org/byUser') {
|
|
await writeJson({
|
|
'code': '0',
|
|
'data': {
|
|
'code': 'org-1',
|
|
'name': '测试组织',
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (request.method == 'POST' && path == 'studio/access/permissions') {
|
|
await writeJson({
|
|
'code': '0',
|
|
'data': [
|
|
{'id': 'model-center'},
|
|
{'id': 'json-center'},
|
|
{'id': 'history'},
|
|
{'id': 'manage'},
|
|
{'id': 'ModelSync'},
|
|
{'id': 'DataRepair'},
|
|
{'id': 'SqlTemplate'},
|
|
{'id': 'AdvancedSqlTemplate'},
|
|
{'id': 'PortalMaintain'},
|
|
],
|
|
});
|
|
return;
|
|
}
|
|
|
|
if (request.method == 'GET' && path == 'rest/auth/logout') {
|
|
await writeJson({'code': '0'});
|
|
return;
|
|
}
|
|
|
|
request.response.statusCode = HttpStatus.notFound;
|
|
await request.response.close();
|
|
});
|
|
|
|
return server;
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('Studio desktop login opens workspace', (WidgetTester tester) async {
|
|
final server = await _startMockBackend();
|
|
addTearDown(() async {
|
|
await server.close(force: true);
|
|
});
|
|
|
|
await tester.binding.setSurfaceSize(const Size(1440, 1200));
|
|
addTearDown(() async {
|
|
await tester.binding.setSurfaceSize(null);
|
|
});
|
|
|
|
await tester.pumpWidget(const StudioApp());
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.enterText(find.byType(TextField).at(0), 'http://127.0.0.1:${server.port}/');
|
|
await tester.enterText(find.byType(TextField).at(1), 'studio');
|
|
await tester.enterText(find.byType(TextField).at(2), 'admin');
|
|
await tester.enterText(find.byType(TextField).at(3), '123456');
|
|
await tester.tap(find.text('进入 Studio'));
|
|
await tester.pump();
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.byType(StudioShell), findsOneWidget);
|
|
expect(find.byType(StudioWorkspaceView), findsOneWidget);
|
|
expect(find.text('测试组织'), findsWidgets);
|
|
});
|
|
}
|