93 lines
2.8 KiB
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));
|
|
},
|
|
);
|
|
}
|