Skip to content

Commit fc2a96c

Browse files
authored
Added Firestore tests (#7)
Added Firestore tests. Additional Changes: - Renamed `testApp()` to `test{productName}()` for each of the test routines. - Updated the Auth test's `onAuthStateChanged` listener to: - have a timeout waiting for the user to login. - not fail if the provide user is null on its first invocation. - Further reduced flake by setting the number of workers to 1.
1 parent 8391850 commit fc2a96c

File tree

17 files changed

+393
-27
lines changed

17 files changed

+393
-27
lines changed

app/page.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,14 @@ export default async function Page() {
5151
<p />
5252
<li>Database</li>
5353
<ul>
54-
<li><Link href="/tests/database/web_client">Auth Web SDK client-side tests</Link></li>
55-
<li><Link href="/tests/database/web_ssr">Auth Web SDK server-side tests</Link></li>
54+
<li><Link href="/tests/database/web_client">Database Web SDK client-side tests</Link></li>
55+
<li><Link href="/tests/database/web_ssr">Database Web SDK server-side tests</Link></li>
56+
</ul>
57+
<p />
58+
<li>Firestore</li>
59+
<ul>
60+
<li><Link href="/tests/firestore/web_client">Firestore Web SDK client-side tests</Link></li>
61+
<li><Link href="/tests/firestore/web_ssr">Firestore Web SDK server-side tests</Link></li>
5662
</ul>
5763
</ul>
5864
</>

app/tests/analytics/components/csr_test_runner.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717
'use client'
1818

1919
import { useState, useEffect } from 'react'
20-
import { testApp, initializeTestResults } from '../lib/test';
20+
import { testAnalytics, initializeTestResults } from '../lib/test';
2121
import ResultsDisplay from './results_display';
2222

2323
export default function ClientResults() {
2424
const [testStatus, setTestStatus] = useState<string>("running...");
2525
const [testResults, setTestResults] = useState(initializeTestResults());
2626
useEffect(() => {
2727
const asyncTest = async () => {
28-
setTestResults(await testApp());
28+
setTestResults(await testAnalytics());
2929
setTestStatus("Complete!");
3030
}
3131
asyncTest().catch((e) => {

app/tests/analytics/lib/test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function initializeTestResults(): TestResults {
3838
return testAnalyticsResult;
3939
}
4040

41-
export async function testApp(isServerApp: boolean = false): Promise<TestResults> {
41+
export async function testAnalytics(isServerApp: boolean = false): Promise<TestResults> {
4242
const result: TestResults = initializeTestResults();
4343
if (isServerApp) {
4444
try {

app/tests/analytics/web_ssr/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
* limitations under the License.
1616
*/
1717
import type { Metadata } from 'next'
18-
import { testApp, TestResults } from '../lib/test';
18+
import { testAnalytics, TestResults } from '../lib/test';
1919
import ResultsDisplay from '../components/results_display';
2020

2121
export const metadata: Metadata = {
2222
title: 'Analytics Web SDK SSR test'
2323
}
2424

2525
export default async function Page() {
26-
const testResults: TestResults = await testApp(/*isServer=*/true);
26+
const testResults: TestResults = await testAnalytics(/*isServer=*/true);
2727
return (
2828
<>
2929
<h1>Analytics SSR Test results:</h1>

app/tests/app_check/components/csr_test_runner.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@
1717
'use client'
1818

1919
import { useState, useEffect } from 'react'
20-
import { testApp, initializeTestResults } from '../lib/test';
20+
import { testAppCheck, initializeTestResults } from '../lib/test';
2121
import ResultsDisplay from './results_display';
2222

2323
export default function ClientResults() {
2424
const [testStatus, setTestStatus] = useState<string>("running...");
2525
const [testResults, setTestResults] = useState(initializeTestResults());
2626
useEffect(() => {
2727
const asyncTest = async () => {
28-
setTestResults(await testApp());
28+
setTestResults(await testAppCheck());
2929
setTestStatus("Complete!");
3030
}
3131
asyncTest().catch((e) => {

app/tests/app_check/lib/test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export function initializeTestResults(): TestResults {
3535
};
3636
}
3737

38-
export async function testApp(): Promise<TestResults> {
38+
export async function testAppCheck(): Promise<TestResults> {
3939
const result: TestResults = initializeTestResults();
4040
try {
4141
const firebaseApp = initializeApp(firebaseConfig);

app/tests/app_check/web_ssr/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
* limitations under the License.
1616
*/
1717
import type { Metadata } from 'next'
18-
import { testApp, TestResults } from '../lib/test';
18+
import { testAppCheck, TestResults } from '../lib/test';
1919
import ResultsDisplay from '../components/results_display';
2020

2121
export const metadata: Metadata = {
2222
title: 'AppCheck Web SDK SSR test'
2323
}
2424

2525
export default async function Page() {
26-
const testResults: TestResults = await testApp();
26+
const testResults: TestResults = await testAppCheck();
2727
return (
2828
<>
2929
<h1>AppCheck SSR Test results:</h1>

app/tests/auth/components/results_display.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export default function ResultsDisplay({ statusString, testResults }) {
2828
<h4 title="getServerAppUserResult">getServerAppUserResult: {testResults.getServerAppUserResult}</h4>
2929
<h4 title="deleteServerAppResult">deleteServerAppResult: {testResults.deleteServerAppResult}</h4>
3030
<h4 title="deleteUserResult">deleteUserResult: {testResults.deleteUserResult}</h4>
31+
<h4 title="userSignedOutResult">userSignedOutResult: {testResults.userSignedOutResult}</h4>
3132
<h4 title="deleteAppResult">deleteAppResult: {testResults.deleteAppResult}</h4>
3233
<p />
3334
<Link href="/">Back to test index</Link>

app/tests/auth/lib/test.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
* limitations under the License.
1616
*/
1717
import { deleteApp, initializeApp, initializeServerApp } from 'firebase/app';
18-
import { deleteUser, getAuth, onAuthStateChanged, signInAnonymously, User } from 'firebase/auth';
18+
import { deleteUser, getAuth, onAuthStateChanged, signInAnonymously } from 'firebase/auth';
1919
import { firebaseConfig } from 'lib/firebase';
20-
import { OK, OK_SKIPPED, FAILED, sleep } from 'lib/util';
20+
import { OK, OK_SKIPPED, FAILED } from 'lib/util';
2121

2222
export type TestResults = {
2323
initializeAppResult: string,
@@ -29,6 +29,7 @@ export type TestResults = {
2929
getServerAppUserResult: string,
3030
deleteServerAppResult: string
3131
deleteUserResult: string,
32+
userSignedOutResult : string,
3233
deleteAppResult: string
3334
};
3435

@@ -43,20 +44,28 @@ export function initializeTestResults(): TestResults {
4344
getServerAppUserResult: FAILED,
4445
deleteServerAppResult: FAILED,
4546
deleteUserResult: FAILED,
47+
userSignedOutResult : FAILED,
4648
deleteAppResult: FAILED
4749
};
4850
}
4951

50-
async function authStateChangedUserSignedIn(auth): Promise<User> {
51-
const promise: Promise<User> = new Promise((resolve, reject) => {
52+
async function waitForUserSignedIn(auth): Promise<void> {
53+
const promise: Promise<void> = new Promise<void>((resolve, reject) => {
54+
let completed: boolean = false;
5255
const unsubscribe = onAuthStateChanged(auth, (user) => {
53-
unsubscribe();
5456
if (user) {
55-
resolve(user);
56-
} else {
57-
reject();
57+
completed = true;
58+
unsubscribe();
59+
resolve();
5860
}
5961
});
62+
setTimeout(() => {
63+
if (!completed) {
64+
completed = true;
65+
unsubscribe();
66+
reject();
67+
}
68+
}, 3000);
6069
});
6170
return promise;
6271
}
@@ -70,7 +79,7 @@ export async function testAuth(isServer: boolean = false): Promise<TestResults>
7079
await auth.authStateReady();
7180
result.initializeAuthResult = OK;
7281
await signInAnonymously(auth);
73-
await authStateChangedUserSignedIn(auth);
82+
await waitForUserSignedIn(auth);
7483
if (auth.currentUser !== null) {
7584
result.signInAnonymouslyResult = OK;
7685
const idToken = await auth.currentUser.getIdToken();
@@ -97,12 +106,12 @@ export async function testAuth(isServer: boolean = false): Promise<TestResults>
97106
result.deleteServerAppResult = OK;
98107
}
99108
await deleteUser(auth.currentUser);
100-
sleep(500);
109+
result.deleteUserResult = OK;
110+
await auth.signOut();
101111
if (auth.currentUser === null) {
102-
result.deleteUserResult = OK;
112+
result.userSignedOutResult = OK;
103113
}
104114
}
105-
106115
deleteApp(firebaseApp);
107116
result.deleteAppResult = OK;
108117
} catch (e) {

app/tests/database/lib/test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function initializeTestResults(): TestResults {
5050
export async function testDatabase(isServer: boolean = false): Promise<TestResults> {
5151
const result: TestResults = initializeTestResults();
5252
try {
53-
const firebaseApp = initializeApp(firebaseConfig, "authTest");
53+
const firebaseApp = initializeApp(firebaseConfig);
5454
if (firebaseApp === null) {
5555
return result;
5656
}

0 commit comments

Comments
 (0)