Skip to content

Commit fead234

Browse files
appBundleId : Made appId fetch live via packageInfo during APNs token registration
To fetch live value of appBundleId through Zulip Binding class, we made use of already establised PackageInfo class by introducing new parameter because using this version directly(final appBundleId = (await PackageInfo.fromPlatform()).packageName;) would break tests as it's directly calling a plugin. Fixes zulip#407 The reason for making packageInfoResult nullable in Zulip Binding class was to test the case where appId fallbacks to default appBundleId (com.zulip.flutter)
1 parent 28b3536 commit fead234

File tree

5 files changed

+25
-7
lines changed

5 files changed

+25
-7
lines changed

lib/model/binding.dart

+3
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,12 @@ class LinuxDeviceInfo implements BaseDeviceInfo {
303303
class PackageInfo {
304304
final String version;
305305
final String buildNumber;
306+
final String packageName;
306307

307308
const PackageInfo({
308309
required this.version,
309310
required this.buildNumber,
311+
required this.packageName,
310312
});
311313
}
312314

@@ -411,6 +413,7 @@ class LiveZulipBinding extends ZulipBinding {
411413
_syncPackageInfo = PackageInfo(
412414
version: info.version,
413415
buildNumber: info.buildNumber,
416+
packageName: info.packageName,
414417
);
415418
} catch (e, st) {
416419
assert(debugLog('Failed to prefetch package info: $e\n$st')); // TODO(log)

lib/notifications/receive.dart

+1-2
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,7 @@ class NotificationService {
149149
await addFcmToken(connection, token: token);
150150

151151
case TargetPlatform.iOS:
152-
const appBundleId = 'com.zulip.flutter'; // TODO(#407) find actual value live
153-
await addApnsToken(connection, token: token, appid: appBundleId);
152+
await addApnsToken(connection, token: token, appid: (await ZulipBinding.instance.packageInfo)?.packageName?? 'com.zulip.flutter');
154153

155154
case TargetPlatform.linux:
156155
case TargetPlatform.macOS:

test/api/core_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ void main() {
460460
});
461461
}
462462

463-
const packageInfo = PackageInfo(version: '0.0.1', buildNumber: '1');
463+
const packageInfo = PackageInfo(version: '0.0.1', buildNumber: '1', packageName: 'com.zulip.flutter.test');
464464

465465
const testCases = [
466466
('ZulipFlutter/0.0.1+1 (Android 14)', AndroidDeviceInfo(release: '14', sdkInt: 34), ),

test/model/binding.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ class TestZulipBinding extends ZulipBinding {
228228
BaseDeviceInfo? get syncDeviceInfo => deviceInfoResult;
229229

230230
/// The value that `ZulipBinding.instance.packageInfo` should return.
231-
PackageInfo packageInfoResult = _defaultPackageInfo;
232-
static const _defaultPackageInfo = PackageInfo(version: '0.0.1', buildNumber: '1');
231+
PackageInfo? packageInfoResult = _defaultPackageInfo;
232+
static const _defaultPackageInfo = PackageInfo(version: '0.0.1', buildNumber: '1', packageName: 'com.zulip.flutter.test');
233233

234234
void _resetPackageInfo() {
235235
packageInfoResult = _defaultPackageInfo;

test/model/store_test.dart

+18-2
Original file line numberDiff line numberDiff line change
@@ -1032,7 +1032,7 @@ void main() {
10321032
if (defaultTargetPlatform == TargetPlatform.android) {
10331033
checkLastRequestFcm(token: '012abc');
10341034
} else {
1035-
checkLastRequestApns(token: '012abc', appid: 'com.zulip.flutter');
1035+
checkLastRequestApns(token: '012abc', appid: 'com.zulip.flutter.test');
10361036
}
10371037

10381038
if (defaultTargetPlatform == TargetPlatform.android) {
@@ -1071,7 +1071,7 @@ void main() {
10711071
if (defaultTargetPlatform == TargetPlatform.android) {
10721072
checkLastRequestFcm(token: '012abc');
10731073
} else {
1074-
checkLastRequestApns(token: '012abc', appid: 'com.zulip.flutter');
1074+
checkLastRequestApns(token: '012abc', appid: 'com.zulip.flutter.test');
10751075
}
10761076

10771077
if (defaultTargetPlatform == TargetPlatform.android) {
@@ -1082,6 +1082,22 @@ void main() {
10821082
checkLastRequestFcm(token: '456def');
10831083
}
10841084
}));
1085+
1086+
1087+
test('fallback to default appBundleId in case packageInfo is null', ()async{
1088+
// This tests the case where packageInfo is null
1089+
// and default appBundleId gets passed to the [NotificationService.registerToken] method
1090+
1091+
prepareStore();
1092+
connection.prepare(json: {});
1093+
1094+
if(defaultTargetPlatform == TargetPlatform.iOS){
1095+
testBinding.packageInfoResult=null;
1096+
await NotificationService.registerToken(connection, token: '012abc');
1097+
checkLastRequestApns(token: '012abc', appid: 'com.zulip.flutter');
1098+
addTearDown(testBinding.reset);
1099+
}
1100+
});
10851101
});
10861102
}
10871103

0 commit comments

Comments
 (0)