diff --git a/.changeset/fuzzy-seas-compare.md b/.changeset/fuzzy-seas-compare.md new file mode 100644 index 00000000000..432e78db62e --- /dev/null +++ b/.changeset/fuzzy-seas-compare.md @@ -0,0 +1,5 @@ +--- +"@firebase/rules-unit-testing": patch +--- + +Fix assertFails() logic of @firebase/rules-unit-testing diff --git a/packages/rules-unit-testing/src/api/index.ts b/packages/rules-unit-testing/src/api/index.ts index 18cb2993d2b..a2368e0fbe1 100644 --- a/packages/rules-unit-testing/src/api/index.ts +++ b/packages/rules-unit-testing/src/api/index.ts @@ -328,7 +328,8 @@ export function assertFails(pr: Promise): any { }, (err: any) => { const isPermissionDenied = - err && err.message && err.message.indexOf('PERMISSION_DENIED') >= 0; + (err && err.message && err.message.indexOf('PERMISSION_DENIED') >= 0) || + (err && err.code === 'permission-denied'); if (!isPermissionDenied) { return Promise.reject( new Error( diff --git a/packages/rules-unit-testing/test/database.test.ts b/packages/rules-unit-testing/test/database.test.ts index a5c4da013c1..7b938803596 100644 --- a/packages/rules-unit-testing/test/database.test.ts +++ b/packages/rules-unit-testing/test/database.test.ts @@ -67,6 +67,31 @@ describe('Testing Module Tests', function () { .catch(() => {}); }); + it('assertFails() if code is permission-denied', async function () { + const success = Promise.resolve('success'); + const permissionDenied = Promise.reject({ + code: 'permission-denied' + }); + const otherFailure = Promise.reject('failure'); + await firebase + .assertFails(success) + .then(() => { + throw new Error('Expected success to fail.'); + }) + .catch(() => {}); + + await firebase.assertFails(permissionDenied).catch(() => { + throw new Error('Expected permissionDenied to succeed.'); + }); + + await firebase + .assertFails(otherFailure) + .then(() => { + throw new Error('Expected otherFailure to fail.'); + }) + .catch(() => {}); + }) + it('initializeTestApp() with auth=null does not set access token', async function () { const app = firebase.initializeTestApp({ projectId: 'foo',