Skip to content

Commit db6d2b2

Browse files
committed
tracer bundle tests work manually
1 parent b4c82ba commit db6d2b2

File tree

5 files changed

+226
-23
lines changed

5 files changed

+226
-23
lines changed

app/tests/firestore/web_client/page.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,18 @@
1616
*/
1717
import type { Metadata } from 'next'
1818
import CSRTestRunner from '@/components/app_tests/firestore/csr_test_runner';
19+
import { buildSerializedFirestoreData, SerializedFirestoreData } from '@/lib/app_tests/firestore/test';
1920

2021
export const metadata: Metadata = {
2122
title: 'Firestore Web SDK CSR test'
2223
}
2324

24-
export default function Page() {
25+
export default async function Page() {
26+
const serializedFirestoreData : SerializedFirestoreData = await buildSerializedFirestoreData();
2527
return (
2628
<>
2729
<h1>Firestore CSR Test results:</h1>
28-
<CSRTestRunner />
30+
<CSRTestRunner serializedFirestoreData={serializedFirestoreData} />
2931
</>
3032
);
3133
}

src/components/app_tests/firestore/csr_test_runner.tsx

Lines changed: 96 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,113 @@
1717
'use client'
1818

1919
import { useState, useEffect } from 'react'
20-
import { testFirestore, initializeTestResults } from '@/lib/app_tests/firestore/test';
20+
import { deleteApp, initializeApp } from 'firebase/app';
21+
import { testFirestore, initializeTestResults, SerializedFirestoreData, TestResults } from '@/lib/app_tests/firestore/test';
2122
import ResultsDisplay from './results_display';
23+
import {
24+
DocumentSnapshot,
25+
getFirestore,
26+
onSnapshotResume,
27+
QuerySnapshot,
28+
documentSnapshotFromJSON,
29+
querySnapshotFromJSON
30+
} from 'firebase/firestore';
31+
import { firebaseConfig } from '@/lib/app_tests/firebase';
32+
import { OK } from '@/lib/app_tests/util';
2233

23-
export default function CsrTestRunner() {
34+
function validateDocumentData(documentData): boolean {
35+
if (documentData !== undefined) {
36+
if (
37+
documentData.aBoolean && documentData.aBoolean === true &&
38+
documentData.aName && documentData.aName === "A name" &&
39+
documentData.anInteger && documentData.anInteger === 1234) {
40+
return true;
41+
}
42+
}
43+
return false;
44+
}
45+
async function runDeserializationTests(
46+
testResults: TestResults,
47+
serializedFirestoreData: SerializedFirestoreData
48+
): Promise<TestResults> {
49+
const firebase = initializeApp(firebaseConfig);
50+
const firestore = getFirestore(firebase);
51+
52+
// DocumentSnapshotTests
53+
if (serializedFirestoreData.documentSnapshotJson != null) {
54+
const snapshot = documentSnapshotFromJSON(firestore, serializedFirestoreData.documentSnapshotJson);
55+
const data = snapshot.data();
56+
if (validateDocumentData(data)) {
57+
testResults.clientSideDocumentSnapshotResult = OK;
58+
}
59+
60+
// onResume Test
61+
const bundleDocSnapshotPromise = new Promise<void>((resolve, reject) => {
62+
let completed: boolean = false;
63+
setTimeout(() => { if (!completed) reject(); }, 2000);
64+
const unsubscribe = onSnapshotResume(
65+
firestore,
66+
serializedFirestoreData.documentSnapshotJson!,
67+
(docSnapshot: DocumentSnapshot
68+
) => {
69+
if (docSnapshot.exists()) {
70+
const docData = docSnapshot.data();
71+
if (validateDocumentData(docSnapshot.data())) {
72+
unsubscribe();
73+
testResults.clientSideDocumentSnapshotOnResumeResult = OK;
74+
completed = true;
75+
resolve();
76+
}
77+
}
78+
});
79+
});
80+
await bundleDocSnapshotPromise;
81+
}
82+
83+
// QuerySnapshotTests
84+
if (serializedFirestoreData.querySnapshotJson != null) {
85+
const snapshot = querySnapshotFromJSON(firestore, serializedFirestoreData.querySnapshotJson);
86+
if (snapshot.docs.length === 1 && validateDocumentData(snapshot.docs[0].data())) {
87+
testResults.clientSideQuerySnapshotResult = OK;
88+
}
89+
90+
// onResume test
91+
const bundleQuerySnapshotPromise = new Promise<void>((resolve, reject) => {
92+
let completed: boolean = false;
93+
setTimeout(() => { if (!completed) reject(); }, 2000);
94+
const unsubscribe = onSnapshotResume(
95+
firestore,
96+
serializedFirestoreData.querySnapshotJson!,
97+
(querySnapshot: QuerySnapshot
98+
) => {
99+
if (querySnapshot.docs.length === 1 && validateDocumentData(querySnapshot.docs[0].data())) {
100+
testResults.clientSideQuerySnapshotOnResumeResult = OK;
101+
unsubscribe();
102+
completed = true;
103+
resolve();
104+
}
105+
});
106+
});
107+
await bundleQuerySnapshotPromise;
108+
}
109+
return testResults;
110+
}
111+
112+
export default function CsrTestRunner(props) {
24113
const [testStatus, setTestStatus] = useState<string>("running...");
25-
const [testResults, setTestResults] = useState(initializeTestResults(/* isServer= */ false));
114+
const [testResults, setTestResults] = useState(initializeTestResults());
26115
useEffect(() => {
27116
const asyncTest = async () => {
28-
setTestResults(await testFirestore(/* isServer= */ false));
117+
let testResults = await testFirestore(/* isServer= */ false);
118+
testResults = await runDeserializationTests(testResults, props.serializedFirestoreData);
119+
setTestResults(testResults);
29120
setTestStatus("Complete!");
30121
}
31122
asyncTest().catch((e) => {
32123
console.error("Error encountered during testing: ", e);
33124
setTestStatus("Errored!");
34125
});
35-
}, []);
126+
}, [props.serializedFirestoreData]);
36127

37128
return (
38129
<ResultsDisplay statusString={testStatus} testResults={testResults} />

src/components/app_tests/firestore/results_display.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,22 @@ export default function ResultsDisplay({ statusString, testResults }) {
2929
<h4 title="getDocResult">getDocResult: {testResults.getDocResult}</h4>
3030
<h4 title="querySnapshotResult">querySnapshotResult: {testResults.querySnapshotResult}</h4>
3131
<h4 title="documentSnapshotBundleResult">documentSnapshotBundleResult: {testResults.documentSnapshotBundleResult}</h4>
32+
<h4 title="reconstitutedDocDataResult">reconstitutedDocDataResult: {testResults.reconstitutedDocDataResult}</h4>
3233
<h4 title="documentSnapshotOnSnapshotResumeResult">documentSnapshotOnSnapshotResumeResult: {testResults.documentSnapshotOnSnapshotResumeResult}</h4>
3334
<h4 title="querySnapshotOnSnapshotResumeResult">querySnapshotOnSnapshotResumeResult: {testResults.querySnapshotOnSnapshotResumeResult}</h4>
3435
<h4 title="querySnapshotBundleResult">querySnapshotBundleResult: {testResults.querySnapshotBundleResult}</h4>
36+
<h4 title="reconstitutedQueryDataResult">reconstitutedQueryDataResult: {testResults.reconstitutedQueryDataResult}</h4>
3537
<h4 title="deleteDocResult">deleteDocResult: {testResults.deleteDocResult}</h4>
3638
<h4 title="onSnapshotDeleteDR">onSnapshotDeleteDocResult: {testResults.onSnapshotDeleteDocResult}</h4>
3739
<h4 title="getDeletedDocResult">getDeletedDocResult: {testResults.getDeletedDocResult}</h4>
3840
<h4 title="deleteAppResult">deleteAppResult: {testResults.deleteAppResult}</h4>
41+
42+
<h3> CSR-side deserialization tests </h3>
43+
<h4 title="clientSideDocumentSnapshotResult">clientSideDocumentSnapshotResult: {testResults.clientSideDocumentSnapshotResult}</h4>
44+
<h4 title="clientSideDocumentSnapshotOnResumeResult">clientSideDocumentSnapshotOnResumeResult: {testResults.clientSideDocumentSnapshotOnResumeResult}</h4>
45+
<h4 title="clientSideQuerySnapshotResult">clientSideQuerySnapshotResult: {testResults.clientSideQuerySnapshotResult}</h4>
46+
<h4 title="clientSideQuerySnapshotOnResumeResult">clientSideQuerySnapshotOnResumeResult: {testResults.clientSideQuerySnapshotOnResumeResult}</h4>
47+
3948
<p />
4049
<Link href="/">Back to test index</Link>
4150
</>

0 commit comments

Comments
 (0)