Skip to content

Make handleEvent an async method #701

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
May 22, 2024
4 changes: 2 additions & 2 deletions integration_test/unreadmarker_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ void main() {

final messages = await setupMessageListPage(tester, 500);
await binding.traceAction(() async {
store.handleEvent(eg.updateMessageFlagsRemoveEvent(
await store.handleEvent(eg.updateMessageFlagsRemoveEvent(
MessageFlag.read,
messages));
await tester.pumpAndSettle();
store.handleEvent(UpdateMessageFlagsAddEvent(
await store.handleEvent(UpdateMessageFlagsAddEvent(
id: 1,
flag: MessageFlag.read,
messages: messages.map((e) => e.id).toList(),
Expand Down
4 changes: 2 additions & 2 deletions lib/model/store.dart
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ class PerAccountStore extends ChangeNotifier with StreamStore {
super.dispose();
}

void handleEvent(Event event) {
Future<void> handleEvent(Event event) async {
if (event is HeartbeatEvent) {
assert(debugLog("server event: heartbeat"));
} else if (event is RealmEmojiUpdateEvent) {
Expand Down Expand Up @@ -711,7 +711,7 @@ class UpdateMachine {

final events = result.events;
for (final event in events) {
store.handleEvent(event);
await store.handleEvent(event);
}
if (events.isNotEmpty) {
lastEventId = events.last.id;
Expand Down
18 changes: 9 additions & 9 deletions test/model/autocomplete_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,8 @@ void main() {

test('MentionAutocompleteView misc', () async {
const narrow = AllMessagesNarrow();
final store = eg.store()
..addUsers([eg.selfUser, eg.otherUser, eg.thirdUser]);
final store = eg.store();
await store.addUsers([eg.selfUser, eg.otherUser, eg.thirdUser]);
final view = MentionAutocompleteView.init(store: store, narrow: narrow);

bool done = false;
Expand All @@ -182,10 +182,10 @@ void main() {
});

test('MentionAutocompleteView not starve timers', () {
fakeAsync((binding) {
fakeAsync((binding) async {
const narrow = AllMessagesNarrow();
final store = eg.store()
..addUsers([eg.selfUser, eg.otherUser, eg.thirdUser]);
final store = eg.store();
await store.addUsers([eg.selfUser, eg.otherUser, eg.thirdUser]);
final view = MentionAutocompleteView.init(store: store, narrow: narrow);

bool searchDone = false;
Expand Down Expand Up @@ -221,7 +221,7 @@ void main() {
const narrow = AllMessagesNarrow();
final store = eg.store();
for (int i = 0; i < 2500; i++) {
store.addUser(eg.user(userId: i, email: '[email protected]', fullName: 'User $i'));
await store.addUser(eg.user(userId: i, email: '[email protected]', fullName: 'User $i'));
}
final view = MentionAutocompleteView.init(store: store, narrow: narrow);

Expand All @@ -244,7 +244,7 @@ void main() {
const narrow = AllMessagesNarrow();
final store = eg.store();
for (int i = 0; i < 1500; i++) {
store.addUser(eg.user(userId: i, email: '[email protected]', fullName: 'User $i'));
await store.addUser(eg.user(userId: i, email: '[email protected]', fullName: 'User $i'));
}
final view = MentionAutocompleteView.init(store: store, narrow: narrow);

Expand Down Expand Up @@ -278,7 +278,7 @@ void main() {
const narrow = AllMessagesNarrow();
final store = eg.store();
for (int i = 0; i < 1500; i++) {
store.addUser(eg.user(userId: i, email: '[email protected]', fullName: 'User $i'));
await store.addUser(eg.user(userId: i, email: '[email protected]', fullName: 'User $i'));
}
final view = MentionAutocompleteView.init(store: store, narrow: narrow);

Expand All @@ -288,7 +288,7 @@ void main() {

await Future(() {});
check(done).isFalse();
store.addUser(eg.user(userId: 10000, email: '[email protected]', fullName: 'User 10000'));
await store.addUser(eg.user(userId: 10000, email: '[email protected]', fullName: 'User 10000'));
await Future(() {});
check(done).isFalse();
await Future(() {});
Expand Down
22 changes: 11 additions & 11 deletions test/model/compose_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -237,10 +237,10 @@ hello
required String name,
String? topic,
int? nearMessageId,
}) {
}) async {
assert(expectedFragment.startsWith('#'), 'wrong-looking expectedFragment');
final store = eg.store();
store.addStream(eg.stream(streamId: streamId, name: name));
await store.addStream(eg.stream(streamId: streamId, name: name));
final narrow = topic == null
? StreamNarrow(streamId)
: TopicNarrow(streamId, topic);
Expand Down Expand Up @@ -311,19 +311,19 @@ hello
test('silent', () {
check(mention(user, silent: true)).equals('@_**Full Name|123**');
});
test('`users` passed; has two users with same fullName', () {
test('`users` passed; has two users with same fullName', () async {
final store = eg.store();
store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName)]);
await store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName)]);
check(mention(user, silent: true, users: store.users)).equals('@_**Full Name|123**');
});
test('`users` passed; has two same-name users but one of them is deactivated', () {
test('`users` passed; has two same-name users but one of them is deactivated', () async {
final store = eg.store();
store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName, isActive: false)]);
await store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName, isActive: false)]);
check(mention(user, silent: true, users: store.users)).equals('@_**Full Name|123**');
});
test('`users` passed; user has unique fullName', () {
test('`users` passed; user has unique fullName', () async {
final store = eg.store();
store.addUsers([user, eg.user(userId: 234, fullName: 'Another Name')]);
await store.addUsers([user, eg.user(userId: 234, fullName: 'Another Name')]);
check(mention(user, silent: true, users: store.users)).equals('@_**Full Name**');
});
});
Expand All @@ -335,13 +335,13 @@ hello
.equals('[IMG_2488.png](/user_uploads/2/a3/ucEMyjxk90mcNF0y9rmW5XKO/IMG_2488.png)');
});

test('quoteAndReply / quoteAndReplyPlaceholder', () {
test('quoteAndReply / quoteAndReplyPlaceholder', () async {
final sender = eg.user(userId: 123, fullName: 'Full Name');
final stream = eg.stream(streamId: 1, name: 'test here');
final message = eg.streamMessage(sender: sender, stream: stream, topic: 'some topic');
final store = eg.store();
store.addStream(stream);
store.addUser(sender);
await store.addStream(stream);
await store.addUser(sender);

check(quoteAndReplyPlaceholder(store, message: message)).equals('''
@_**Full Name|123** [said](${eg.selfAccount.realmUrl}#narrow/stream/1-test-here/topic/some.20topic/near/${message.id}): *(loading message ${message.id})*
Expand Down
25 changes: 12 additions & 13 deletions test/model/internal_link_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@ import 'package:zulip/model/store.dart';
import '../example_data.dart' as eg;
import 'test_store.dart';

PerAccountStore setupStore({
Future<PerAccountStore> setupStore({
required Uri realmUrl,
List<ZulipStream>? streams,
List<User>? users,
}) {
}) async {
final account = eg.selfAccount.copyWith(realmUrl: realmUrl);
final store = eg.store(account: account);
if (streams != null) {
store.addStreams(streams);
await store.addStreams(streams);
}
store.addUser(eg.selfUser);
await store.addUser(eg.selfUser);
if (users != null) {
store.addUsers(users);
await store.addUsers(users);
}
return store;
}
Expand All @@ -31,17 +31,16 @@ void main() {

void testExpectedNarrows(List<(String, Narrow?)> testCases, {
List<ZulipStream>? streams,
PerAccountStore? store,
List<User>? users,
}) {
assert((streams != null || users != null) ^ (store != null));
store ??= setupStore(realmUrl: realmUrl, streams: streams, users: users);
assert(streams != null || users != null);
for (final testCase in testCases) {
final String urlString = testCase.$1;
final Uri url = store.tryResolveUrl(urlString)!;
final Narrow? expected = testCase.$2;
test(urlString, () {
check(parseInternalLink(url, store!)).equals(expected);
test(urlString, () async {
final store = await setupStore(realmUrl: realmUrl, streams: streams, users: users);
final url = store.tryResolveUrl(urlString)!;
check(parseInternalLink(url, store)).equals(expected);
});
}
}
Expand Down Expand Up @@ -132,8 +131,8 @@ void main() {
final String description = testCase.$2;
final String urlString = testCase.$3;
final Uri realmUrl = testCase.$4;
test('${expected ? 'accepts': 'rejects'} $description: $urlString', () {
final store = setupStore(realmUrl: realmUrl, streams: streams);
test('${expected ? 'accepts': 'rejects'} $description: $urlString', () async {
final store = await setupStore(realmUrl: realmUrl, streams: streams);
final url = store.tryResolveUrl(urlString)!;
final result = parseInternalLink(url, store);
check(result != null).equals(expected);
Expand Down
Loading
Loading