|
|
|
import 'package:kdbx/kdbx.dart';
|
|
|
|
import 'package:test/test.dart';
|
|
|
|
|
|
|
|
import 'internal/test_utils.dart';
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
final testUtil = TestUtil();
|
|
|
|
group('test save with dirty objects', () {
|
|
|
|
test('modify object after save', () async {
|
|
|
|
final file = testUtil.createEmptyFile();
|
|
|
|
final group = file.body.rootGroup;
|
|
|
|
final entry = testUtil.createEntry(file, group, 'user', 'pass');
|
|
|
|
final entry2 = testUtil.createEntry(file, group, 'user', 'pass');
|
|
|
|
await file.save();
|
|
|
|
|
|
|
|
const value1 = 'new';
|
|
|
|
entry.setString(TestUtil.keyTitle, PlainValue(value1));
|
|
|
|
entry2.setString(TestUtil.keyTitle, PlainValue(value1));
|
|
|
|
expect(file.isDirty, isTrue);
|
|
|
|
|
|
|
|
await file.saveTo((bytes) async {
|
|
|
|
// must still be dirty as long as we are not finished saving.
|
|
|
|
expect(file.isDirty, isTrue);
|
|
|
|
expect(entry.isDirty, isTrue);
|
|
|
|
expect(entry2.isDirty, isTrue);
|
|
|
|
return 1;
|
|
|
|
});
|
|
|
|
expect(file.isDirty, isFalse);
|
|
|
|
expect(entry.isDirty, isFalse);
|
|
|
|
expect(entry2.isDirty, isFalse);
|
|
|
|
});
|
|
|
|
test('parallel modify', () async {
|
|
|
|
final file = testUtil.createEmptyFile();
|
|
|
|
final group = file.body.rootGroup;
|
|
|
|
final entry = testUtil.createEntry(file, group, 'user', 'pass');
|
|
|
|
final entry2 = testUtil.createEntry(file, group, 'user', 'pass');
|
|
|
|
await file.save();
|
|
|
|
|
|
|
|
const value1 = 'new';
|
|
|
|
const value2 = 'new2';
|
|
|
|
|
|
|
|
entry.setString(TestUtil.keyTitle, PlainValue(value2));
|
|
|
|
entry2.setString(TestUtil.keyTitle, PlainValue(value2));
|
|
|
|
await file.saveTo((bytes) async {
|
|
|
|
// must still be dirty as long as we are not finished saving.
|
|
|
|
expect(file.isDirty, isTrue);
|
|
|
|
expect(entry.isDirty, isTrue);
|
|
|
|
expect(entry2.isDirty, isTrue);
|
|
|
|
entry2.setString(TestUtil.keyTitle, PlainValue(value1));
|
|
|
|
return 1;
|
|
|
|
});
|
|
|
|
expect(file.isDirty, isTrue);
|
|
|
|
expect(entry.isDirty, isFalse);
|
|
|
|
expect(entry2.isDirty, isTrue);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|