Skip to content

Commit c11dfd8

Browse files
committed
fix: update tests to use emulator logs instead
1 parent 0ebc297 commit c11dfd8

File tree

2 files changed

+19
-68
lines changed

2 files changed

+19
-68
lines changed

test/e2e/tests/firestore_tests.dart

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -98,38 +98,29 @@ void runFirestoreTests(
9898
await client.deleteDocument('users/$testUserId');
9999
print('✓ Document deleted successfully');
100100

101-
// Wait for trigger to fire and write result
101+
// Wait for trigger to fire
102102
await Future<void>.delayed(const Duration(seconds: 2));
103103

104104
// Verify document no longer exists
105105
final doc = await client.getDocument('users/$testUserId');
106106
expect(doc, isNull, reason: 'Document should not exist after deletion');
107107
print('✓ Document deletion verified');
108108

109-
// Poll for the side-channel result doc written by the handler
110-
// (up to 5 attempts × 500ms = 2.5s extra headroom)
111-
Map<String, dynamic>? result;
112-
for (var i = 0; i < 5; i++) {
113-
result = await client.getDocument(
114-
'trigger_results/deleted_$testUserId',
115-
);
116-
if (result != null) break;
117-
await Future<void>.delayed(const Duration(milliseconds: 500));
118-
}
119-
120-
expect(
121-
result,
122-
isNotNull,
123-
reason: 'trigger_results doc should have been written by handler',
124-
);
109+
// Verify handler received the pre-deletion document data by checking
110+
// the structured log line emitted by the handler.
111+
final emulator = getEmulator();
112+
final allLogs = [
113+
...emulator.outputLines,
114+
...emulator.errorLines,
115+
].join('\n');
125116
expect(
126-
result!['fields']['hasData']['booleanValue'],
127-
isTrue,
117+
allLogs,
118+
contains('[onDocumentDeleted] hasData=true'),
128119
reason: 'event.data should be non-null for delete events',
129120
);
130-
expect(result['fields']['name']['stringValue'], 'To Be Deleted');
131-
expect(result['fields']['email']['stringValue'], 'delete@example.com');
132-
expect(result['fields']['finalMessage']['stringValue'], 'goodbye');
121+
expect(allLogs, contains('name=To Be Deleted'));
122+
expect(allLogs, contains('email=delete@example.com'));
123+
expect(allLogs, contains('finalMessage=goodbye'));
133124
print('✓ Handler received correct pre-deletion document data');
134125
});
135126

@@ -309,12 +300,6 @@ void runFirestoreTests(
309300
} catch (e) {
310301
// Ignore errors during cleanup
311302
}
312-
// Clean up side-channel result doc written by the onDocumentDeleted handler
313-
try {
314-
await client.deleteDocument('trigger_results/deleted_$testUserId');
315-
} catch (e) {
316-
// Ignore errors during cleanup
317-
}
318303
});
319304
});
320305
}

test/fixtures/dart_reference/lib/main.dart

Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import 'dart:convert';
2-
import 'dart:io';
3-
41
import 'package:firebase_functions/firebase_functions.dart';
52

63
// =============================================================================
@@ -187,43 +184,12 @@ void main(List<String> args) async {
187184
final data = event.data?.data();
188185
print('Document deleted: users/${event.params['userId']}');
189186
print(' Final data: $data');
190-
191-
// write result to Firestore so the e2e test can assert on
192-
// what the handler actually received (exposes the old_value/value).
193-
final userId = event.params['userId'] as String;
194-
final firestoreHost =
195-
Platform.environment['FIRESTORE_EMULATOR_HOST'] ?? '127.0.0.1:8080';
196-
final parts = firestoreHost.split(':');
197-
final host = parts[0];
198-
final port = int.tryParse(parts.length > 1 ? parts[1] : '8080') ?? 8080;
199-
200-
final resultFields = <String, dynamic>{
201-
'hasData': {'booleanValue': data != null},
202-
'name': {'stringValue': data?['name']?.toString() ?? ''},
203-
'email': {'stringValue': data?['email']?.toString() ?? ''},
204-
'finalMessage': {
205-
'stringValue': data?['finalMessage']?.toString() ?? '',
206-
},
207-
};
208-
209-
try {
210-
final httpClient = HttpClient();
211-
final req = await httpClient.post(
212-
host,
213-
port,
214-
'/v1/projects/demo-test/databases/(default)/documents/'
215-
'trigger_results?documentId=deleted_$userId',
216-
);
217-
req.headers.contentType = ContentType.json;
218-
req.write(jsonEncode({'fields': resultFields}));
219-
await req.close();
220-
httpClient.close();
221-
} catch (e) {
222-
print(
223-
' Firestore write to verify handler '
224-
'received event.data failed: $e',
225-
);
226-
}
187+
print(
188+
'[onDocumentDeleted] hasData=${data != null}'
189+
' name=${data?['name']}'
190+
' email=${data?['email']}'
191+
' finalMessage=${data?['finalMessage']}',
192+
);
227193
});
228194

229195
firebase.firestore.onDocumentWritten(document: 'users/{userId}', (

0 commit comments

Comments
 (0)