Skip to content

Commit b906693

Browse files
committed
feat: Add missing functions and improve retry in beforeAll
1 parent 5adc39e commit b906693

23 files changed

+703
-247
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import json
2+
3+
from firebase_admin import firestore
4+
from firebase_functions import logger
5+
from firebase_functions.db_fn import (on_value_created, Event, on_value_deleted,
6+
on_value_updated, on_value_written,
7+
Change)
8+
9+
from region import REGION
10+
11+
12+
@on_value_created(reference="databaseCreatedTests/{testId}/start",
13+
region=REGION)
14+
def databaseCreatedTests(event: Event[object]):
15+
test_id = event.params['testId']
16+
17+
firestore.client().collection("databaseCreatedTests").document(test_id).set(
18+
{
19+
"testId": test_id,
20+
"type": event.type,
21+
"id": event.id,
22+
"time": event.time,
23+
"url": event.reference,
24+
})
25+
26+
27+
@on_value_deleted(reference="databaseDeletedTests/{testId}/start",
28+
region=REGION)
29+
def databaseDeletedTests(event: Event[object]):
30+
test_id = event.params['testId']
31+
32+
firestore.client().collection("databaseDeletedTests").document(test_id).set(
33+
{
34+
"testId": test_id,
35+
"type": event.type,
36+
"id": event.id,
37+
"time": event.time,
38+
"url": event.reference,
39+
})
40+
41+
42+
@on_value_updated(reference="databaseUpdatedTests/{testId}/start",
43+
region=REGION)
44+
def databaseUpdatedTests(event: Event[Change[object]]):
45+
test_id = event.params['testId']
46+
data = event.data.after
47+
48+
firestore.client().collection("databaseUpdatedTests").document(test_id).set(
49+
{
50+
"testId": test_id,
51+
"type": event.type,
52+
"id": event.id,
53+
"time": event.time,
54+
"url": event.reference,
55+
"data": json.dumps(data if data is not None else {})
56+
})
57+
58+
59+
@on_value_written(reference="databaseWrittenTests/{testId}/start",
60+
region=REGION)
61+
def databaseWrittenTests(event: Event[Change[object]]):
62+
test_id = event.params['testId']
63+
if event.data.after is None:
64+
logger.info(
65+
f"Event for {test_id} is None; presuming data cleanup, so skipping."
66+
)
67+
return
68+
69+
firestore.client().collection("databaseWrittenTests").document(test_id).set(
70+
{
71+
"testId": test_id,
72+
"type": event.type,
73+
"id": event.id,
74+
"time": event.time,
75+
"url": event.reference,
76+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import json
2+
3+
from firebase_admin import firestore
4+
from firebase_functions.eventarc_fn import (on_custom_event_published,
5+
CloudEvent)
6+
7+
8+
@on_custom_event_published(event_type="achieved-leaderboard")
9+
def eventarcOnCustomEventPublishedTests(event: CloudEvent):
10+
test_id = event.data["testId"]
11+
12+
firestore.client().collection(
13+
"eventarcOnCustomEventPublishedTests").document(test_id).set({
14+
"id": event.id,
15+
"type": event.type,
16+
"time": event.time,
17+
"source": event.source,
18+
"data": json.dumps(event.data),
19+
})
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,67 @@
11
from firebase_admin import firestore
2-
from firebase_functions import firestore_fn, logger
2+
from firebase_functions.firestore_fn import (on_document_created, Event,
3+
DocumentSnapshot,
4+
on_document_deleted,
5+
on_document_updated,
6+
on_document_written)
37
from region import REGION
48

59

6-
@firestore_fn.on_document_created(document='tests/{documentId}',
7-
region=REGION,
8-
timeout_sec=540)
9-
def firestoreOnDocumentCreatedTests(
10-
event: firestore_fn.Event[firestore_fn.DocumentSnapshot]):
11-
documentId = event.params['documentId']
10+
@on_document_created(document='tests/{documentId}',
11+
region=REGION,
12+
timeout_sec=540)
13+
def firestoreOnDocumentCreatedTests(event: Event[DocumentSnapshot]):
14+
document_id = event.params['documentId']
1215

13-
firestore.client().collection('firestoreOnDocumentCreatedTests').document(documentId).set({
14-
'time': event.time,
15-
'id': event.id,
16-
'type': event.type,
17-
'source': event.source,
18-
})
16+
firestore.client().collection('firestoreOnDocumentCreatedTests').document(
17+
document_id).set({
18+
'time': event.time,
19+
'id': event.id,
20+
'type': event.type,
21+
'source': event.source,
22+
})
1923

2024

21-
@firestore_fn.on_document_deleted(document='tests/{documentId}',
22-
region=REGION,
23-
timeout_sec=540)
24-
def firestoreOnDocumentDeletedTests(
25-
event: firestore_fn.Event[firestore_fn.DocumentSnapshot]):
26-
documentId = event.params['documentId']
25+
@on_document_deleted(document='tests/{documentId}',
26+
region=REGION,
27+
timeout_sec=540)
28+
def firestoreOnDocumentDeletedTests(event: Event[DocumentSnapshot]):
29+
document_id = event.params['documentId']
2730

2831
firestore.client().collection('firestoreOnDocumentDeletedTests').document(
29-
documentId).set({
30-
'time': event.time,
31-
'id': event.id,
32-
'type': event.type,
33-
'source': event.source,
34-
})
32+
document_id).set({
33+
'time': event.time,
34+
'id': event.id,
35+
'type': event.type,
36+
'source': event.source,
37+
})
3538

3639

37-
@firestore_fn.on_document_updated(document='tests/{documentId}',
38-
region=REGION,
39-
timeout_sec=540)
40-
def firestoreOnDocumentUpdatedTests(
41-
event: firestore_fn.Event[firestore_fn.DocumentSnapshot]):
42-
documentId = event.params['documentId']
40+
@on_document_updated(document='tests/{documentId}',
41+
region=REGION,
42+
timeout_sec=540)
43+
def firestoreOnDocumentUpdatedTests(event: Event[DocumentSnapshot]):
44+
document_id = event.params['documentId']
4345

4446
firestore.client().collection('firestoreOnDocumentUpdatedTests').document(
45-
documentId).set({
46-
'time': event.time,
47-
'id': event.id,
48-
'type': event.type,
49-
'source': event.source,
50-
})
47+
document_id).set({
48+
'time': event.time,
49+
'id': event.id,
50+
'type': event.type,
51+
'source': event.source,
52+
})
5153

5254

53-
@firestore_fn.on_document_written(document='tests/{documentId}',
54-
region=REGION,
55-
timeout_sec=540)
56-
def firestoreOnDocumentWrittenTests(
57-
event: firestore_fn.Event[firestore_fn.DocumentSnapshot]):
58-
documentId = event.params['documentId']
55+
@on_document_written(document='tests/{documentId}',
56+
region=REGION,
57+
timeout_sec=540)
58+
def firestoreOnDocumentWrittenTests(event: Event[DocumentSnapshot]):
59+
document_id = event.params['documentId']
5960

6061
firestore.client().collection('firestoreOnDocumentWrittenTests').document(
61-
documentId).set({
62-
'time': event.time,
63-
'id': event.id,
64-
'type': event.type,
65-
'source': event.source,
66-
})
62+
document_id).set({
63+
'time': event.time,
64+
'id': event.id,
65+
'type': event.type,
66+
'source': event.source,
67+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from firebase_admin import firestore
2+
from firebase_functions.https_fn import (on_call, CallableRequest, on_request,
3+
Request)
4+
5+
from region import REGION
6+
7+
8+
@on_call(invoker="private", region=REGION)
9+
def httpsOnCallV2Tests(request: CallableRequest):
10+
data = request.data
11+
firestore.client().collection("httpsOnCallV2Tests").document(
12+
data["testId"]).set(data)
13+
14+
15+
@on_request(invoker="private", region=REGION)
16+
def httpsOnRequestV2Tests(request: Request):
17+
data = request.json
18+
firestore.client().collection("httpsOnRequestV2Tests").document(
19+
data["testId"]).set(data)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from firebase_admin import firestore
2+
from firebase_functions.identity_fn import (before_user_created,
3+
BeforeCreateResponse,
4+
before_user_signed_in,
5+
BeforeSignInResponse,
6+
AuthBlockingEvent)
7+
8+
9+
@before_user_created()
10+
def identityBeforeUserCreatedTests(
11+
event: AuthBlockingEvent) -> BeforeCreateResponse:
12+
uid = event.data.uid
13+
14+
firestore.client().collection("identityBeforeUserCreatedTests").document(
15+
uid).set({
16+
"eventId": event.event_id,
17+
"timestamp": event.timestamp,
18+
})
19+
20+
return BeforeCreateResponse(**event.data.__dict__)
21+
22+
23+
@before_user_signed_in()
24+
def identityBeforeUserSignedInTests(
25+
event: AuthBlockingEvent) -> BeforeSignInResponse:
26+
uid = event.data.uid
27+
28+
firestore.client().collection("identityBeforeUserSignedInTests").document(
29+
uid).set({
30+
"eventId": event.event_id,
31+
"timestamp": event.timestamp,
32+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import json
2+
3+
from firebase_admin import firestore
4+
from firebase_functions import logger
5+
from firebase_functions.pubsub_fn import (on_message_published, CloudEvent,
6+
MessagePublishedData)
7+
8+
from region import REGION
9+
10+
11+
@on_message_published(topic="custom_message_tests", region=REGION)
12+
def pubsubOnMessagePublishedTests(
13+
event: CloudEvent[MessagePublishedData[dict]]) -> None:
14+
json_data = event.data.message.json
15+
if json_data is None:
16+
logger.error("Message is not JSON")
17+
return
18+
19+
test_id = json_data["testId"]
20+
21+
firestore.client().collection("pubsubOnMessagePublishedTests").document(
22+
test_id).set({
23+
"id": event.id,
24+
"source": event.source,
25+
"subject": event.subject,
26+
"time": event.time,
27+
"type": event.type,
28+
"message": json.dumps(event.data.message),
29+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from firebase_admin import firestore
2+
from firebase_functions.remote_config_fn import (on_config_updated, CloudEvent,
3+
ConfigUpdateData)
4+
5+
from region import REGION
6+
7+
8+
@on_config_updated(region=REGION)
9+
def remoteConfigOnConfigUpdatedTests(
10+
event: CloudEvent[ConfigUpdateData]) -> None:
11+
test_id = event.data.description
12+
13+
firestore.client().collection("remoteConfigOnConfigUpdatedTests").document(
14+
test_id).set({
15+
"testId": test_id,
16+
"type": event.type,
17+
"id": event.id,
18+
"time": event.time,
19+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from firebase_admin import firestore
2+
from firebase_functions import logger
3+
from firebase_functions.scheduler_fn import (on_schedule, ScheduledEvent)
4+
5+
from region import REGION
6+
7+
8+
@on_schedule(schedule="every 10 hours", region=REGION)
9+
def schedule(event: ScheduledEvent):
10+
test_id = event.job_name
11+
if test_id is None:
12+
logger.error("TestId not found for scheduled function execution")
13+
return
14+
15+
firestore.client().collection("schedulerOnScheduleV2Tests").document(
16+
test_id).set({"success": True})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from firebase_admin import firestore
2+
from firebase_functions import logger
3+
from firebase_functions.storage_fn import (on_object_deleted,
4+
on_object_finalized,
5+
on_object_metadata_updated,
6+
CloudEvent, StorageObjectData)
7+
8+
from region import REGION
9+
10+
11+
@on_object_deleted(region=REGION)
12+
def storageOnDeleteTests(event: CloudEvent[StorageObjectData]) -> None:
13+
test_id = event.data.name.split(".")[0]
14+
if test_id is None:
15+
logger.error("TestId not found for storage onObjectDeleted")
16+
return
17+
18+
firestore.client().collection("storageOnObjectDeletedTests").document(
19+
test_id).set({
20+
"id": event.id,
21+
"time": event.time,
22+
"type": event.type,
23+
"source": event.source,
24+
})
25+
26+
27+
@on_object_finalized(region=REGION)
28+
def storageOnFinalizeTests(event: CloudEvent[StorageObjectData]) -> None:
29+
test_id = event.data.name.split(".")[0]
30+
if test_id is None:
31+
logger.error("TestId not found for storage onObjectFinalized")
32+
return
33+
34+
firestore.client().collection("storageOnObjectFinalizedTests").document(
35+
test_id).set({
36+
"id": event.id,
37+
"time": event.time,
38+
"type": event.type,
39+
"source": event.source,
40+
})
41+
42+
43+
@on_object_metadata_updated(region=REGION)
44+
def storageOnMetadataUpdateTests(event: CloudEvent[StorageObjectData]) -> None:
45+
test_id = event.data.name.split(".")[0]
46+
if test_id is None:
47+
logger.error("TestId not found for storage onObjectMetadataUpdated")
48+
return
49+
50+
firestore.client().collection(
51+
"storageOnObjectMetadataUpdatedTests").document(test_id).set({
52+
"id": event.id,
53+
"time": event.time,
54+
"type": event.type,
55+
"source": event.source,
56+
})

0 commit comments

Comments
 (0)