102 lines
4.1 KiB
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);
|
|
});
|
|
});
|
|
}
|