From 4e59483ed98beaf065f187aa05e4b4f6cec29044 Mon Sep 17 00:00:00 2001 From: Herbert Poul Date: Wed, 2 Sep 2020 00:09:04 +0200 Subject: [PATCH] merging group changes --- lib/src/kdbx_entry.dart | 6 +++-- test/internal/test_utils.dart | 8 ++++++ test/merge/kdbx_merge_test.dart | 46 +++++++++++++++++++++++---------- 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/lib/src/kdbx_entry.dart b/lib/src/kdbx_entry.dart index 338f3e0..bacd892 100644 --- a/lib/src/kdbx_entry.dart +++ b/lib/src/kdbx_entry.dart @@ -289,7 +289,8 @@ class KdbxEntry extends KdbxObject { 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)); @@ -387,6 +388,7 @@ class KdbxEntry extends KdbxObject { @override String toString() { - return 'KdbxEntry{uuid=$uuid,name=$label}'; + return 'KdbxEntry{uuid=$uuid,' + 'name=${label ?? _plainValue(KdbxKey('UserName'))}}'; } } diff --git a/test/internal/test_utils.dart b/test/internal/test_utils.dart index f81d671..1db4ab9 100644 --- a/test/internal/test_utils.dart +++ b/test/internal/test_utils.dart @@ -56,4 +56,12 @@ class TestUtil { await outFile.writeAsBytes(bytes); _logger.info('Written to $outFile'); } + + static KdbxFile createEmptyFile() { + final file = kdbxFormat().create( + Credentials.composite(ProtectedValue.fromString('asdf'), null), + 'example'); + + return file; + } } diff --git a/test/merge/kdbx_merge_test.dart b/test/merge/kdbx_merge_test.dart index a758fd8..94a868f 100644 --- a/test/merge/kdbx_merge_test.dart +++ b/test/merge/kdbx_merge_test.dart @@ -1,18 +1,17 @@ import 'package:clock/clock.dart'; import 'package:kdbx/kdbx.dart'; +import 'package:logging/logging.dart'; import 'package:test/test.dart'; import '../internal/test_utils.dart'; -import 'package:logging/logging.dart'; final _logger = Logger('kdbx_merge_test'); void main() { TestUtil.setupLogging(); - DateTime now = DateTime.fromMillisecondsSinceEpoch(0); + var now = DateTime.fromMillisecondsSinceEpoch(0); final fakeClock = Clock(() => now); - final kdbxFormat = TestUtil.kdbxFormat(); void proceedSeconds(int seconds) { now = now.add(Duration(seconds: seconds)); } @@ -21,26 +20,29 @@ void main() { DateTime.fromMillisecondsSinceEpoch(0); }); group('Simple merges', () { - test('Noop merge', () async { - final file = kdbxFormat.create( - Credentials.composite(ProtectedValue.fromString('asdf'), null), - 'example'); + Future createSimpleFile() async { + final file = TestUtil.createEmptyFile(); _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 merge = file.merge(file2); final set = Set.from(merge.merged.keys); - expect(set, hasLength(2)); + expect(set, hasLength(4)); expect(merge.changes, isEmpty); }); test('Username change', () async { await withClock(fakeClock, () async { - final file = kdbxFormat.create( - Credentials.composite(ProtectedValue.fromString('asdf'), null), - 'example'); - _createEntry(file, file.body.rootGroup, 'test1', 'test1'); + final file = await createSimpleFile(); final fileMod = await TestUtil.saveAndRead(file); - proceedSeconds(10); fileMod.body.rootGroup.entries.first .setString(KdbxKey('UserName'), PlainValue('changed.')); @@ -52,11 +54,27 @@ void main() { _logger.info('\n\n\nstarting merge.\n'); final merge = file.merge(file2); + expect(file.body.rootGroup.entries.first.history, hasLength(1)); final set = Set.from(merge.merged.keys); - expect(set, hasLength(2)); + expect(set, hasLength(4)); 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.from(merge.merged.keys); + expect(set, hasLength(4)); + expect(merge.changes, hasLength(1)); + }), + ); }); }