Skip to content

Commit 6503939

Browse files
committed
feat(integration_test): enable database trigger tests
1 parent 6e9cacb commit 6503939

17 files changed

+89
-1575
lines changed

integration_test/README.md

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,11 @@ The integration test framework:
3636
```bash
3737
cd integration_test
3838

39-
# Generate all v1 suites
40-
npm run generate:v1
41-
42-
# Generate all v2 suites
43-
npm run generate:v2
39+
# Generate all suites
40+
npm run generate
4441

4542
# Generate specific test suite
46-
node scripts/generate.js v1_firestore
43+
node scripts/generate.js v2_firestore
4744

4845
# List available suites
4946
node scripts/generate.js --list
@@ -121,14 +118,14 @@ defaults:
121118
devDependencies: {}
122119

123120
suites:
124-
- name: v1_firestore
125-
description: "V1 Firestore trigger tests"
126-
version: v1
121+
- name: v2_firestore
122+
description: "V2 Firestore trigger tests for Python"
123+
version: v2
127124
service: firestore
128125
functions:
129-
- name: firestoreDocumentOnCreateTests
130-
trigger: onCreate
131-
document: "tests/{testId}"
126+
- name: firestoreOnDocumentCreated
127+
trigger: onDocumentCreated
128+
document: "v2tests/{testId}"
132129
```
133130
134131
## How It Works

integration_test/cloudbuild.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,7 @@ steps:
118118
echo "Running tests on project: ${PROJECT_ID}"
119119
120120
# Use unified test runner (handles generate, deploy, test, cleanup automatically)
121-
# Testing only v1_firestore (the only template that currently exists)
122-
echo "Running v1_firestore integration tests..."
121+
echo "Running integration tests..."
123122
124123
# Find the actual wheel filename
125124
WHEEL_FILE=$$(ls firebase*.whl 2>/dev/null | head -n 1)
@@ -131,7 +130,7 @@ steps:
131130
132131
node scripts/run-tests.js \
133132
--sequential \
134-
v1_firestore \
133+
v2_firestore v2_database \
135134
--use-published-sdk=file:$$WHEEL_FILE
136135
137136
# Artifacts to store

integration_test/config/suites.schema.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@
107107
"name": {
108108
"type": "string",
109109
"description": "Unique identifier for the test suite",
110-
"pattern": "^v[12]_[a-z0-9_]+$",
111-
"examples": ["v1_firestore", "v2_database", "v1_auth_nonblocking"]
110+
"pattern": "^v2_[a-z0-9_]+$",
111+
"examples": ["v2_firestore", "v2_database", "v2_identity"]
112112
},
113113
"projectId": {
114114
"type": "string",
@@ -153,8 +153,8 @@
153153
},
154154
"version": {
155155
"type": "string",
156-
"description": "Firebase Functions SDK version",
157-
"enum": ["v1", "v2"]
156+
"description": "Firebase Functions API version (Python SDK only supports v2)",
157+
"enum": ["v2"]
158158
},
159159
"service": {
160160
"type": "string",

integration_test/config/suites.yaml

Lines changed: 18 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# Firebase Functions Python Integration Test Suites Configuration
2-
# Python SDK only supports 2nd gen functions - all tests deploy to functions-integration-tests-v2
3-
# Contains both V1 and V2 API suites (refers to Firebase service API versions, not Cloud Functions generations)
2+
# Python SDK only supports V2 APIs - all tests deploy to functions-integration-tests-v2
43

54
defaults:
65
projectId: functions-integration-tests-v2
@@ -13,142 +12,7 @@ defaults:
1312

1413
suites:
1514
# ============================================================================
16-
# V1 API Suites (Firebase service V1 APIs as 2nd gen Cloud Functions)
17-
# ============================================================================
18-
19-
# Firestore triggers
20-
- name: v1_firestore
21-
description: "V1 Firestore trigger tests for Python"
22-
version: v1
23-
service: firestore
24-
functions:
25-
- name: firestoreDocumentOnCreateTests
26-
trigger: onCreate
27-
document: "tests/{testId}"
28-
- name: firestoreDocumentOnDeleteTests
29-
trigger: onDelete
30-
document: "tests/{testId}"
31-
- name: firestoreDocumentOnUpdateTests
32-
trigger: onUpdate
33-
document: "tests/{testId}"
34-
- name: firestoreDocumentOnWriteTests
35-
trigger: onWrite
36-
document: "tests/{testId}"
37-
38-
# Realtime Database triggers
39-
- name: v1_database
40-
description: "V1 Realtime Database trigger tests for Python"
41-
version: v1
42-
service: database
43-
functions:
44-
- name: databaseRefOnCreateTests
45-
trigger: onCreate
46-
path: "dbTests/{testId}/start"
47-
- name: databaseRefOnDeleteTests
48-
trigger: onDelete
49-
path: "dbTests/{testId}/start"
50-
- name: databaseRefOnUpdateTests
51-
trigger: onUpdate
52-
path: "dbTests/{testId}/start"
53-
- name: databaseRefOnWriteTests
54-
trigger: onWrite
55-
path: "dbTests/{testId}/start"
56-
57-
# Pub/Sub triggers
58-
- name: v1_pubsub
59-
description: "V1 Pub/Sub trigger tests for Python"
60-
version: v1
61-
service: pubsub
62-
functions:
63-
- name: pubsubOnPublish
64-
trigger: onPublish
65-
topic: "firebase-functions-pubsub-test"
66-
- name: pubsubOnPublishBinary
67-
trigger: onPublish
68-
topic: "firebase-functions-pubsub-test-binary"
69-
- name: pubsubOnMessagePublished
70-
trigger: onMessagePublished
71-
topic: "firebase-functions-pubsub-message"
72-
73-
# Storage triggers
74-
- name: v1_storage
75-
description: "V1 Storage trigger tests for Python"
76-
version: v1
77-
service: storage
78-
functions:
79-
- name: storageOnObjectArchive
80-
trigger: onArchive
81-
bucket: "{{projectId}}.appspot.com"
82-
- name: storageOnObjectDelete
83-
trigger: onDelete
84-
bucket: "{{projectId}}.appspot.com"
85-
- name: storageOnObjectFinalize
86-
trigger: onFinalize
87-
bucket: "{{projectId}}.appspot.com"
88-
- name: storageOnObjectMetadataUpdate
89-
trigger: onMetadataUpdate
90-
bucket: "{{projectId}}.appspot.com"
91-
92-
# Auth triggers
93-
- name: v1_auth_nonblocking
94-
description: "V1 Auth non-blocking trigger tests for Python"
95-
version: v1
96-
service: auth
97-
functions:
98-
- name: authOnCreate
99-
trigger: onCreate
100-
- name: authOnDelete
101-
trigger: onDelete
102-
103-
# Auth blocking triggers
104-
# Commented out due to Cloud Tasks integration issues
105-
# - name: v1_auth_before_create
106-
# description: "V1 Auth beforeCreate blocking trigger tests for Python"
107-
# version: v1
108-
# service: auth
109-
# functions:
110-
# - name: authBeforeCreate
111-
# trigger: beforeCreate
112-
113-
# - name: v1_auth_before_signin
114-
# description: "V1 Auth beforeSignIn blocking trigger tests for Python"
115-
# version: v1
116-
# service: auth
117-
# functions:
118-
# - name: authBeforeSignIn
119-
# trigger: beforeSignIn
120-
121-
# Remote Config triggers
122-
- name: v1_remoteconfig
123-
description: "V1 Remote Config trigger tests for Python"
124-
version: v1
125-
service: remoteconfig
126-
functions:
127-
- name: remoteConfigOnUpdate
128-
trigger: onUpdate
129-
130-
# Test Lab triggers
131-
- name: v1_testlab
132-
description: "V1 Test Lab trigger tests for Python"
133-
version: v1
134-
service: testlab
135-
functions:
136-
- name: testLabOnComplete
137-
trigger: onComplete
138-
139-
# Task Queue functions
140-
# Commented out due to authentication/permission issues
141-
# - name: v1_tasks
142-
# description: "V1 Task Queue function tests for Python"
143-
# version: v1
144-
# service: tasks
145-
# functions:
146-
# - name: taskQueueFunction
147-
# trigger: onDispatch
148-
# queueName: "test-queue"
149-
150-
# ============================================================================
151-
# V2 API Suites (Firebase service V2 APIs as 2nd gen Cloud Functions)
15+
# V2 API Suites (Python SDK only supports V2 Firebase APIs)
15216
# ============================================================================
15317

15418
# V2 Firestore triggers
@@ -159,16 +23,20 @@ suites:
15923
functions:
16024
- name: firestoreOnDocumentCreated
16125
trigger: onDocumentCreated
162-
document: "v2tests/{testId}"
26+
document: "tests/{testId}"
27+
collection: firestoreOnDocumentCreatedTests
16328
- name: firestoreOnDocumentDeleted
16429
trigger: onDocumentDeleted
165-
document: "v2tests/{testId}"
30+
document: "tests/{testId}"
31+
collection: firestoreOnDocumentDeletedTests
16632
- name: firestoreOnDocumentUpdated
16733
trigger: onDocumentUpdated
168-
document: "v2tests/{testId}"
34+
document: "tests/{testId}"
35+
collection: firestoreOnDocumentUpdatedTests
16936
- name: firestoreOnDocumentWritten
17037
trigger: onDocumentWritten
171-
document: "v2tests/{testId}"
38+
document: "tests/{testId}"
39+
collection: firestoreOnDocumentWrittenTests
17240

17341
# V2 Realtime Database triggers
17442
- name: v2_database
@@ -178,16 +46,20 @@ suites:
17846
functions:
17947
- name: databaseOnValueCreated
18048
trigger: onValueCreated
181-
path: "v2tests/{testId}/start"
49+
path: "databaseCreatedTests/{testId}/start"
50+
collection: databaseCreatedTests
18251
- name: databaseOnValueDeleted
18352
trigger: onValueDeleted
184-
path: "v2tests/{testId}/start"
53+
path: "databaseDeletedTests/{testId}/start"
54+
collection: databaseDeletedTests
18555
- name: databaseOnValueUpdated
18656
trigger: onValueUpdated
187-
path: "v2tests/{testId}/start"
57+
path: "databaseUpdatedTests/{testId}/start"
58+
collection: databaseUpdatedTests
18859
- name: databaseOnValueWritten
18960
trigger: onValueWritten
190-
path: "v2tests/{testId}/start"
61+
path: "databaseWrittenTests/{testId}/start"
62+
collection: databaseWrittenTests
19163

19264
# V2 Pub/Sub triggers
19365
- name: v2_pubsub

integration_test/package.json

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,15 @@
55
"description": "Declarative Firebase Functions integration tests",
66
"scripts": {
77
"generate": "node scripts/generate.js",
8-
"generate:v1": "node scripts/generate.js 'v1_*'",
9-
"generate:v2": "node scripts/generate.js 'v2_*'",
108
"test": "jest --forceExit",
119
"run-tests": "node scripts/run-tests.js",
1210
"deploy": "cd generated/functions && firebase deploy --only functions --project functions-integration-tests-v2",
1311
"cloudbuild": "cd .. && gcloud builds submit --config=integration_test/cloudbuild.yaml --project=functions-integration-tests-v2 .",
14-
"test:firestore": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js v1_firestore",
15-
"test:all": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js --sequential 'v1_*'",
16-
"test:all:sequential": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js --sequential 'v1_*'",
17-
"test:all:parallel": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js 'v1_*'",
12+
"test:firestore": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js v2_firestore",
13+
"test:database": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js v2_database",
14+
"test:all": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js --sequential 'v2_*'",
15+
"test:all:sequential": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js --sequential 'v2_*'",
16+
"test:all:parallel": "PROJECT_ID=functions-integration-tests-v2 node scripts/run-tests.js 'v2_*'",
1817
"cleanup": "./scripts/cleanup-suite.sh --project functions-integration-tests-v2",
1918
"cleanup:list": "./scripts/cleanup-suite.sh --list-artifacts",
2019
"clean": "rm -rf generated/*",

integration_test/scripts/generate.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,20 @@ Handlebars.registerHelper("unless", function (conditional, options) {
2626
});
2727

2828
// Python-specific trigger name mapping
29-
const pythonTriggerMap = {
30-
"onCreate": "created",
31-
"onDelete": "deleted",
32-
"onUpdate": "updated",
33-
"onWrite": "written"
34-
};
35-
29+
// Converts trigger names like "onDocumentCreated" or "onCreate" to "created"
3630
Handlebars.registerHelper("pythonTrigger", function(trigger) {
37-
return pythonTriggerMap[trigger] || trigger.replace(/^on/, "").toLowerCase();
31+
// Extract the action verb (last camelCase component after "on")
32+
// Examples:
33+
// onDocumentCreated -> Created -> created
34+
// onValueDeleted -> Deleted -> deleted
35+
// onObjectFinalized -> Finalized -> finalized
36+
// beforeUserCreated -> Created -> created
37+
const match = trigger.match(/(?:on|before)[A-Z][a-z]*([A-Z][a-z]+(?:ed|n))$/);
38+
if (match) {
39+
return match[1].toLowerCase();
40+
}
41+
// Fallback: just remove "on" and lowercase
42+
return trigger.replace(/^on/, "").toLowerCase();
3843
});
3944

4045
/**
@@ -347,12 +352,11 @@ if (import.meta.url === `file://${process.argv[1]}`) {
347352
if (args.length === 0 || args.includes("--help") || args.includes("-h")) {
348353
console.log("Usage: node generate.js <suite-names...> [options]");
349354
console.log("\nExamples:");
350-
console.log(" node generate.js v1_firestore # Single suite");
351-
console.log(" node generate.js v1_firestore v1_database # Multiple suites");
352-
console.log(" node generate.js 'v1_*' # All v1 suites (pattern)");
355+
console.log(" node generate.js v2_firestore # Single suite");
356+
console.log(" node generate.js v2_firestore v2_database # Multiple suites");
353357
console.log(" node generate.js 'v2_*' # All v2 suites (pattern)");
354358
console.log(" node generate.js --list # List available suites");
355-
console.log(" node generate.js --config config/suites.yaml v1_firestore");
359+
console.log(" node generate.js --config config/suites.yaml v2_firestore");
356360
console.log("\nOptions:");
357361
console.log(" --config <path> Path to configuration file (default: auto-detect)");
358362
console.log(" --list List all available suites");

0 commit comments

Comments
 (0)