Skip to content

Commit f1ee1ef

Browse files
committed
notif: Use live value for app ID on registering APNs token
`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. Fixes: #407.
1 parent 16e4d88 commit f1ee1ef

File tree

6 files changed

+40
-4
lines changed

6 files changed

+40
-4
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

+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+
PackageInfo 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
@@ -9,6 +9,7 @@ import 'package:zulip/api/model/submessage.dart';
99
import 'package:zulip/api/route/messages.dart';
1010
import 'package:zulip/api/route/realm.dart';
1111
import 'package:zulip/api/route/channels.dart';
12+
import 'package:zulip/model/binding.dart';
1213
import 'package:zulip/model/database.dart';
1314
import 'package:zulip/model/narrow.dart';
1415
import 'package:zulip/model/settings.dart';
@@ -985,3 +986,15 @@ UpdateMachine updateMachine({
985986
return UpdateMachine.fromInitialSnapshot(
986987
store: store, initialSnapshot: initialSnapshot);
987988
}
989+
990+
PackageInfo packageInfo({
991+
String? version,
992+
String? buildNumber,
993+
String? packageName,
994+
}) {
995+
return PackageInfo(
996+
version: version ?? '1.0.0',
997+
buildNumber: buildNumber ?? '1',
998+
packageName: packageName ?? 'com.package.name',
999+
);
1000+
}

test/model/binding.dart

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

232232
/// The value that `ZulipBinding.instance.packageInfo` should return.
233233
PackageInfo packageInfoResult = _defaultPackageInfo;
234-
static const _defaultPackageInfo = PackageInfo(version: '0.0.1', buildNumber: '1');
234+
static final PackageInfo _defaultPackageInfo = eg.packageInfo();
235235

236236
void _resetPackageInfo() {
237237
packageInfoResult = _defaultPackageInfo;

test/model/store_test.dart

+18
Original file line numberDiff line numberDiff line change
@@ -1132,6 +1132,7 @@ void main() {
11321132
addTearDown(testBinding.reset);
11331133
testBinding.firebaseMessagingInitialToken = '012abc';
11341134
addTearDown(NotificationService.debugReset);
1135+
testBinding.packageInfoResult = eg.packageInfo(packageName: 'com.zulip.flutter');
11351136
await NotificationService.instance.start();
11361137

11371138
// On store startup, send the token.
@@ -1159,6 +1160,7 @@ void main() {
11591160
addTearDown(testBinding.reset);
11601161
testBinding.firebaseMessagingInitialToken = '012abc';
11611162
addTearDown(NotificationService.debugReset);
1163+
testBinding.packageInfoResult = eg.packageInfo(packageName: 'com.zulip.flutter');
11621164
final startFuture = NotificationService.instance.start();
11631165

11641166
// TODO this test is a bit brittle in its interaction with asynchrony;
@@ -1177,6 +1179,7 @@ void main() {
11771179
// When the token later appears, send it.
11781180
connection.prepare(json: {});
11791181
await startFuture;
1182+
async.flushMicrotasks();
11801183
if (defaultTargetPlatform == TargetPlatform.android) {
11811184
checkLastRequestFcm(token: '012abc');
11821185
} else {
@@ -1191,6 +1194,21 @@ void main() {
11911194
checkLastRequestFcm(token: '456def');
11921195
}
11931196
}));
1197+
1198+
test('use provided appId from packageInfo', () => awaitFakeAsync((async) async {
1199+
final origTargetPlatform = debugDefaultTargetPlatformOverride;
1200+
addTearDown(() => debugDefaultTargetPlatformOverride = origTargetPlatform);
1201+
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
1202+
addTearDown(testBinding.reset);
1203+
testBinding.firebaseMessagingInitialToken = '012abc';
1204+
testBinding.packageInfoResult = eg.packageInfo(packageName: 'com.example.test');
1205+
addTearDown(NotificationService.debugReset);
1206+
await NotificationService.instance.start();
1207+
prepareStore();
1208+
connection.prepare(json: {});
1209+
await updateMachine.registerNotificationToken();
1210+
checkLastRequestApns(token: '012abc', appid: 'com.example.test');
1211+
}));
11941212
});
11951213
}
11961214

0 commit comments

Comments
 (0)