94 lines
4.4 KiB
Dart
94 lines
4.4 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:friendly_map/modules/app/app.dart';
|
|
import 'package:friendly_map/modules/transport/transport.dart';
|
|
|
|
import 'support/app_device.dart';
|
|
|
|
Future<void> befriend(AppDevice a, AppDevice b) async {
|
|
await a.app.friends.add(b.phone, b.name);
|
|
await AppDevice.settleAll();
|
|
await b.app.friends.accept(a.phone);
|
|
await AppDevice.settleAll();
|
|
}
|
|
|
|
void main() {
|
|
group('보여 주기', () {
|
|
test('전화번호는 010-0000-0000 처럼', () {
|
|
expect(displayPhone('+821033334444'), '010-3333-4444');
|
|
expect(displayPhone('+82313334444'), '031-333-4444');
|
|
expect(displayPhone('+8225551234'), '02-555-1234');
|
|
expect(displayPhone('+82255512345'), '02-5551-2345');
|
|
expect(displayPhone('+14155550000'), '+14155550000');
|
|
expect(displayPhone('local:abc'), '');
|
|
});
|
|
|
|
test('목록 시각: 오늘은 시:분, 어제, 올해는 월 일, 그 전은 연도까지', () {
|
|
final now = DateTime(2026, 10, 26, 18);
|
|
int s(DateTime t) => t.millisecondsSinceEpoch ~/ 10;
|
|
expect(listTime(s(DateTime(2026, 10, 26, 15, 5)), now: now), '오후 3:05');
|
|
expect(listTime(s(DateTime(2026, 10, 26, 0, 7)), now: now), '오전 12:07');
|
|
expect(listTime(s(DateTime(2026, 10, 25, 23)), now: now), '어제');
|
|
expect(listTime(s(DateTime(2026, 3, 1)), now: now), '3월 1일');
|
|
expect(listTime(s(DateTime(2025, 3, 1)), now: now), '2025. 3. 1.');
|
|
expect(dayLabel(DateTime(2026, 10, 26)), '2026년 10월 26일 월요일');
|
|
expect(dueText(DateTime(2026, 10, 30), now: now), 'D-4');
|
|
expect(dueText(DateTime(2026, 10, 26), now: now), '오늘 마감');
|
|
expect(dueText(DateTime(2026, 10, 24), now: now), '2일 지남');
|
|
});
|
|
|
|
test('미리보기: 업무·긴급 표시는 읽는 말로', () {
|
|
expect(previewOf('📌 업무 [김민수] 결제 API 정리 (마감 10/30)'), '업무 · 결제 API 정리 (담당 김민수)');
|
|
expect(previewOf('🚨 긴급 호출: 서버가 멈췄어요'), '긴급 호출 · 서버가 멈췄어요');
|
|
expect(previewOf('안녕\n하세요'), '안녕 하세요');
|
|
});
|
|
});
|
|
|
|
group('새 기기로 다시 연결 · 영구 제명', () {
|
|
late MemoryHub hub;
|
|
late AppDevice me, old;
|
|
|
|
setUp(() async {
|
|
hub = MemoryHub();
|
|
me = await AppDevice.create(hub, '010-1111-2222', '+821011112222', '나');
|
|
old = await AppDevice.create(hub, '010-3333-4444', '+821033334444', '김민수');
|
|
await befriend(me, old);
|
|
});
|
|
|
|
test('관계가 있던 번호가 새 키로 오면 "다시 연결 요청", 승인하면 새 키로 이어진다', () async {
|
|
final known = (await me.app.deps.storage.people.byPhone(old.phone))!;
|
|
final oldKey = known.publicKey;
|
|
final fresh = await AppDevice.create(hub, '010-3333-4444', '+821033334444', '김민수새폰');
|
|
await fresh.app.friends.add(me.phone, '나');
|
|
await AppDevice.settleAll();
|
|
final reqs = await me.app.blocks.incoming();
|
|
expect(reqs.single.reconnect, isTrue);
|
|
expect(reqs.single.known!.id, known.id);
|
|
await me.app.blocks.approve(old.phone);
|
|
final after = (await me.app.deps.storage.people.byPhone(old.phone))!;
|
|
expect(after.id, known.id, reason: '같은 사람으로 이어진다');
|
|
expect(after.publicKey, isNot(oldKey));
|
|
});
|
|
|
|
test('제명하면 요청이 사라지고 그 번호의 인사는 다시 받지 않는다', () async {
|
|
final fresh = await AppDevice.create(hub, '010-3333-4444', '+821033334444', '김민수새폰2');
|
|
await fresh.app.friends.add(me.phone, '나');
|
|
await AppDevice.settleAll();
|
|
await me.app.blocks.expel(old.phone);
|
|
expect(await me.app.blocks.incoming(), isEmpty);
|
|
expect(await me.app.blocks.isBlocked(old.phone), isTrue);
|
|
await fresh.app.friends.add(me.phone, '나');
|
|
await AppDevice.settleAll();
|
|
expect(await me.app.blocks.incoming(), isEmpty, reason: '다시 청해도 안 들어온다');
|
|
await me.app.blocks.unblock(old.phone);
|
|
expect(await me.app.blocks.isBlocked(old.phone), isFalse);
|
|
});
|
|
|
|
test('처음 보는 사람의 요청은 다시 연결이 아니다', () async {
|
|
final stranger = await AppDevice.create(hub, '010-9999-0000', '+821099990000', '처음');
|
|
await stranger.app.friends.add(me.phone, '나');
|
|
await AppDevice.settleAll();
|
|
expect((await me.app.blocks.incoming()).single.reconnect, isFalse);
|
|
});
|
|
});
|
|
}
|