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();
}
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'))}}';
}
}

8
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;
}
}

46
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<KdbxFile> 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<KdbxUuid>.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<KdbxUuid>.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<KdbxUuid>.from(merge.merged.keys);
expect(set, hasLength(4));
expect(merge.changes, hasLength(1));
}),
);
});
}

Loading…
Cancel
Save