Herbert Poul
4 years ago
5 changed files with 102 additions and 8 deletions
@ -0,0 +1,70 @@
|
||||
import 'package:clock/clock.dart'; |
||||
import 'package:kdbx/kdbx.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); |
||||
|
||||
final fakeClock = Clock(() => now); |
||||
final kdbxFormat = TestUtil.kdbxFormat(); |
||||
void proceedSeconds(int seconds) { |
||||
now = now.add(Duration(seconds: seconds)); |
||||
} |
||||
|
||||
setUp(() { |
||||
DateTime.fromMillisecondsSinceEpoch(0); |
||||
}); |
||||
group('Simple merges', () { |
||||
test('Noop merge', () async { |
||||
final file = kdbxFormat.create( |
||||
Credentials.composite(ProtectedValue.fromString('asdf'), null), |
||||
'example'); |
||||
_createEntry(file, file.body.rootGroup, 'test1', 'test1'); |
||||
final file2 = await TestUtil.saveAndRead(file); |
||||
final merge = file.merge(file2); |
||||
final set = Set<KdbxUuid>.from(merge.merged.keys); |
||||
expect(set, hasLength(2)); |
||||
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 fileMod = await TestUtil.saveAndRead(file); |
||||
proceedSeconds(10); |
||||
|
||||
fileMod.body.rootGroup.entries.first |
||||
.setString(KdbxKey('UserName'), PlainValue('changed.')); |
||||
_logger.info('mod date: ' + |
||||
fileMod.body.rootGroup.entries.first.times.lastModificationTime |
||||
.get() |
||||
.toString()); |
||||
final file2 = await TestUtil.saveAndRead(fileMod); |
||||
|
||||
_logger.info('\n\n\nstarting merge.\n'); |
||||
final merge = file.merge(file2); |
||||
final set = Set<KdbxUuid>.from(merge.merged.keys); |
||||
expect(set, hasLength(2)); |
||||
expect(merge.changes, hasLength(1)); |
||||
}); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
KdbxEntry _createEntry( |
||||
KdbxFile file, KdbxGroup group, String username, String password) { |
||||
final entry = KdbxEntry.create(file, group); |
||||
group.addEntry(entry); |
||||
entry.setString(KdbxKey('UserName'), PlainValue(username)); |
||||
entry.setString(KdbxKey('Password'), ProtectedValue.fromString(password)); |
||||
return entry; |
||||
} |
Loading…
Reference in new issue