firebase / firebase/firebase-tools

Error message improvement for testing security rules

Open
#2,577 8 comments 20 reactions 0 assignees View on GitHub
emulator-suite emulators: firestore internal-bug-filed type: feature request
Dominant language
TypeScript
Stars
4.5k
Forks
1.3k
Avg merge
1d 12h
Merged PRs (30d)
84

Description

### Environment info

* Operating System version: Fedora 32
* Browser version: Firefox 79
* Firebase SDK version: 0.20.11
* Firebase: 8.9.0
* Firebase Product: Firestore, Emulator
* node: v14.8.0
* npm: 6.14.7

### Test case

package.json
```javascript
{
"name": "security_rules",
"version": "1.0.0",
"description": "Unit testing for security rules",
"main": "test.js",
"scripts": {
"test": "mocha --exit"
},
"author": "me",
"license": "ISC",
"devDependencies": {
"@firebase/testing": "^0.20.11",
"mocha": "^8.1.1"
}
}
```

firestore_rules.json
```javascript
rules_version = '1';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if false;
allow write: if false;
}
}
```

test,js
```javascript
const assert = require('assert');
const firebase = require("@firebase/testing");

const PROJECT_ID = "asd";
const myId = "user_abc";
const theirId = "user_xyz";
const myAuth = {uid: myId, email: "abc@example.com"};

function getFireStore(myAuth){
return firebase.initializeTestApp({projectId: PROJECT_ID, auth: myAuth}).firestore();
}

function getFireStoreAdmin(){
return firebase.initializeAdminApp({projectId: PROJECT_ID}).firestore();
}

beforeEach(async() => {
await firebase.clearFirestoreData({projectId: PROJECT_ID});
});

describe("asd app", () => {

it("get doc from firestore", async() => {
const db = getFireStore(null);
const testDoc = db.collection("readonly").doc("testDoc");
await firebase.assertSucceeds(testDoc.get());
});
})
```

### Steps to reproduce
`firebase emulators:start`

`npm test`

### Expected behavior

A clear error message what is wrong. Something like
`FirebaseError: PERMISSION_DENIED because security rules returned false for 'get' @ L5`

### Actual behavior

Running Security Rule Test fails with following unclear error:

`FirebaseError:
false for 'get' @ L5
at new FirestoreError (node_modules/@firebase/firestore/dist/index.node.cjs.js:1205:28)
at fromRpcStatus (node_modules/@firebase/firestore/dist/index.node.cjs.js:5240:12)
at fromWatchChange (node_modules/@firebase/firestore/dist/index.node.cjs.js:5476:35)
at PersistentListenStream.onMessage (node_modules/@firebase/firestore/dist/index.node.cjs.js:15743:27)
at /home/roman/projects/asd/test/security_rules/node_modules/@firebase/firestore/dist/index.node.cjs.js:15676:30
at /home/roman/projects/asd/test/security_rules/node_modules/@firebase/firestore/dist/index.node.cjs.js:15712:28
at /home/roman/projects/asd/test/security_rules/node_modules/@firebase/firestore/dist/index.node.cjs.js:14143:20
at processTicksAndRejections (internal/process/task_queues.js:93:5)`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.