42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import { doc, getDoc, setDoc } from 'firebase/firestore';
|
|
import { assertSucceeds } from '@firebase/rules-unit-testing';
|
|
import {
|
|
createTestEnvironment,
|
|
seedDocuments,
|
|
userDocument,
|
|
} from '../support/environment.mjs';
|
|
|
|
const testEnvironment = await createTestEnvironment();
|
|
|
|
try {
|
|
await testEnvironment.clearFirestore();
|
|
|
|
const uid = 'negative-control-user';
|
|
const userDb = testEnvironment.authenticatedContext(uid).firestore();
|
|
let denial;
|
|
|
|
try {
|
|
await setDoc(doc(userDb, `users/${uid}/wallet/main`), { balance: 999_999 });
|
|
} catch (error) {
|
|
denial = error;
|
|
}
|
|
|
|
if (denial?.code !== 'permission-denied') {
|
|
throw new Error(
|
|
`Negative control failed: expected permission-denied, received ${denial?.code ?? 'success'}`,
|
|
);
|
|
}
|
|
|
|
console.log('NEGATIVE CONTROL PASS: authenticated wallet write -> permission-denied');
|
|
|
|
await seedDocuments(testEnvironment, {
|
|
[`users/${uid}`]: userDocument(uid),
|
|
[`users/${uid}/wallet/main`]: { balance: 100 },
|
|
});
|
|
await assertSucceeds(getDoc(doc(userDb, `users/${uid}/wallet/main`)));
|
|
console.log('REACHABILITY CONTROL PASS: owner wallet read -> allowed');
|
|
} finally {
|
|
await testEnvironment.cleanup();
|
|
}
|
|
|