83 lines
4.3 KiB
Dart
83 lines
4.3 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:friendly_map/modules/app/app.dart';
|
|
import 'package:friendly_map/modules/circles/circles.dart';
|
|
import 'package:friendly_map/modules/core/core.dart';
|
|
import 'package:friendly_map/modules/storage/storage.dart';
|
|
import 'package:friendly_map/modules/transport/transport.dart';
|
|
import 'package:friendly_map/modules/work/work.dart';
|
|
|
|
import 'support/app_device.dart';
|
|
|
|
void main() {
|
|
late AppDevice me;
|
|
late FriendlyApp app;
|
|
late Person a, b, c;
|
|
|
|
Future<void> card(Person p, String kind, Map<String, String> f) => app.deps.storage.receivedCards.put(
|
|
ReceivedCard(id: 'rc-${p.id}-$kind', personId: p.id, kind: kind, fieldsJson: encodeFields(f), receivedAt: 1, updatedAt: 1));
|
|
|
|
setUp(() async {
|
|
me = await AppDevice.create(MemoryHub(), '010-1111-2222', '+821011112222', '나');
|
|
app = me.app;
|
|
a = (await app.friends.add('+821033334444', '김선배'))!;
|
|
b = (await app.friends.add('+821055556666', '이동기'))!;
|
|
c = (await app.friends.add('+821077778888', '박후배'))!;
|
|
final mine = (await app.cards.mine());
|
|
await app.cards.edit(mine.firstWhere((x) => x.kind == CardKinds.school).id, fields: {'name': '나', 'school': '가람고', 'year': '2006'});
|
|
await app.cards.edit(mine.firstWhere((x) => x.kind == CardKinds.company).id, fields: {'name': '나', 'company': '한빛', 'position': '과장'});
|
|
await card(a, CardKinds.school, {'year': '2004'});
|
|
await card(b, CardKinds.school, {'year': '2006'});
|
|
await card(c, CardKinds.school, {'year': '2007년 입학'});
|
|
final cls = (await app.groups.add('27회 3반', CardKinds.school, parent: 'school.high'))!;
|
|
await app.groups.addMembers('school.high', [b.id, c.id]);
|
|
await app.groups.addMembers(cls.id, [a.id]);
|
|
final room = (await app.chats.openDirect(c.id, CardKinds.personal))!;
|
|
for (var i = 0; i < 3; i++) {
|
|
await app.chats.send(room.id, '안녕 $i');
|
|
}
|
|
});
|
|
|
|
test('구성원은 가까운 순(대화 많은 사람 먼저), 선배·동기·후배와 하위 그룹(반)이 붙는다', () async {
|
|
final ms = await app.circles.members('school.high');
|
|
expect(ms.first.person.id, c.id, reason: '대화 3번');
|
|
final by = {for (final m in ms) m.person.name: m};
|
|
expect(by['김선배']!.cohort, '2년 선배');
|
|
expect(by['이동기']!.cohort, '동기');
|
|
expect(by['박후배']!.cohort, '1년 후배');
|
|
expect(by['김선배']!.subgroup, '27회 3반');
|
|
expect(by['이동기']!.subgroup, isNull);
|
|
});
|
|
|
|
test('학교 가운데: 초·중·고·대·대학원 칸과 사람 수, 전체에서 가까운 사람', () async {
|
|
final hub = await app.circles.hub(CardKinds.school);
|
|
expect(hub.levels.map((l) => l.view.group.name), ['초등학교', '중학교', '고등학교', '대학교', '대학원']);
|
|
expect(hub.levels.firstWhere((l) => l.view.group.name == '고등학교').count, 3);
|
|
expect(hub.closest.first.person.id, c.id);
|
|
});
|
|
|
|
test('회사: 직책으로 윗사람·같은 급·아래 직원', () async {
|
|
await card(a, CardKinds.company, {'position': '부장'});
|
|
await card(b, CardKinds.company, {'position': '과장'});
|
|
await card(c, CardKinds.company, {'position': '사원'});
|
|
final hb = (await app.groups.add('한빛', CardKinds.company, parent: CardKinds.company))!;
|
|
await app.groups.addMembers(hb.id, [a.id, b.id, c.id]);
|
|
final rel = {for (final m in await app.circles.members(hb.id)) m.person.name: m.rankRelation};
|
|
expect(rel, {'김선배': RankRelation.above, '이동기': RankRelation.same, '박후배': RankRelation.below});
|
|
});
|
|
|
|
test('단체 메시지: 고른 사람 각자에게, 긴급이면 긴급 호출로', () async {
|
|
expect(await app.circles.broadcast([a.id, b.id, a.id], '동창회 오늘 7시'), 2);
|
|
expect(await app.circles.broadcast([b.id], '모임 장소 바뀜', urgent: true), 1);
|
|
final rooms = await app.chats.summaries();
|
|
final last = rooms.firstWhere((r) => r.room.title == '이동기').last!;
|
|
expect(WorkNote.parse(last.body), isA<UrgentNote>());
|
|
});
|
|
|
|
test('나눠 보기 설정은 종류마다 따로', () async {
|
|
expect(await app.circles.splitView(CardKinds.school), isFalse);
|
|
await app.circles.setSplitView(CardKinds.school, true);
|
|
expect(await app.circles.splitView(CardKinds.school), isTrue);
|
|
expect(await app.circles.splitView(CardKinds.company), isFalse);
|
|
});
|
|
}
|