fix: fix issue #75

This commit is contained in:
Jganenokk
2026-08-20 17:45:27 +07:00
parent 0030ded1f4
commit 3cfe3a3965
4 changed files with 118 additions and 32 deletions
+90
View File
@@ -0,0 +1,90 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:komet/backend/modules/messages.dart';
import 'package:komet/frontend/screens/chats/chat/view/selection_bar.dart';
import 'package:material_symbols_icons/symbols.dart';
const int _me = 1;
const int _chatId = 2;
CachedMessage _text(String id, String? text) => CachedMessage(
id: id,
accountId: _me,
chatId: _chatId,
senderId: _me,
text: text,
time: DateTime(2026, 1, 1, 12).millisecondsSinceEpoch,
);
CachedMessage _forwarded(String id, String originalText) =>
CachedMessage.fromPushPayload(_me, _chatId, {
'id': id,
'time': DateTime(2026, 1, 1, 12).millisecondsSinceEpoch,
'type': 'USER',
'sender': _me,
'link': {
'type': 'FORWARD',
'message': {
'id': '900',
'time': 1000,
'type': 'USER',
'sender': 5,
'text': originalText,
'attaches': const [],
},
'chatId': -30,
'chatName': 'Synthetic Channel',
},
});
Future<List<CachedMessage>?> _tapCopy(
WidgetTester tester,
List<CachedMessage> copyMsgs, {
required bool glossy,
}) async {
List<CachedMessage>? copied;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SelectionTopBar(
cs: ThemeData.light().colorScheme,
selected: copyMsgs.map((m) => m.id).toSet(),
glossy: glossy,
copyMsgs: copyMsgs,
editMsg: null,
onClear: () {},
onCopy: (msgs) => copied = msgs,
onEdit: (_) {},
onDelete: () {},
),
),
),
);
final copyButton = find.widgetWithIcon(IconButton, Symbols.content_copy);
if (copyButton.evaluate().isEmpty) return null;
await tester.tap(copyButton);
await tester.pump();
return copied;
}
void main() {
testWidgets('copy stays available for several selected messages', (
tester,
) async {
final msgs = [_text('1', 'первое'), _text('2', 'второе')];
for (final glossy in [false, true]) {
expect(await _tapCopy(tester, msgs, glossy: glossy), msgs);
}
});
testWidgets('copy is hidden when nothing carries text', (tester) async {
expect(await _tapCopy(tester, const [], glossy: false), isNull);
});
testWidgets('a forwarded message exposes its original text', (tester) async {
final forwarded = _forwarded('3', 'исходный текст');
expect(forwarded.text, isNull);
expect(forwarded.selectableText, 'исходный текст');
expect(await _tapCopy(tester, [forwarded], glossy: false), [forwarded]);
});
}