Skip to content

Commit 9468767

Browse files
sm-sayedignprice
authored andcommitted
api: Add route updateStatus
1 parent eab11bb commit 9468767

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

lib/api/route/users.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:json_annotation/json_annotation.dart';
22

3+
import '../../basic.dart';
34
import '../core.dart';
45
import '../model/model.dart';
56

@@ -34,6 +35,21 @@ class GetOwnUserResult {
3435
Map<String, dynamic> toJson() => _$GetOwnUserResultToJson(this);
3536
}
3637

38+
/// https://zulip.com/api/update-status
39+
Future<void> updateStatus(ApiConnection connection, {
40+
required UserStatusChange change,
41+
}) {
42+
return connection.post('updateStatus', (_) {}, 'users/me/status', {
43+
if (change.text case OptionSome(:var value))
44+
'status_text': RawParameter(value ?? ''),
45+
if (change.emoji case OptionSome(:var value)) ...{
46+
'emoji_name': RawParameter(value?.emojiName ?? ''),
47+
'emoji_code': RawParameter(value?.emojiCode ?? ''),
48+
'reaction_type': RawParameter(value?.reactionType.toJson() ?? ''),
49+
}
50+
});
51+
}
52+
3753
/// https://zulip.com/api/update-presence
3854
///
3955
/// Passes true for `slim_presence` to avoid getting an ancient data format

test/api/route/users_test.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,31 @@ import 'package:http/http.dart' as http;
33
import 'package:flutter_test/flutter_test.dart';
44
import 'package:zulip/api/model/model.dart';
55
import 'package:zulip/api/route/users.dart';
6+
import 'package:zulip/basic.dart';
67

78
import '../../stdlib_checks.dart';
89
import '../fake_api.dart';
910

1011
void main() {
12+
test('smoke updateStatus', () {
13+
return FakeApiConnection.with_((connection) async {
14+
connection.prepare(json: {});
15+
await updateStatus(connection, change: UserStatusChange(
16+
text: OptionSome('Busy'),
17+
emoji: OptionSome(StatusEmoji(emojiName: 'working_on_it',
18+
emojiCode: '1f6e0', reactionType: ReactionType.unicodeEmoji))));
19+
check(connection.takeRequests()).single.isA<http.Request>()
20+
..method.equals('POST')
21+
..url.path.equals('/api/v1/users/me/status')
22+
..bodyFields.deepEquals({
23+
'status_text': 'Busy',
24+
'emoji_name': 'working_on_it',
25+
'emoji_code': '1f6e0',
26+
'reaction_type': 'unicode_emoji',
27+
});
28+
});
29+
});
30+
1131
test('smoke updatePresence', () {
1232
return FakeApiConnection.with_((connection) async {
1333
final response = UpdatePresenceResult(

0 commit comments

Comments
 (0)