Skip to content

Commit 4facbde

Browse files
committed
api: Add createSavedSnippet route
1 parent 1b6275d commit 4facbde

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

lib/api/route/saved_snippets.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import 'package:json_annotation/json_annotation.dart';
2+
3+
import '../core.dart';
4+
5+
part 'saved_snippets.g.dart';
6+
7+
/// https://zulip.com/api/create-saved-snippet
8+
Future<CreateSavedSnippetResult> createSavedSnippet(ApiConnection connection, {
9+
required String title,
10+
required String content,
11+
}) {
12+
return connection.post('createSavedSnippet', CreateSavedSnippetResult.fromJson, 'saved_snippets', {
13+
'title': RawParameter(title),
14+
'content': RawParameter(content),
15+
});
16+
}
17+
18+
@JsonSerializable(fieldRename: FieldRename.snake)
19+
class CreateSavedSnippetResult {
20+
final int savedSnippetId;
21+
22+
CreateSavedSnippetResult({
23+
required this.savedSnippetId,
24+
});
25+
26+
factory CreateSavedSnippetResult.fromJson(Map<String, dynamic> json) =>
27+
_$CreateSavedSnippetResultFromJson(json);
28+
29+
Map<String, dynamic> toJson() => _$CreateSavedSnippetResultToJson(this);
30+
}

lib/api/route/saved_snippets.g.dart

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import 'package:checks/checks.dart';
2+
import 'package:http/http.dart' as http;
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:zulip/api/route/saved_snippets.dart';
5+
6+
import '../../stdlib_checks.dart';
7+
import '../fake_api.dart';
8+
import '../route/route_checks.dart';
9+
10+
void main() {
11+
test('smoke', () async {
12+
return FakeApiConnection.with_((connection) async {
13+
connection.prepare(
14+
json: CreateSavedSnippetResult(savedSnippetId: 123).toJson());
15+
final result = await createSavedSnippet(connection,
16+
title: 'test saved snippet', content: 'content');
17+
check(result).savedSnippetId.equals(123);
18+
check(connection.takeRequests()).single.isA<http.Request>()
19+
.bodyFields.deepEquals({
20+
'title': 'test saved snippet',
21+
'content': 'content',
22+
});
23+
});
24+
});
25+
}

test/api/route/route_checks.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import 'package:checks/checks.dart';
22
import 'package:zulip/api/route/messages.dart';
3+
import 'package:zulip/api/route/saved_snippets.dart';
34

45
extension SendMessageResultChecks on Subject<SendMessageResult> {
56
Subject<int> get id => has((e) => e.id, 'id');
67
}
8+
extension CreateSavedSnippetResultChecks on Subject<CreateSavedSnippetResult> {
9+
Subject<int> get savedSnippetId => has((e) => e.savedSnippetId, 'savedSnippetId');
10+
}
711

812
// TODO add similar extensions for other classes in api/route/*.dart

0 commit comments

Comments
 (0)