119 lines
4.4 KiB
Dart
119 lines
4.4 KiB
Dart
import 'package:flutter/widgets.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:im_webview_app/config/app_config.dart';
|
|
import 'package:im_webview_app/main.dart';
|
|
|
|
void main() {
|
|
test('creates the WebView shell app widget', () {
|
|
expect(
|
|
const ImWebViewApp(shellBranding: ShellBranding.fallback),
|
|
isA<Widget>(),
|
|
);
|
|
});
|
|
|
|
test('loads the configured H5 root URL without shell URL params', () {
|
|
const logo = 'data:image/png;base64,abc+/=';
|
|
|
|
final uri = Uri.parse(
|
|
AppConfig.homeUrl(appName: 'Shell Test', appLogo: logo),
|
|
);
|
|
|
|
expect(uri.scheme, 'https');
|
|
expect(uri.host, 'h5-test.imharry.work');
|
|
expect(uri.path, '/');
|
|
expect(uri.queryParameters.containsKey('flutter_shell'), isFalse);
|
|
expect(uri.queryParameters.containsKey('shell_app_name'), isFalse);
|
|
expect(uri.queryParameters.containsKey('shell_app_logo'), isFalse);
|
|
expect(uri.queryParameters.containsKey('shell_cache_bust'), isFalse);
|
|
expect(uri.toString(), isNot(contains('%25')));
|
|
expect(Uri.splitQueryString(uri.fragment).containsKey('shell_app_logo'),
|
|
isFalse);
|
|
});
|
|
|
|
test('exposes configured H5 URLs as Flutter shell lines', () {
|
|
final lines = AppConfig.h5Lines;
|
|
|
|
expect(lines, isNotEmpty);
|
|
expect(lines.first.label, '线路1');
|
|
expect(lines.first.url, AppConfig.homeUrl(lineIndex: 0));
|
|
expect(Uri.parse(lines.first.url).host, 'h5-test.imharry.work');
|
|
});
|
|
|
|
test('falls back to the first H5 line for invalid line indexes', () {
|
|
expect(AppConfig.homeUrl(lineIndex: -1), AppConfig.h5Lines.first.url);
|
|
expect(AppConfig.homeUrl(lineIndex: 99), AppConfig.h5Lines.first.url);
|
|
});
|
|
|
|
test('matches runtime URLs back to their Flutter shell line', () {
|
|
final lineUrl = AppConfig.h5Lines.first.url;
|
|
|
|
expect(AppConfig.lineIndexForUrl('${lineUrl}login'), 0);
|
|
});
|
|
|
|
test('detects only H5 login routes for shell line switch display', () {
|
|
expect(
|
|
AppConfig.isLoginPageUrl('https://h5-test.imharry.work/login'), isTrue);
|
|
expect(AppConfig.isLoginPageUrl('https://h5-test.imharry.work/app/login'),
|
|
isTrue);
|
|
expect(AppConfig.isLoginPageUrl('https://h5-test.imharry.work/#/login'),
|
|
isTrue);
|
|
expect(AppConfig.isLoginPageUrl('https://h5-test.imharry.work/'), isFalse);
|
|
expect(AppConfig.isLoginPageUrl('https://h5-test.imharry.work/contact'),
|
|
isFalse);
|
|
expect(AppConfig.isLoginPageUrl('https://h5-test.imharry.work/getCode'),
|
|
isFalse);
|
|
});
|
|
|
|
test('refreshes an H5 route URL without adding branding to the URL', () {
|
|
final uri = Uri.parse(
|
|
AppConfig.withFreshShellParams(
|
|
'https://h5-test.imharry.work/login?from=runtime&shell_app_name=Old'
|
|
'&flutter_shell=1&shell_cache_bust=1#shell_app_logo=old',
|
|
),
|
|
);
|
|
|
|
expect(uri.path, '/login');
|
|
expect(uri.queryParameters['from'], 'runtime');
|
|
expect(uri.queryParameters.containsKey('flutter_shell'), isFalse);
|
|
expect(uri.queryParameters.containsKey('shell_app_name'), isFalse);
|
|
expect(uri.queryParameters.containsKey('shell_app_logo'), isFalse);
|
|
expect(uri.queryParameters.containsKey('shell_cache_bust'), isFalse);
|
|
expect(Uri.splitQueryString(uri.fragment).containsKey('shell_app_logo'),
|
|
isFalse);
|
|
});
|
|
|
|
test('keeps H5 runtime URLs untouched during shell routing', () {
|
|
final uri = Uri.parse(
|
|
AppConfig.canonicalizeMainFrameUrl(
|
|
'https://line-two.example/login?shell_app_name=Old'
|
|
'&flutter_shell=1#shell_app_logo=old',
|
|
),
|
|
);
|
|
|
|
expect(uri.host, 'line-two.example');
|
|
expect(uri.path, '/login');
|
|
expect(uri.queryParameters['shell_app_name'], 'Old');
|
|
expect(uri.queryParameters['flutter_shell'], '1');
|
|
expect(Uri.splitQueryString(uri.fragment).containsKey('shell_app_logo'),
|
|
isTrue);
|
|
});
|
|
|
|
test('does not rewrite H5 main-frame URLs for line switching', () {
|
|
final uri = Uri.parse(
|
|
AppConfig.canonicalizeMainFrameUrl(
|
|
'https://h5-test.imharry.work/login?from=runtime'
|
|
'&shell_app_name=Old#shell_app_logo=old',
|
|
),
|
|
);
|
|
|
|
expect(uri.scheme, 'https');
|
|
expect(uri.host, 'h5-test.imharry.work');
|
|
expect(uri.path, '/login');
|
|
expect(uri.queryParameters['from'], 'runtime');
|
|
expect(uri.queryParameters['shell_app_name'], 'Old');
|
|
expect(Uri.splitQueryString(uri.fragment).containsKey('shell_app_logo'),
|
|
isTrue);
|
|
expect(AppConfig.shouldRewriteMainFrameUrl(uri.toString()), isFalse);
|
|
});
|
|
}
|