Files
ReelShort/test/config/server_endpoint_test.dart
T
2026-10-31 00:02:53 +08:00

145 lines
4.6 KiB
Dart

// Author: fruit.com.cn
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart';
import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart';
import 'package:fruitshorts/core/config/app_config.dart';
import 'package:fruitshorts/core/config/dev_config.dart';
import 'package:fruitshorts/core/config/prod_config.dart';
import 'package:fruitshorts/core/config/server_endpoint.dart';
void main() {
setUp(() {
SharedPreferencesAsyncPlatform.instance =
InMemorySharedPreferencesAsync.empty();
AppConfig.clearRuntimeBaseUrl();
AppConfig.ready = Future<void>.value();
});
tearDown(() {
AppConfig.clearRuntimeBaseUrl();
AppConfig.ready = Future<void>.value();
});
test('should_normalize_http_urls_and_reject_invalid_values', () {
expect(
ServerEndpoint.normalize(' https://192.168.1.9:8081/// '),
'https://192.168.1.9:8081',
);
expect(
ServerEndpoint.normalize('http://example.test:8081/path/'),
'http://example.test:8081/path',
);
expect(ServerEndpoint.normalize('ftp://example.test'), isNull);
expect(ServerEndpoint.normalize('example.test:8081'), isNull);
expect(ServerEndpoint.normalize('http://'), isNull);
});
test('should_prefer_valid_stored_url_over_build_default', () {
expect(
ServerEndpoint.resolve(
stored: ' http://runtime.test:8081/ ',
fallback: 'http://default.test:8081',
),
'http://runtime.test:8081',
);
expect(
ServerEndpoint.resolve(
stored: 'ftp://invalid',
fallback: 'http://default.test:8081/',
),
'http://default.test:8081',
);
expect(
ServerEndpoint.resolve(
stored: null,
fallback: 'http://default.test:8081',
),
'http://default.test:8081',
);
});
test('should_pick_address_by_environment_switch', () {
// 跟随开关:开发分支为 true(开发地址),发版分支为 false(生产地址)。
final expected = AppConfig.useDevConfig
? DevConfig.baseUrl
: ProdConfig.baseUrl;
expect(AppConfig.baseUrl, expected);
expect(AppConfig.apiBaseUrl, expected);
expect(Uri.parse(AppConfig.baseUrl).port, 8081);
});
test('should_keep_dev_and_prod_addresses_in_separate_files', () {
final dev = Uri.parse(DevConfig.baseUrl);
final prod = Uri.parse(ProdConfig.baseUrl);
expect(dev.scheme, 'http');
expect(dev.host, isNot(prod.host));
expect(dev.port, 8081);
expect(dev.path, isEmpty);
expect(prod.scheme, 'http');
expect(prod.port, 8081);
expect(prod.path, isEmpty);
expect(DevConfig.baseUrl, isNot(ProdConfig.baseUrl));
});
test('should_prefer_runtime_override_over_environment_switch', () {
AppConfig.applyRuntimeBaseUrl('http://runtime.test:8081');
expect(AppConfig.apiBaseUrl, 'http://runtime.test:8081');
expect(
AppConfig.baseUrl,
AppConfig.useDevConfig ? DevConfig.baseUrl : ProdConfig.baseUrl,
);
});
test('should_append_host_to_relative_media_paths', () {
expect(AppConfig.mediaUrl(''), '');
expect(
AppConfig.mediaUrl('https://cdn.test/a.mp4'),
'https://cdn.test/a.mp4',
);
expect(
AppConfig.mediaUrl('/files/a.mp4'),
'${AppConfig.apiBaseUrl}/files/a.mp4',
);
});
test('should_apply_stored_url_only_when_debug_is_enabled', () async {
SharedPreferencesAsyncPlatform.instance =
InMemorySharedPreferencesAsync.withData({
ServerEndpoint.preferenceKey: ' http://192.168.31.187:8081/ ',
});
final original = AppConfig.apiBaseUrl;
await ServerEndpoint.load(debug: false);
expect(AppConfig.apiBaseUrl, original);
await ServerEndpoint.load(debug: true);
expect(AppConfig.apiBaseUrl, 'http://192.168.31.187:8081');
});
test('should_save_normalized_url_and_clear_override', () async {
expect(await ServerEndpoint.save('ftp://invalid'), isFalse);
expect(
await SharedPreferencesAsync().getString(ServerEndpoint.preferenceKey),
isNull,
);
expect(await ServerEndpoint.save(' http://192.168.31.187:8081/ '), isTrue);
expect(
await SharedPreferencesAsync().getString(ServerEndpoint.preferenceKey),
'http://192.168.31.187:8081',
);
expect(AppConfig.apiBaseUrl, 'http://192.168.31.187:8081');
await ServerEndpoint.clear();
expect(
await SharedPreferencesAsync().getString(ServerEndpoint.preferenceKey),
isNull,
);
});
}