Skip to content

Commit 94424df

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 94424df

File tree

5 files changed

+33
-6
lines changed

5 files changed

+33
-6
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-3
Original file line numberDiff line numberDiff line change
@@ -149,9 +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);
154-
152+
final packageInfo = await ZulipBinding.instance.packageInfo;
153+
await addApnsToken(connection,
154+
token: token,
155+
appid: packageInfo!.packageName);
155156
case TargetPlatform.linux:
156157
case TargetPlatform.macOS:
157158
case TargetPlatform.windows:

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');
464464

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

test/model/binding.dart

+5-2
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,11 @@ class TestZulipBinding extends ZulipBinding {
230230
BaseDeviceInfo? get syncDeviceInfo => deviceInfoResult;
231231

232232
/// The value that `ZulipBinding.instance.packageInfo` should return.
233-
PackageInfo packageInfoResult = _defaultPackageInfo;
234-
static const _defaultPackageInfo = PackageInfo(version: '0.0.1', buildNumber: '1');
233+
PackageInfo? packageInfoResult = _defaultPackageInfo;
234+
static const _defaultPackageInfo = PackageInfo(
235+
version: '0.0.1',
236+
buildNumber: '1',
237+
packageName: 'com.zulip.flutter');
235238

236239
void _resetPackageInfo() {
237240
packageInfoResult = _defaultPackageInfo;

test/model/store_test.dart

+20
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'package:zulip/log.dart';
1717
import 'package:zulip/model/actions.dart';
1818
import 'package:zulip/model/store.dart';
1919
import 'package:zulip/notifications/receive.dart';
20+
import 'package:zulip/model/binding.dart';
2021

2122
import '../api/fake_api.dart';
2223
import '../api/model/model_checks.dart';
@@ -1177,6 +1178,7 @@ void main() {
11771178
// When the token later appears, send it.
11781179
connection.prepare(json: {});
11791180
await startFuture;
1181+
async.flushMicrotasks();
11801182
if (defaultTargetPlatform == TargetPlatform.android) {
11811183
checkLastRequestFcm(token: '012abc');
11821184
} else {
@@ -1191,6 +1193,24 @@ void main() {
11911193
checkLastRequestFcm(token: '456def');
11921194
}
11931195
}));
1196+
1197+
testAndroidIos('use provided appId from packageInfo', () => awaitFakeAsync((async) async {
1198+
if (defaultTargetPlatform == TargetPlatform.iOS) {
1199+
addTearDown(testBinding.reset);
1200+
testBinding.firebaseMessagingInitialToken = '012abc';
1201+
testBinding.packageInfoResult = PackageInfo(
1202+
version: '1.0.0',
1203+
buildNumber: '1',
1204+
packageName: 'com.example.test',
1205+
);
1206+
addTearDown(NotificationService.debugReset);
1207+
await NotificationService.instance.start();
1208+
prepareStore();
1209+
connection.prepare(json: {});
1210+
await updateMachine.registerNotificationToken();
1211+
checkLastRequestApns(token: '012abc', appid: 'com.example.test');
1212+
}
1213+
}));
11941214
});
11951215
}
11961216

0 commit comments

Comments
 (0)