Skip to content

Commit 003a0d9

Browse files
committed
autocomplete: Use topic data from store in topic autocomplete
1 parent d673c5f commit 003a0d9

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

lib/model/autocomplete.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:unorm_dart/unorm_dart.dart' as unorm;
66

77
import '../api/model/events.dart';
88
import '../api/model/model.dart';
9-
import '../api/route/channels.dart';
109
import '../generated/l10n/zulip_localizations.dart';
1110
import '../widgets/compose_box.dart';
1211
import 'algorithms.dart';
@@ -1175,10 +1174,8 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
11751174
Future<void> _fetch() async {
11761175
assert(!_isFetching);
11771176
_isFetching = true;
1178-
final result = await getStreamTopics(store.connection, streamId: streamId,
1179-
allowEmptyTopicName: true,
1180-
);
1181-
_topics = result.topics.map((e) => e.name);
1177+
await store.fetchTopics(streamId);
1178+
_topics = store.getChannelTopics(streamId)!.map((e) => e.name);
11821179
_isFetching = false;
11831180
return _startSearch();
11841181
}

test/model/autocomplete_test.dart

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,19 +1279,47 @@ void main() {
12791279
check(done).isTrue();
12801280
});
12811281

1282-
test('TopicAutocompleteView getStreamTopics request', () async {
1282+
test('TopicAutocompleteView fetch topics once for a channel', () async {
12831283
final store = eg.store();
12841284
final connection = store.connection as FakeApiConnection;
12851285

1286-
connection.prepare(json: GetStreamTopicsResult(
1287-
topics: [eg.getStreamTopicsEntry(name: '')],
1288-
).toJson());
1289-
TopicAutocompleteView.init(store: store, streamId: 1000,
1290-
query: TopicAutocompleteQuery('foo'));
1291-
check(connection.lastRequest).isA<http.Request>()
1286+
final topic1 = eg.getStreamTopicsEntry(maxId: 20, name: 'server releases');
1287+
final topic2 = eg.getStreamTopicsEntry(maxId: 10, name: 'mobile releases');
1288+
1289+
connection.prepare(json: GetStreamTopicsResult(topics: [topic1, topic2]).toJson());
1290+
final view1 = TopicAutocompleteView.init(store: store, streamId: 1000,
1291+
query: TopicAutocompleteQuery(''));
1292+
bool done = false;
1293+
view1.addListener(() { done = true; });
1294+
1295+
check(connection.takeRequests()).last.isA<http.Request>()
12921296
..method.equals('GET')
12931297
..url.path.equals('/api/v1/users/me/1000/topics')
12941298
..url.queryParameters['allow_empty_topic_name'].equals('true');
1299+
1300+
await Future(() {});
1301+
await Future(() {});
1302+
check(done).isTrue();
1303+
check(view1.results).deepEquals([isTopic(topic1.name), isTopic(topic2.name)]);
1304+
1305+
view1.query = TopicAutocompleteQuery('server');
1306+
await Future(() {});
1307+
check(connection.takeRequests()).isEmpty();
1308+
check(view1.results).single.which(isTopic(topic1.name));
1309+
view1.dispose();
1310+
1311+
connection.prepare(json: GetStreamTopicsResult(topics: [topic1]).toJson());
1312+
final view2 = TopicAutocompleteView.init(store: store, streamId: 1000,
1313+
query: TopicAutocompleteQuery('mobile'));
1314+
done = false;
1315+
view2.addListener(() { done = true; });
1316+
1317+
check(connection.takeRequests()).isEmpty();
1318+
1319+
await Future(() {});
1320+
await Future(() {});
1321+
check(done).isTrue();
1322+
check(view2.results).single.which(isTopic(topic2.name));
12951323
});
12961324

12971325
group('TopicAutocompleteQuery.testTopic', () {

0 commit comments

Comments
 (0)