frindlymap/test/visibility_test.dart

102 lines
4.1 KiB
Dart

import 'package:flutter_test/flutter_test.dart';
import 'package:friendly_map/modules/core/core.dart';
import 'package:friendly_map/modules/visibility/visibility.dart';
void main() {
final all = {
CardKeys.name: '이미영',
CardKeys.phone: '010-1234-5678',
CardKeys.email: 'miyoung@mail.com',
CardKeys.birthday: '03-14',
CardKeys.company: '한빛소프트',
CardKeys.position: '팀장',
CardKeys.school: '한국대',
CardKeys.year: '2008',
};
group('표', () {
test('처음 값: 가족은 모두 공개, 그룹은 숨김', () {
final m = VisibilityMatrix.defaults();
for (final c in VCategory.all) {
expect(m.get(c, VAudience.family), VLevel.open);
}
expect(m.get(VCategory.birthday, VAudience.group), VLevel.hidden);
expect(m.get(VCategory.work, VAudience.school), VLevel.partial);
});
test('칸을 바꾸고 글자로 저장했다가 복원, 깨진 글자는 처음 값', () {
final m = VisibilityMatrix.defaults().with_(VCategory.birthday, VAudience.group, VLevel.open);
final back = VisibilityMatrix.fromJson(m.toJson());
expect(back.get(VCategory.birthday, VAudience.group), VLevel.open);
expect(back.get(VCategory.school, VAudience.family), VLevel.open);
expect(VisibilityMatrix.fromJson('{깨짐').get(VCategory.birthday, VAudience.group), VLevel.hidden);
expect(VisibilityMatrix.fromJson(null).get(VCategory.contact, VAudience.company), VLevel.partial);
});
test('단계는 공개→일부→숨김→공개로 돈다', () {
expect(VLevel.open.next, VLevel.partial);
expect(VLevel.partial.next, VLevel.hidden);
expect(VLevel.hidden.next, VLevel.open);
});
test('여러 관계면 가장 많이 보여 주는 단계', () {
final m = VisibilityMatrix.defaults();
expect(m.forAudiences(VCategory.birthday, [VAudience.group, VAudience.company]), VLevel.partial);
expect(m.forAudiences(VCategory.birthday, [VAudience.group, VAudience.family]), VLevel.open);
});
});
group('관계 찾기', () {
test('연결 관계 글자와 명함 종류에서 관계 묶음', () {
expect(VAudience.ofRelation('가족:어머니'), VAudience.family);
expect(VAudience.ofRelation('전 직장 동료'), VAudience.company);
expect(VAudience.ofRelation('동창'), VAudience.school);
expect(VAudience.ofRelation('같은 여행'), VAudience.group);
expect(VAudience.ofRelation('이웃'), null);
expect(VAudience.ofCardKind(CardKinds.company), VAudience.company);
expect(VAudience.ofCardKind(CardKinds.personal), null);
});
});
group('걸러 내기', () {
final m = VisibilityMatrix.defaults();
test('관계를 모르는 사람에게는 내가 고른 그대로', () {
expect(applyVisibility(all, {}, m), all);
});
test('가족에게는 전부', () {
expect(applyVisibility(all, {VAudience.family}, m), all);
});
test('그룹 사람에게는 이름만 남고 나머지는 숨김', () {
final out = applyVisibility(all, {VAudience.group}, m);
expect(out, {CardKeys.name: '이미영'});
});
test('회사 사람: 연락처·생일은 일부, 학교·회사는 공개', () {
final out = applyVisibility(all, {VAudience.company}, m);
expect(out[CardKeys.phone], '****5678');
expect(out[CardKeys.email], 'm***@mail.com');
expect(out[CardKeys.birthday], '3월');
expect(out[CardKeys.company], '한빛소프트');
expect(out[CardKeys.position], '팀장');
expect(out[CardKeys.school], '한국대');
});
test('동문 사람: 회사는 이름만(직책 빠짐), 생일·연락처 숨김', () {
final out = applyVisibility(all, {VAudience.school}, m);
expect(out[CardKeys.company], '한빛소프트');
expect(out.containsKey(CardKeys.position), false);
expect(out.containsKey(CardKeys.birthday), false);
expect(out.containsKey(CardKeys.phone), false);
expect(out[CardKeys.school], '한국대');
});
test('원본은 바뀌지 않는다', () {
applyVisibility(all, {VAudience.group}, m);
expect(all.length, 8);
});
});
}