feat: add Flutter mobile app
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:imagefind_mobile/src/api.dart';
|
||||
import 'package:imagefind_mobile/src/models.dart';
|
||||
|
||||
void main() {
|
||||
test('resume plan skips received chunks and keeps the short final chunk', () {
|
||||
final chunks = pendingUploadChunks(
|
||||
sizeBytes: 10,
|
||||
chunkSize: 4,
|
||||
received: {1},
|
||||
);
|
||||
|
||||
expect(chunks.map((item) => item.index), [0, 2]);
|
||||
expect(chunks.map((item) => item.offset), [0, 8]);
|
||||
expect(chunks.map((item) => item.length), [4, 2]);
|
||||
});
|
||||
|
||||
test('SSE decoder ignores keep-alives and accepts split packets', () async {
|
||||
final bytes = Stream<List<int>>.fromIterable([
|
||||
utf8.encode(': keep-alive\n\ndata: {"type":"upload"'),
|
||||
utf8.encode(',"id":"42"}\n\n'),
|
||||
]);
|
||||
|
||||
final events = await decodeServerEvents(bytes).toList();
|
||||
|
||||
expect(events, [
|
||||
{'type': 'upload', 'id': '42'},
|
||||
]);
|
||||
});
|
||||
|
||||
test('video payload keeps the dedicated download endpoint', () {
|
||||
final video = VideoRecord.fromJson({
|
||||
'id': 'video-1',
|
||||
'title': '片段',
|
||||
'duration_ms': 1000,
|
||||
'download_url': '/api/v1/videos/video-1/download',
|
||||
});
|
||||
|
||||
expect(video.downloadUrl, '/api/v1/videos/video-1/download');
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user