Skip to content

Commit

Permalink
feat: cv_firestore document clone
Browse files Browse the repository at this point in the history
  • Loading branch information
alextekartik committed Oct 22, 2024
1 parent d628f2b commit 1dc02ca
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 10 deletions.
1 change: 1 addition & 0 deletions app_cv_firestore/lib/app_cv_firestore_v2.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export 'src/v2/cv_collection_reference.dart'
export 'src/v2/cv_document.dart'
show
CvFirestoreDocument,
CvFirestoreDocumentCloneExt,
CvFirestoreDocumentBase,
CvFirestoreMapDocument,
CvFirestoreDocumentExt;
Expand Down
14 changes: 9 additions & 5 deletions app_cv_firestore/lib/src/v2/cv_document.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,18 @@ class _FsDocumentMap extends ContentValuesMap
with _WithPath
implements CvFirestoreMapDocument {}

/*
/// Easy extension
extension CvFsDocumentExt on CvFsDocument {
Future<void> add(Firestore)
extension CvFirestoreDocumentCloneExt<T extends CvFirestoreDocument> on T {
/// Copy content and ref if not null
T fsClone() {
var newRecord = clone();
if (hasId) {
newRecord.path = path;
}
return newRecord;
}
}

*/
class _FsDocumentWithCvFields extends CvBase
with _WithPath
implements CvFirestoreMapDocument {
Expand Down
17 changes: 17 additions & 0 deletions app_cv_firestore/test/app_cv_firestore_v2_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,23 @@ void main() {
expect(docRef.collection('sub').path, 'test/1/sub');
});

test('document.clone', () async {
var docRef = CvDocumentReference<CvFsSingleString>('test/1');
var originalDoc = docRef.cv()..text.v = 'v1';
var doc = originalDoc.fsClone();
expect(doc, originalDoc);
expect(doc, isNot(same(originalDoc)));
expect(doc.text.v, 'v1');
expect(doc.path, 'test/1');

originalDoc = CvFsSingleString()..text.v = 'v2';
doc = originalDoc.fsClone();
expect(doc, originalDoc);
expect(doc, isNot(same(originalDoc)));
expect(doc.text.v, 'v2');
expect(doc.pathOrNull, isNull);
});

test('document.set', () async {
var docRef = CvDocumentReference<CvFsSingleString>('test/set');

Expand Down
2 changes: 1 addition & 1 deletion app_cv_sembast/lib/src/db_record.dart
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ extension DbRecordCloneExt<T extends DbRecord> on T {
/// Copy content and ref if not null
T dbClone() {
var newRecord = clone();
if (idOrNull != null) {
if (hasId) {
newRecord.rawRef = rawRef;
}
return newRecord;
Expand Down
13 changes: 9 additions & 4 deletions app_cv_sembast/test/app_cv_sembast_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,18 @@ void main() {
expect(dbRecord.hasId, isTrue);
});
test('clone', () async {
var record = (cvIntRecordFactory.store<DbTest>('test').record(1).cv()
..value.v = 2)
.dbClone();
var original = cvIntRecordFactory.store<DbTest>('test').record(1).cv()
..value.v = 2;
var record = original.dbClone();
expect(record, original);
expect(record, isNot(same(original)));
expect(record.value.v, 2);
expect(record.id, 1);

record = DbTest()..value.v = 3;
original = DbTest()..value.v = 3;
record = original.dbClone();
expect(record, original);
expect(record, isNot(same(original)));
expect(record.value.v, 3);
expect(record.idOrNull, isNull);
});
Expand Down

0 comments on commit 1dc02ca

Please sign in to comment.