diff --git a/lib/firebase_functions.dart b/lib/firebase_functions.dart index e7517c2..a3b8db1 100644 --- a/lib/firebase_functions.dart +++ b/lib/firebase_functions.dart @@ -54,7 +54,7 @@ library; // Re-export Firestore types for convenience -export 'package:googleapis_firestore/googleapis_firestore.dart' +export 'package:google_cloud_firestore/google_cloud_firestore.dart' show DocumentData, DocumentSnapshot, QueryDocumentSnapshot; // Re-export Shelf types for convenience export 'package:shelf/shelf.dart' show Request, Response; diff --git a/lib/src/firebase.dart b/lib/src/firebase.dart index a87e36b..ba10032 100644 --- a/lib/src/firebase.dart +++ b/lib/src/firebase.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:io'; import 'package:dart_firebase_admin/dart_firebase_admin.dart'; -import 'package:googleapis_firestore/googleapis_firestore.dart' as gfs; +import 'package:google_cloud_firestore/google_cloud_firestore.dart' as gfs; import 'package:shelf/shelf.dart'; import 'alerts/alerts_namespace.dart'; diff --git a/lib/src/firestore/document_snapshot.dart b/lib/src/firestore/document_snapshot.dart index 0391d4f..ae37987 100644 --- a/lib/src/firestore/document_snapshot.dart +++ b/lib/src/firestore/document_snapshot.dart @@ -1,4 +1,4 @@ -import 'package:googleapis_firestore/googleapis_firestore.dart' +import 'package:google_cloud_firestore/google_cloud_firestore.dart' show DocumentData; export '../common/change.dart'; diff --git a/lib/src/firestore/firestore_namespace.dart b/lib/src/firestore/firestore_namespace.dart index 6ad1891..d0cd08c 100644 --- a/lib/src/firestore/firestore_namespace.dart +++ b/lib/src/firestore/firestore_namespace.dart @@ -453,7 +453,12 @@ class FirestoreNamespace extends FunctionsNamespace { final params = _extractParams(document, headers.documentPath); final parsed = await _parseBody(request); - final snapshot = parsed?['value']; + final snapshotKey = + (methodName == 'onDocumentDeleted' || + methodName == 'onDocumentDeletedWithAuthContext') + ? 'old_value' + : 'value'; + final snapshot = parsed?[snapshotKey]; try { if (withAuthContext) { diff --git a/pubspec.yaml b/pubspec.yaml index 7b26128..f31a529 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,11 +31,11 @@ dependencies: url: https://github.com/invertase/dart_firebase_admin.git ref: next path: packages/dart_firebase_admin - googleapis_firestore: + google_cloud_firestore: git: url: https://github.com/invertase/dart_firebase_admin.git ref: next - path: packages/googleapis_firestore + path: packages/google_cloud_firestore stack_trace: ^1.12.1 protobuf: ^6.0.0 http: ^1.6.0 @@ -57,11 +57,11 @@ dev_dependencies: yaml: ^3.1.3 dependency_overrides: - googleapis_firestore: + google_cloud_firestore: git: url: https://github.com/invertase/dart_firebase_admin.git ref: next - path: packages/googleapis_firestore + path: packages/google_cloud_firestore googleapis_storage: git: url: https://github.com/invertase/dart_firebase_admin.git diff --git a/test/e2e/tests/firestore_tests.dart b/test/e2e/tests/firestore_tests.dart index 5bf5039..3d49816 100644 --- a/test/e2e/tests/firestore_tests.dart +++ b/test/e2e/tests/firestore_tests.dart @@ -98,13 +98,26 @@ void runFirestoreTests( await client.deleteDocument('users/$testUserId'); print('✓ Document deleted successfully'); - // Wait for trigger + // Wait for trigger to fire await Future.delayed(const Duration(seconds: 2)); // Verify document no longer exists final doc = await client.getDocument('users/$testUserId'); expect(doc, isNull, reason: 'Document should not exist after deletion'); print('✓ Document deletion verified'); + + // Verify handler received the pre-deletion document data by checking + // the structured log line emitted by the handler. + final outputLogs = getEmulator().outputLines.join('\n'); + expect( + outputLogs, + contains('[onDocumentDeleted] hasData=true'), + reason: 'event.data should be non-null for delete events', + ); + expect(outputLogs, contains('name=To Be Deleted')); + expect(outputLogs, contains('email=delete@example.com')); + expect(outputLogs, contains('finalMessage=goodbye')); + print('✓ Handler received correct pre-deletion document data'); }); test('onDocumentWritten fires for all operations', () async { diff --git a/test/fixtures/dart_reference/lib/main.dart b/test/fixtures/dart_reference/lib/main.dart index 0737458..9c87f6a 100644 --- a/test/fixtures/dart_reference/lib/main.dart +++ b/test/fixtures/dart_reference/lib/main.dart @@ -184,6 +184,12 @@ void main(List args) async { final data = event.data?.data(); print('Document deleted: users/${event.params['userId']}'); print(' Final data: $data'); + print( + '[onDocumentDeleted] hasData=${data != null}' + ' name=${data?['name']}' + ' email=${data?['email']}' + ' finalMessage=${data?['finalMessage']}', + ); }); firebase.firestore.onDocumentWritten(document: 'users/{userId}', (