Files
2d4956fe68 buliding new auth setup to remove race condition during login (#961)
* buliding new auth setup to remove race condition during login

* revert complex fix. Just add local is loaded property

* Apply suggestion from @bitcoinuser

Co-authored-by: bitcoinuser <bitcoinuser@users.noreply.github.com>

---------

Co-authored-by: bitcoinuser <bitcoinuser@users.noreply.github.com>
2026-06-24 18:21:37 -04:00

90 lines
3.4 KiB
JavaScript

/* eslint-env jest */
// Global test setup. Runs before every test file (see `setupFiles` in
// jest.config.js). Put mocks here that virtually every test needs so individual
// test files don't have to re-declare them.
// @react-native-firebase touches native modules (RNFBAppModule) at import time,
// which don't exist under Jest. Stub the submodules the app imports so any module
// that transitively pulls in Firebase can be unit-tested. Individual tests can
// still override these with their own jest.mock(...) when they need return values.
const makeCallable = () => jest.fn(() => jest.fn(async () => ({ data: {} })));
jest.mock('@react-native-firebase/app', () => ({
__esModule: true,
default: jest.fn(() => ({})),
getApp: jest.fn(() => ({})),
firebase: { app: jest.fn(() => ({})) },
}));
jest.mock('@react-native-firebase/functions', () => ({
__esModule: true,
default: jest.fn(() => ({ httpsCallable: makeCallable() })),
getFunctions: jest.fn(() => ({})),
httpsCallable: makeCallable(),
}));
jest.mock('@react-native-firebase/auth', () => ({
__esModule: true,
default: jest.fn(() => ({ currentUser: null })),
getAuth: jest.fn(() => ({ currentUser: null })),
}));
jest.mock('@react-native-firebase/firestore', () => ({
__esModule: true,
default: jest.fn(() => ({})),
getFirestore: jest.fn(() => ({})),
}));
jest.mock('@react-native-firebase/messaging', () => ({
__esModule: true,
default: jest.fn(() => ({})),
getMessaging: jest.fn(() => ({})),
}));
jest.mock('@react-native-firebase/crashlytics', () => ({
__esModule: true,
default: jest.fn(() => ({ recordError: jest.fn(), log: jest.fn() })),
getCrashlytics: jest.fn(() => ({ recordError: jest.fn(), log: jest.fn() })),
}));
jest.mock('@react-native-firebase/storage', () => ({
__esModule: true,
default: jest.fn(() => ({})),
getStorage: jest.fn(() => ({})),
}));
// react-native-localize is a native module (RNLocalize) that throws at import
// time under Jest. Provide a sensible English default; tests can override locally.
jest.mock('react-native-localize', () => ({
getLocales: jest.fn(() => [
{ languageCode: 'en', countryCode: 'US', languageTag: 'en-US', isRTL: false },
]),
}));
// react-native-quick-crypto is a Nitro/Turbo native module that throws at import
// time under Jest. Delegate to Node's crypto so modules in the encryption chain
// (e.g. messaging/encodingAndDecodingMessages.js) load AND actually work.
// `node:crypto` bypasses the Babel alias that maps 'crypto' -> quick-crypto.
// Tests needing different behavior can still jest.mock(...) it locally.
jest.mock('react-native-quick-crypto', () => {
const nodeCrypto = require('node:crypto');
const api = {
randomBytes: (...args) => nodeCrypto.randomBytes(...args),
createCipheriv: (...args) => nodeCrypto.createCipheriv(...args),
createDecipheriv: (...args) => nodeCrypto.createDecipheriv(...args),
createHash: (...args) => nodeCrypto.createHash(...args),
createHmac: (...args) => nodeCrypto.createHmac(...args),
pbkdf2: (...args) => nodeCrypto.pbkdf2(...args),
pbkdf2Sync: (...args) => nodeCrypto.pbkdf2Sync(...args),
argon2: (_variant, opts, cb) => {
const msg =
typeof opts.message === 'string'
? Buffer.from(opts.message, 'utf8')
: opts.message;
const key = nodeCrypto.pbkdf2Sync(msg, opts.nonce, 1, 32, 'sha256');
cb(null, key);
},
};
return { __esModule: true, default: api, ...api };
});