Browse Source

merging group changes

pull/3/head
Herbert Poul 4 years ago
parent
commit
4e59483ed9
  1. 6
      lib/src/kdbx_entry.dart
  2. 8
      test/internal/test_utils.dart
  3. 46
      test/merge/kdbx_merge_test.dart

6
lib/src/kdbx_entry.dart

@ -289,7 +289,8 @@ class KdbxEntry extends KdbxObject {
return value?.toString(); return value?.toString();
} }
String get label => _plainValue(KdbxKey('Title')); String get label =>
_plainValue(KdbxKey('Title')) ?? _plainValue(KdbxKey('URL'));
set label(String label) => setString(KdbxKey('Title'), PlainValue(label)); set label(String label) => setString(KdbxKey('Title'), PlainValue(label));
@ -387,6 +388,7 @@ class KdbxEntry extends KdbxObject {
@override @override
String toString() { String toString() {
return 'KdbxEntry{uuid=$uuid,name=$label}'; return 'KdbxEntry{uuid=$uuid,'
'name=${label ?? _plainValue(KdbxKey('UserName'))}}';
} }
} }

8
test/internal/test_utils.dart

@ -56,4 +56,12 @@ class TestUtil {
await outFile.writeAsBytes(bytes); await outFile.writeAsBytes(bytes);
_logger.info('Written to $outFile'); _logger.info('Written to $outFile');
} }
static KdbxFile createEmptyFile() {
final file = kdbxFormat().create(
Credentials.composite(ProtectedValue.fromString('asdf'), null),
'example');
return file;
}
} }

46
test/merge/kdbx_merge_test.dart

@ -1,18 +1,17 @@
import 'package:clock/clock.dart'; import 'package:clock/clock.dart';
import 'package:kdbx/kdbx.dart'; import 'package:kdbx/kdbx.dart';
import 'package:logging/logging.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import '../internal/test_utils.dart'; import '../internal/test_utils.dart';
import 'package:logging/logging.dart';
final _logger = Logger('kdbx_merge_test'); final _logger = Logger('kdbx_merge_test');
void main() { void main() {
TestUtil.setupLogging(); TestUtil.setupLogging();
DateTime now = DateTime.fromMillisecondsSinceEpoch(0); var now = DateTime.fromMillisecondsSinceEpoch(0);
final fakeClock = Clock(() => now); final fakeClock = Clock(() => now);
final kdbxFormat = TestUtil.kdbxFormat();
void proceedSeconds(int seconds) { void proceedSeconds(int seconds) {
now = now.add(Duration(seconds: seconds)); now = now.add(Duration(seconds: seconds));
} }
@ -21,26 +20,29 @@ void main() {
DateTime.fromMillisecondsSinceEpoch(0); DateTime.fromMillisecondsSinceEpoch(0);
}); });
group('Simple merges', () { group('Simple merges', () {
test('Noop merge', () async { Future<KdbxFile> createSimpleFile() async {
final file = kdbxFormat.create( final file = TestUtil.createEmptyFile();
Credentials.composite(ProtectedValue.fromString('asdf'), null),
'example');
_createEntry(file, file.body.rootGroup, 'test1', 'test1'); _createEntry(file, file.body.rootGroup, 'test1', 'test1');
final subGroup =
file.createGroup(parent: file.body.rootGroup, name: 'Sub Group');
_createEntry(file, subGroup, 'test2', 'test2');
proceedSeconds(10);
return await TestUtil.saveAndRead(file);
}
test('Noop merge', () async {
final file = await createSimpleFile();
final file2 = await TestUtil.saveAndRead(file); final file2 = await TestUtil.saveAndRead(file);
final merge = file.merge(file2); final merge = file.merge(file2);
final set = Set<KdbxUuid>.from(merge.merged.keys); final set = Set<KdbxUuid>.from(merge.merged.keys);
expect(set, hasLength(2)); expect(set, hasLength(4));
expect(merge.changes, isEmpty); expect(merge.changes, isEmpty);
}); });
test('Username change', () async { test('Username change', () async {
await withClock(fakeClock, () async { await withClock(fakeClock, () async {
final file = kdbxFormat.create( final file = await createSimpleFile();
Credentials.composite(ProtectedValue.fromString('asdf'), null),
'example');
_createEntry(file, file.body.rootGroup, 'test1', 'test1');
final fileMod = await TestUtil.saveAndRead(file); final fileMod = await TestUtil.saveAndRead(file);
proceedSeconds(10);
fileMod.body.rootGroup.entries.first fileMod.body.rootGroup.entries.first
.setString(KdbxKey('UserName'), PlainValue('changed.')); .setString(KdbxKey('UserName'), PlainValue('changed.'));
@ -52,11 +54,27 @@ void main() {
_logger.info('\n\n\nstarting merge.\n'); _logger.info('\n\n\nstarting merge.\n');
final merge = file.merge(file2); final merge = file.merge(file2);
expect(file.body.rootGroup.entries.first.history, hasLength(1));
final set = Set<KdbxUuid>.from(merge.merged.keys); final set = Set<KdbxUuid>.from(merge.merged.keys);
expect(set, hasLength(2)); expect(set, hasLength(4));
expect(merge.changes, hasLength(1)); expect(merge.changes, hasLength(1));
}); });
}); });
test(
'Change Group Name',
() async => await withClock(fakeClock, () async {
final file = await createSimpleFile();
final fileMod = await TestUtil.saveAndRead(file);
fileMod.body.rootGroup.groups.first.name.set('Sub Group New Name.');
final file2 = await TestUtil.saveAndRead(fileMod);
final merge = file.merge(file2);
final set = Set<KdbxUuid>.from(merge.merged.keys);
expect(set, hasLength(4));
expect(merge.changes, hasLength(1));
}),
);
}); });
} }

Loading…
Cancel
Save