Files
plezy/test/services/trackers/tracker_http_client_test.dart
T
edde746 78090d8bd6 refactor(trackers): unify session and account store across services
Replace the per-tracker json_serializable session classes and account stores with a shared TrackerSession (service-aware persisted validation), a single TrackerAccountStore, a shared TrackerHttpClient, and an AnimeListTrackerBase mixin for MAL/AniList. Scope the per-service rebind guard so a disconnect can't abort a racing profile load. Add migration-safety, MAL refresh, episode-count cache, and content-type tests.
2026-06-27 10:05:03 +02:00

76 lines
2.3 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart' as http;
import 'package:http/testing.dart';
import 'package:plezy/services/trackers/tracker_constants.dart';
import 'package:plezy/services/trackers/tracker_http_client.dart';
TrackerHttpClient _client(void Function(http.Request) capture) {
return TrackerHttpClient(
service: TrackerService.mal,
logLabel: 'MAL',
httpClient: MockClient((request) async {
capture(request);
return http.Response('{}', 200);
}),
);
}
void main() {
group('TrackerHttpClient.sendJson content type', () {
test('defaults a JSON content type when the caller omits one', () async {
http.Request? sent;
final client = _client((r) => sent = r);
await client.sendJson(
'POST',
Uri.parse('https://api.example.com/x'),
headers: {'Accept': 'application/json'},
body: {'a': 1},
);
expect(sent!.headers['content-type'], contains('application/json'));
client.dispose();
});
test('preserves a caller-provided content type', () async {
http.Request? sent;
final client = _client((r) => sent = r);
await client.sendJson(
'POST',
Uri.parse('https://api.example.com/x'),
headers: {'Content-Type': 'application/vnd.api+json'},
body: {'a': 1},
);
expect(sent!.headers['content-type'], contains('application/vnd.api+json'));
client.dispose();
});
test('preserves a caller-provided content type case-insensitively', () async {
http.Request? sent;
final client = _client((r) => sent = r);
await client.sendJson(
'POST',
Uri.parse('https://api.example.com/x'),
headers: {'content-type': 'application/vnd.api+json'},
body: {'a': 1},
);
expect(sent!.headers['content-type'], contains('application/vnd.api+json'));
client.dispose();
});
test('does not add a content type when there is no body', () async {
http.Request? sent;
final client = _client((r) => sent = r);
await client.sendJson('GET', Uri.parse('https://api.example.com/x'), headers: {'Accept': 'application/json'});
expect(sent!.headers.containsKey('content-type'), isFalse);
client.dispose();
});
});
}