cbb09afbb1
A message request named "Mom (unknown)" showed the initials "M(".
66 lines
2.3 KiB
Dart
66 lines
2.3 KiB
Dart
import 'dart:typed_data';
|
||
|
||
import 'package:flutter_test/flutter_test.dart';
|
||
import 'package:sepot/core/safety/lookalike_names.dart';
|
||
import 'package:sepot/models/contact.dart';
|
||
import 'package:sepot/models/identity.dart';
|
||
import 'package:sepot/widgets/avatar.dart';
|
||
|
||
/// Jméno zvolené odesílatelem se nesmí dát „obejít“ diakritikou, velikostí
|
||
/// písmen, cizí abecedou ani neviditelnými znaky.
|
||
void main() {
|
||
Contact kontakt(String jmeno, {bool accepted = true, int seed = 1}) =>
|
||
Contact.fromPublicIdentity(
|
||
PublicIdentity(
|
||
displayName: jmeno,
|
||
identityKey: Uint8List.fromList(
|
||
[0x05, ...List.generate(32, (i) => (i * seed + 3) & 0xff)]),
|
||
createdAt: DateTime.utc(2026),
|
||
),
|
||
accepted: accepted,
|
||
);
|
||
|
||
test('stejná kostra pro varianty téhož jména', () {
|
||
final mama = nameSkeleton('Máma');
|
||
for (final varianta in [
|
||
'mama',
|
||
'MAMA',
|
||
' Má ma ',
|
||
'Máma!',
|
||
'M\u00E1\u200Bma',
|
||
'\u041C\u00E1\u043C\u0430', // cyrilské М, м, а
|
||
'Ma\u0301ma', // kombinující čárka
|
||
'Mámа\u202E',
|
||
]) {
|
||
expect(nameSkeleton(varianta), mama, reason: varianta);
|
||
}
|
||
});
|
||
|
||
test('homoglyfy l/I/1 a rn/m', () {
|
||
expect(nameSkeleton('Pavel'), nameSkeleton('PaveI'));
|
||
expect(nameSkeleton('Pavel'), nameSkeleton('Pave1'));
|
||
expect(nameSkeleton('Marek'), nameSkeleton('rnarek'));
|
||
});
|
||
|
||
test('různá jména se nepletou', () {
|
||
expect(nameSkeleton('Máma'), isNot(nameSkeleton('Táta')));
|
||
expect(nameSkeleton('Jana'), isNot(nameSkeleton('Jan')));
|
||
});
|
||
|
||
test('porovnává jen s přijatými kontakty a ne se sebou', () {
|
||
final mama = kontakt('Máma');
|
||
final zadost = kontakt('MAMA', accepted: false, seed: 2);
|
||
expect(lookalikeContact('mama', [mama, zadost]), same(mama));
|
||
expect(lookalikeContact('mama', [zadost]), isNull);
|
||
expect(lookalikeContact('mama', [mama], exceptId: mama.id), isNull);
|
||
expect(lookalikeContact('', [kontakt('')]), isNull,
|
||
reason: 'prázdné jméno nic nenese');
|
||
});
|
||
|
||
test('přívlastek žádosti v závorce nekazí iniciály avataru', () {
|
||
expect(SepotAvatar.initialsOf('Máma (neznámý)'), 'MÁ');
|
||
expect(SepotAvatar.initialsOf('Jan Novák (unknown)'), 'JN');
|
||
expect(SepotAvatar.initialsOf('(neznámý)'), '?');
|
||
});
|
||
}
|