Files
IKAR/test/chat_video_preview_refresh_test.dart

93 lines
2.8 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:ikar/backend/modules/messages.dart';
import 'package:ikar/frontend/screens/chats/chat/chat_controller.dart';
import 'package:ikar/models/attachment.dart';
CachedMessage videoMessage({String? thumbnail, bool payload = true}) {
final attachment = VideoAttachment(
videoId: 121,
videoToken: 'synthetic-video-token',
thumbnail: thumbnail,
baseUrl: thumbnail,
duration: thumbnail == null ? null : 5178,
width: thumbnail == null ? null : 2160,
height: thumbnail == null ? null : 3840,
);
return CachedMessage(
id: '119',
accountId: 1,
chatId: 3,
senderId: 1,
text: '',
time: 1000,
status: 'sent',
attachments: [attachment],
payload: payload
? {
'id': 119,
'attaches': [attachment.toMap()],
}
: null,
);
}
void main() {
test('existing video is redrawn when its preview and metadata arrive', () {
final controller = ChatController()..messages = [videoMessage()];
addTearDown(controller.dispose);
final refreshed = videoMessage(
thumbnail: 'https://media.example.test/thumbnail?access_token=new',
);
expect(controller.mergeMessages([refreshed]), isTrue);
expect(controller.messages.single, same(refreshed));
expect(
(controller.messages.single.attachments!.single as VideoAttachment)
.duration,
5178,
);
expect(controller.messagesRev.value, 1);
expect(
controller.mergeMessages([
videoMessage(
thumbnail: 'https://media.example.test/thumbnail?access_token=new',
),
]),
isFalse,
);
expect(controller.messagesRev.value, 1);
});
test('refreshed signed preview URL replaces an expired URL', () {
final controller = ChatController()
..messages = [
videoMessage(
thumbnail:
'https://media.example.test/thumbnail?access_token=expired',
),
];
addTearDown(controller.dispose);
final refreshed = videoMessage(
thumbnail: 'https://media.example.test/thumbnail?access_token=fresh',
);
expect(controller.mergeMessages([refreshed]), isTrue);
expect(controller.messages.single.time, 1000);
expect(controller.messages.single.id, '119');
expect(controller.messages.single, same(refreshed));
});
test(
'attachment updates without a raw server payload also redraw the video',
() {
final controller = ChatController()
..messages = [videoMessage(payload: false)];
addTearDown(controller.dispose);
final refreshed = videoMessage(
payload: false,
thumbnail: 'https://media.example.test/thumbnail',
);
expect(controller.mergeMessages([refreshed]), isTrue);
expect(controller.messages.single, same(refreshed));
},
);
}