import 'package:eaimar/modules/login/models/login_methods.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { Set ios({bool guest = true}) => resolveLoginMethods(isIOS: true, envChannel: 'CHINA_XIAOMI', guestVisible: guest); Set google({bool guest = true}) => resolveLoginMethods( isIOS: false, envChannel: 'GLOBAL_GOOGLE', guestVisible: guest); Set domestic(String ch, {bool guest = true}) => resolveLoginMethods(isIOS: false, envChannel: ch, guestVisible: guest); test('苹果包:只有苹果登录 + 游客', () { expect(ios(), {LoginMethod.apple, LoginMethod.guest}); }); test('苹果包不受 .env Channel 影响(iOS 不跑 build_channels.sh,值还是国内渠道)', () { expect( resolveLoginMethods( isIOS: true, envChannel: 'GLOBAL_GOOGLE', guestVisible: false), {LoginMethod.apple}, ); }); test('安卓国内包:只有微信登录 + 游客', () { for (final ch in ['CHINA_XIAOMI', 'CHINA_HUAWEI', 'CHINA_HONOR', 'OFFICIAL']) { expect(domestic(ch), {LoginMethod.wechat, LoginMethod.guest}, reason: 'channel=$ch'); } }); test('谷歌包:只有邮箱(contact)登录 + 游客,没有微信也没有苹果', () { expect(google(), {LoginMethod.contact, LoginMethod.guest}); }); test('Channel 认不出时按国内包处理(失败方向:宁可留微信,不要露出邮箱登录)', () { expect(domestic(''), {LoginMethod.wechat, LoginMethod.guest}); expect(domestic('xiaomi'), {LoginMethod.wechat, LoginMethod.guest}); }); test('Channel 的大小写与空白不影响判定', () { expect(domestic(' global_google ', guest: false), {LoginMethod.contact}); }); test('游客开关由服务端给,关掉时每个包各自只剩一个入口', () { expect(ios(guest: false), {LoginMethod.apple}); expect(google(guest: false), {LoginMethod.contact}); expect(domestic('CHINA_VIVO', guest: false), {LoginMethod.wechat}); }); test('任何组合下都至少有一个登录入口,且三种包互不重叠', () { for (final m in [ios(), google(), domestic('CHINA_OPPO')]) { expect(m.where((e) => e != LoginMethod.guest).length, 1); } }); }