Files
Qlyra/test/contact_bubble_test.dart
sevenhill f74057ce9b
Build Android (FCM) / build-android-fcm (push) Canceled after 0s
Build Android / build-android (push) Canceled after 0s
Build iOS / build-ios (push) Canceled after 0s
Build Linux / build-linux (push) Canceled after 0s
Build macOS / build-macos (push) Canceled after 0s
Build Windows / build-windows (push) Canceled after 0s
Release (main) / android (oneme) (push) Canceled after 0s
Release (main) / android (qlyra) (push) Canceled after 0s
Release (main) / windows (push) Canceled after 0s
Release (main) / linux (push) Canceled after 0s
Release (main) / macos (push) Canceled after 0s
Release (main) / ios (push) Canceled after 0s
Release (main) / release (push) Canceled after 0s
Rebrand application as Qlyra
2026-08-30 13:16:17 +03:00

150 lines
4.3 KiB
Dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:qlyra/backend/modules/contacts.dart';
import 'package:qlyra/backend/modules/messages.dart';
import 'package:qlyra/core/storage/app_database.dart';
import 'package:qlyra/frontend/widgets/message_bubble.dart';
import 'package:qlyra/l10n/app_localizations.dart';
import 'package:qlyra/models/attachment.dart';
import 'package:path_provider_platform_interface/path_provider_platform_interface.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
class _SyntheticPathProvider extends PathProviderPlatform
with MockPlatformInterfaceMixin {
final String directory;
_SyntheticPathProvider(this.directory);
@override
Future<String?> getApplicationSupportPath() async => directory;
}
CachedMessage _contactMessage({
required String id,
required int contactId,
required String firstName,
required String lastName,
}) {
return CachedMessage(
id: id,
accountId: 1,
chatId: 2,
senderId: 3,
text: '',
time: DateTime(2026, 1, 2, 5, 46).millisecondsSinceEpoch,
attachments: [
ContactAttachment(
contactId: contactId,
firstName: firstName,
lastName: lastName,
name: '$firstName $lastName',
),
],
);
}
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
testWidgets('contact bubble shows profile and contextual contact action', (
tester,
) async {
final directory = Directory.systemTemp.createTempSync(
'synthetic_contact_bubble_test',
);
addTearDown(() async {
await AppDatabase.close();
if (directory.existsSync()) directory.deleteSync(recursive: true);
});
PathProviderPlatform.instance = _SyntheticPathProvider(directory.path);
await tester.runAsync(() async {
await AppDatabase.init();
await AppDatabase.saveProfile(
ProfileData(
id: 1,
firstName: 'Synthetic owner',
phone: 100000,
country: 'ZZ',
accountStatus: 0,
updateTime: 1,
),
);
await AppDatabase.saveContacts([
{
'id': 77,
'account_id': 1,
'first_name': 'Existing',
'last_name': 'Contact',
'phone': 100001,
'photo_id': null,
'base_url': null,
'base_raw_url': null,
'update_time': 1,
'options': '',
},
]);
expect(await ContactsModule.getContact(1, 77), isNotNull);
});
await tester.pumpWidget(
MaterialApp(
locale: const Locale('ru'),
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: Scaffold(
body: Column(
mainAxisSize: MainAxisSize.min,
children: [
MessageBubble(
message: _contactMessage(
id: 'synthetic-existing-message',
contactId: 77,
firstName: 'Existing',
lastName: 'Contact',
),
isMe: false,
myId: 1,
chatType: 'DIALOG',
),
MessageBubble(
message: _contactMessage(
id: 'synthetic-new-message',
contactId: 88,
firstName: 'New',
lastName: 'Contact',
),
isMe: false,
myId: 1,
chatType: 'DIALOG',
),
],
),
),
),
);
await tester.pump();
await tester.runAsync(
() => Future<void>.delayed(const Duration(milliseconds: 100)),
);
await tester.pump();
expect(find.text('Existing Contact'), findsOneWidget);
expect(find.text('Уже твой контакт'), findsOneWidget);
expect(find.text('New Contact'), findsOneWidget);
expect(find.text('Новый контакт'), findsOneWidget);
expect(find.byKey(const ValueKey('contact-add-button')), findsOneWidget);
expect(
find.byKey(const ValueKey('contact-profile-button')),
findsNWidgets(2),
);
expect(find.text('05:46'), findsNWidgets(2));
expect(
tester.getSize(find.byKey(const ValueKey('contact-card')).first).width,
320,
);
});
}