Skip to content

Commit 29cbf10

Browse files
AhmedTareekgnprice
authored andcommitted
notif: Use live value for app ID on registering APNs token
Fixes #407. `await ZulipBinding.instance.packageInfo` was added to get the packageName, making `registerToken` take longer to complete. Previously, in "token initially unknown" test in the UpdateMachine.registerNotificationToken `start()` and `_registerNotificationToken()` finished in sync with the test’s expectations. Now, `flushMicrotasks` is added to ensure that the listener callback `_registerNotificationToken()` finishes its async work before continuing the test. Added packageInfo function in `example_data.dart` and updated tests that implicitly relied on packageInfo data to explicitly set it.
1 parent 5c812e7 commit 29cbf10

File tree

6 files changed

+41
-4
lines changed

6 files changed

+41
-4
lines changed

lib/model/binding.dart

+3
Original file line numberDiff line numberDiff line change
@@ -310,10 +310,12 @@ class LinuxDeviceInfo implements BaseDeviceInfo {
310310
class PackageInfo {
311311
final String version;
312312
final String buildNumber;
313+
final String packageName;
313314

314315
const PackageInfo({
315316
required this.version,
316317
required this.buildNumber,
318+
required this.packageName,
317319
});
318320
}
319321

@@ -427,6 +429,7 @@ class LiveZulipBinding extends ZulipBinding {
427429
_syncPackageInfo = PackageInfo(
428430
version: info.version,
429431
buildNumber: info.buildNumber,
432+
packageName: info.packageName,
430433
);
431434
} catch (e, st) {
432435
assert(debugLog('Failed to prefetch package info: $e\n$st')); // TODO(log)

lib/notifications/receive.dart

+4-2
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,10 @@ 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+
final packageInfo = await ZulipBinding.instance.packageInfo;
153+
await addApnsToken(connection,
154+
token: token,
155+
appid: packageInfo!.packageName);
154156

155157
case TargetPlatform.linux:
156158
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+
final packageInfo = eg.packageInfo(version: '0.0.1', buildNumber: '1');
464464

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

test/example_data.dart

+13
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:zulip/api/model/submessage.dart';
1010
import 'package:zulip/api/route/messages.dart';
1111
import 'package:zulip/api/route/realm.dart';
1212
import 'package:zulip/api/route/channels.dart';
13+
import 'package:zulip/model/binding.dart';
1314
import 'package:zulip/model/database.dart';
1415
import 'package:zulip/model/narrow.dart';
1516
import 'package:zulip/model/settings.dart';
@@ -994,3 +995,15 @@ UpdateMachine updateMachine({
994995
return UpdateMachine.fromInitialSnapshot(
995996
store: store, initialSnapshot: initialSnapshot);
996997
}
998+
999+
PackageInfo packageInfo({
1000+
String? version,
1001+
String? buildNumber,
1002+
String? packageName,
1003+
}) {
1004+
return PackageInfo(
1005+
version: version ?? '1.0.0',
1006+
buildNumber: buildNumber ?? '1',
1007+
packageName: packageName ?? 'com.example.app',
1008+
);
1009+
}

test/model/binding.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ class TestZulipBinding extends ZulipBinding {
260260

261261
/// The value that `ZulipBinding.instance.packageInfo` should return.
262262
PackageInfo packageInfoResult = _defaultPackageInfo;
263-
static const _defaultPackageInfo = PackageInfo(version: '0.0.1', buildNumber: '1');
263+
static final _defaultPackageInfo = eg.packageInfo();
264264

265265
void _resetPackageInfo() {
266266
packageInfoResult = _defaultPackageInfo;

test/model/store_test.dart

+19
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,7 @@ void main() {
12911291
addTearDown(testBinding.reset);
12921292
testBinding.firebaseMessagingInitialToken = '012abc';
12931293
addTearDown(NotificationService.debugReset);
1294+
testBinding.packageInfoResult = eg.packageInfo(packageName: 'com.zulip.flutter');
12941295
await NotificationService.instance.start();
12951296

12961297
// On store startup, send the token.
@@ -1318,6 +1319,7 @@ void main() {
13181319
addTearDown(testBinding.reset);
13191320
testBinding.firebaseMessagingInitialToken = '012abc';
13201321
addTearDown(NotificationService.debugReset);
1322+
testBinding.packageInfoResult = eg.packageInfo(packageName: 'com.zulip.flutter');
13211323
final startFuture = NotificationService.instance.start();
13221324

13231325
// TODO this test is a bit brittle in its interaction with asynchrony;
@@ -1336,6 +1338,7 @@ void main() {
13361338
// When the token later appears, send it.
13371339
connection.prepare(json: {});
13381340
await startFuture;
1341+
async.flushMicrotasks();
13391342
if (defaultTargetPlatform == TargetPlatform.android) {
13401343
checkLastRequestFcm(token: '012abc');
13411344
} else {
@@ -1350,6 +1353,22 @@ void main() {
13501353
checkLastRequestFcm(token: '456def');
13511354
}
13521355
}));
1356+
1357+
test('on iOS, use provided app ID from packageInfo', () => awaitFakeAsync((async) async {
1358+
final origTargetPlatform = debugDefaultTargetPlatformOverride;
1359+
addTearDown(() => debugDefaultTargetPlatformOverride = origTargetPlatform);
1360+
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
1361+
addTearDown(testBinding.reset);
1362+
testBinding.firebaseMessagingInitialToken = '012abc';
1363+
testBinding.packageInfoResult = eg.packageInfo(packageName: 'com.example.test');
1364+
addTearDown(NotificationService.debugReset);
1365+
await NotificationService.instance.start();
1366+
1367+
prepareStore();
1368+
connection.prepare(json: {});
1369+
await updateMachine.registerNotificationToken();
1370+
checkLastRequestApns(token: '012abc', appid: 'com.example.test');
1371+
}));
13531372
});
13541373

13551374
group('ZulipVersionData', () {

0 commit comments

Comments
 (0)