mirror of
https://github.com/kuhyx/todo-app.git
synced 2026-11-12 13:10:56 +01:00
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
file-length / file length <= 250 lines (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
release-apk / release (APK) (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
Todo: fda71ed1 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
36 lines
1.3 KiB
Dart
36 lines
1.3 KiB
Dart
/// A GitHub stand-in that persists the end-to-end encryption header, which
|
|
/// the sync service writes and re-reads; every other request goes to [inner].
|
|
library;
|
|
|
|
import 'dart:convert';
|
|
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:http/testing.dart';
|
|
|
|
/// Wraps [inner] so `…/e2e` PUTs are stored and served back on GET.
|
|
MockClient e2eMock(Future<http.Response> Function(http.Request) inner) {
|
|
String? header;
|
|
return MockClient((request) async {
|
|
if (request.url.path.endsWith('/e2e.json')) {
|
|
// Firebase REST: the value is a JSON-encoded string.
|
|
if (request.method == 'PUT') {
|
|
header = jsonDecode(request.body) as String;
|
|
return http.Response(request.body, 200);
|
|
}
|
|
return http.Response(jsonEncode(header), 200);
|
|
}
|
|
if (!request.url.path.endsWith('/e2e')) return inner(request);
|
|
if (request.method == 'PUT') {
|
|
final body = jsonDecode(request.body) as Map<String, dynamic>;
|
|
header = utf8.decode(base64.decode(body['content'] as String));
|
|
return http.Response(jsonEncode({'content': {}, 'sha': 'h'}), 200);
|
|
}
|
|
final text = header;
|
|
if (text == null) return http.Response('', 404);
|
|
return http.Response(
|
|
jsonEncode({'content': base64.encode(utf8.encode(text)), 'sha': 'h'}),
|
|
200,
|
|
);
|
|
});
|
|
}
|