Skip to content

Commit 2a6c8af

Browse files
PIG208gnprice
authored andcommitted
api: Add createSavedSnippet route
1 parent ab2bbbf commit 2a6c8af

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

lib/api/route/saved_snippets.dart

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
assert(connection.zulipFeatureLevel! >= 297); // TODO(server-10)
13+
return connection.post('createSavedSnippet', CreateSavedSnippetResult.fromJson, 'saved_snippets', {
14+
'title': RawParameter(title),
15+
'content': RawParameter(content),
16+
});
17+
}
18+
19+
@JsonSerializable(fieldRename: FieldRename.snake)
20+
class CreateSavedSnippetResult {
21+
final int savedSnippetId;
22+
23+
CreateSavedSnippetResult({
24+
required this.savedSnippetId,
25+
});
26+
27+
factory CreateSavedSnippetResult.fromJson(Map<String, dynamic> json) =>
28+
_$CreateSavedSnippetResultFromJson(json);
29+
30+
Map<String, dynamic> toJson() => _$CreateSavedSnippetResultToJson(this);
31+
}

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.

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
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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_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(connection.takeRequests()).single.isA<http.Request>()
18+
..method.equals('POST')
19+
..url.path.equals('/api/v1/saved_snippets')
20+
..bodyFields.deepEquals({
21+
'title': 'test saved snippet',
22+
'content': 'content',
23+
});
24+
check(result).savedSnippetId.equals(123);
25+
});
26+
});
27+
}

0 commit comments

Comments
 (0)