diff --git a/packages/app-distribution/__tests__/app-distribution.test.ts b/packages/app-distribution/__tests__/app-distribution.test.ts index fac68dcda7..43d817aa8e 100644 --- a/packages/app-distribution/__tests__/app-distribution.test.ts +++ b/packages/app-distribution/__tests__/app-distribution.test.ts @@ -1,4 +1,4 @@ -import { afterAll, beforeAll, describe, expect, it } from '@jest/globals'; +import { afterAll, beforeAll, describe, expect, it, beforeEach, jest } from '@jest/globals'; import { firebase, @@ -9,6 +9,22 @@ import { signOutTester, } from '../lib'; +import { + createCheckV9Deprecation, + CheckV9DeprecationFunction, +} from '../../app/lib/common/unitTestUtils'; + +// @ts-ignore test +import FirebaseModule from '../../app/lib/internal/FirebaseModule'; + +// Mock isIOS to be true so the app distribution methods work in tests +jest.mock('@react-native-firebase/app/lib/common', () => { + const actualCommon = jest.requireActual('@react-native-firebase/app/lib/common'); + return Object.assign({}, actualCommon, { + isIOS: true, + }); +}); + describe('appDistribution()', function () { describe('namespace', function () { beforeAll(async function () { @@ -49,4 +65,63 @@ describe('appDistribution()', function () { expect(signOutTester).toBeDefined(); }); }); + + describe('test `console.warn` is called for RNFB v8 API & not called for v9 API', function () { + let appDistributionV9Deprecation: CheckV9DeprecationFunction; + + beforeEach(function () { + appDistributionV9Deprecation = createCheckV9Deprecation(['appDistribution']); + + // @ts-ignore test + jest.spyOn(FirebaseModule.prototype, 'native', 'get').mockImplementation(() => { + return new Proxy( + {}, + { + get: () => + jest.fn().mockResolvedValue({ + constants: { + isTesterSignedIn: true, + }, + } as never), + }, + ); + }); + }); + + it('isTesterSignedIn', function () { + const appDistribution = getAppDistribution(); + appDistributionV9Deprecation( + () => isTesterSignedIn(appDistribution), + () => appDistribution.isTesterSignedIn(), + 'isTesterSignedIn', + ); + }); + + it('signInTester', function () { + const appDistribution = getAppDistribution(); + appDistributionV9Deprecation( + () => signInTester(appDistribution), + () => appDistribution.signInTester(), + 'signInTester', + ); + }); + + it('checkForUpdate', function () { + const appDistribution = getAppDistribution(); + appDistributionV9Deprecation( + () => checkForUpdate(appDistribution), + () => appDistribution.checkForUpdate(), + 'checkForUpdate', + ); + }); + + it('signOutTester', function () { + const appDistribution = getAppDistribution(); + appDistributionV9Deprecation( + () => signOutTester(appDistribution), + () => appDistribution.signOutTester(), + 'signOutTester', + ); + }); + }); }); diff --git a/packages/app-distribution/lib/modular/index.js b/packages/app-distribution/lib/modular/index.js index 10e6b9b56f..f8f36b8923 100644 --- a/packages/app-distribution/lib/modular/index.js +++ b/packages/app-distribution/lib/modular/index.js @@ -1,5 +1,5 @@ import { getApp } from '@react-native-firebase/app'; - +import { MODULAR_DEPRECATION_ARG } from '@react-native-firebase/app/lib/common'; /** * @typedef {import("..").FirebaseApp} FirebaseApp * @typedef {import("..").FirebaseAppDistributionTypes.AppDistributionRelease} AppDistributionRelease @@ -22,7 +22,7 @@ export function getAppDistribution(app) { * @returns {Promise} */ export function isTesterSignedIn(appDistribution) { - return appDistribution.isTesterSignedIn(); + return appDistribution.isTesterSignedIn.call(appDistribution, MODULAR_DEPRECATION_ARG); } /** @@ -30,7 +30,7 @@ export function isTesterSignedIn(appDistribution) { * @returns {Promise} */ export function signInTester(appDistribution) { - return appDistribution.signInTester(); + return appDistribution.signInTester.call(appDistribution, MODULAR_DEPRECATION_ARG); } /** @@ -38,7 +38,7 @@ export function signInTester(appDistribution) { * @returns {AppDistributionRelease>} */ export function checkForUpdate(appDistribution) { - return appDistribution.checkForUpdate(); + return appDistribution.checkForUpdate.call(appDistribution, MODULAR_DEPRECATION_ARG); } /** @@ -46,5 +46,5 @@ export function checkForUpdate(appDistribution) { * @returns {Promise} */ export function signOutTester(appDistribution) { - return appDistribution.signOutTester(); + return appDistribution.signOutTester.call(appDistribution, MODULAR_DEPRECATION_ARG); } diff --git a/packages/app/lib/common/index.js b/packages/app/lib/common/index.js index 692bcf33bd..5da3b8ed2a 100644 --- a/packages/app/lib/common/index.js +++ b/packages/app/lib/common/index.js @@ -107,6 +107,84 @@ export function tryJSONStringify(data) { const NO_REPLACEMENT = true; const mapOfDeprecationReplacements = { + analytics: { + default: { + logEvent: 'logEvent()', + setAnalyticsCollectionEnabled: 'setAnalyticsCollectionEnabled()', + setSessionTimeoutDuration: 'setSessionTimeoutDuration()', + getAppInstanceId: 'getAppInstanceId()', + getSessionId: 'getSessionId()', + setUserId: 'setUserId()', + setUserProperty: 'setUserProperty()', + setUserProperties: 'setUserProperties()', + resetAnalyticsData: 'resetAnalyticsData()', + setDefaultEventParameters: 'setDefaultEventParameters()', + initiateOnDeviceConversionMeasurementWithEmailAddress: + 'initiateOnDeviceConversionMeasurementWithEmailAddress()', + initiateOnDeviceConversionMeasurementWithHashedEmailAddress: + 'initiateOnDeviceConversionMeasurementWithHashedEmailAddress()', + initiateOnDeviceConversionMeasurementWithPhoneNumber: + 'initiateOnDeviceConversionMeasurementWithPhoneNumber()', + initiateOnDeviceConversionMeasurementWithHashedPhoneNumber: + 'initiateOnDeviceConversionMeasurementWithHashedPhoneNumber()', + setConsent: 'setConsent()', + // We're deprecating all helper methods for event. e.g. `logAddPaymentInfo()` from namespaced and modular. + logAddPaymentInfo: 'logEvent()', + logScreenView: 'logEvent()', + logAddShippingInfo: 'logEvent()', + logAddToCart: 'logEvent()', + logAddToWishlist: 'logEvent()', + logAppOpen: 'logEvent()', + logBeginCheckout: 'logEvent()', + logCampaignDetails: 'logEvent()', + logEarnVirtualCurrency: 'logEvent()', + logGenerateLead: 'logEvent()', + logJoinGroup: 'logEvent()', + logLevelEnd: 'logEvent()', + logLevelStart: 'logEvent()', + logLevelUp: 'logEvent()', + logLogin: 'logEvent()', + logPostScore: 'logEvent()', + logSelectContent: 'logEvent()', + logPurchase: 'logEvent()', + logRefund: 'logEvent()', + logRemoveFromCart: 'logEvent()', + logSearch: 'logEvent()', + logSelectItem: 'logEvent()', + logSetCheckoutOption: 'logEvent()', + logSelectPromotion: 'logEvent()', + logShare: 'logEvent()', + logSignUp: 'logEvent()', + logSpendVirtualCurrency: 'logEvent()', + logTutorialBegin: 'logEvent()', + logTutorialComplete: 'logEvent()', + logUnlockAchievement: 'logEvent()', + logViewCart: 'logEvent()', + logViewItem: 'logEvent()', + logViewPromotion: 'logEvent()', + logViewSearchResults: 'logEvent()', + }, + }, + appCheck: { + default: { + activate: 'initializeAppCheck()', + setTokenAutoRefreshEnabled: 'setTokenAutoRefreshEnabled()', + getToken: 'getToken()', + getLimitedUseToken: 'getLimitedUseToken()', + onTokenChanged: 'onTokenChanged()', + }, + statics: { + CustomProvider: 'CustomProvider', + }, + }, + appDistribution: { + default: { + isTesterSignedIn: 'isTesterSignedIn()', + signInTester: 'signInTester()', + checkForUpdate: 'checkForUpdate()', + signOutTester: 'signOutTester()', + }, + }, auth: { default: { applyActionCode: 'applyActionCode()', @@ -175,76 +253,6 @@ const mapOfDeprecationReplacements = { multiFactor: 'multiFactor()', }, }, - appCheck: { - default: { - activate: 'initializeAppCheck()', - setTokenAutoRefreshEnabled: 'setTokenAutoRefreshEnabled()', - getToken: 'getToken()', - getLimitedUseToken: 'getLimitedUseToken()', - onTokenChanged: 'onTokenChanged()', - }, - statics: { - CustomProvider: 'CustomProvider', - }, - }, - analytics: { - default: { - logEvent: 'logEvent()', - setAnalyticsCollectionEnabled: 'setAnalyticsCollectionEnabled()', - setSessionTimeoutDuration: 'setSessionTimeoutDuration()', - getAppInstanceId: 'getAppInstanceId()', - getSessionId: 'getSessionId()', - setUserId: 'setUserId()', - setUserProperty: 'setUserProperty()', - setUserProperties: 'setUserProperties()', - resetAnalyticsData: 'resetAnalyticsData()', - setDefaultEventParameters: 'setDefaultEventParameters()', - initiateOnDeviceConversionMeasurementWithEmailAddress: - 'initiateOnDeviceConversionMeasurementWithEmailAddress()', - initiateOnDeviceConversionMeasurementWithHashedEmailAddress: - 'initiateOnDeviceConversionMeasurementWithHashedEmailAddress()', - initiateOnDeviceConversionMeasurementWithPhoneNumber: - 'initiateOnDeviceConversionMeasurementWithPhoneNumber()', - initiateOnDeviceConversionMeasurementWithHashedPhoneNumber: - 'initiateOnDeviceConversionMeasurementWithHashedPhoneNumber()', - setConsent: 'setConsent()', - // We're deprecating all helper methods for event. e.g. `logAddPaymentInfo()` from namespaced and modular. - logAddPaymentInfo: 'logEvent()', - logScreenView: 'logEvent()', - logAddShippingInfo: 'logEvent()', - logAddToCart: 'logEvent()', - logAddToWishlist: 'logEvent()', - logAppOpen: 'logEvent()', - logBeginCheckout: 'logEvent()', - logCampaignDetails: 'logEvent()', - logEarnVirtualCurrency: 'logEvent()', - logGenerateLead: 'logEvent()', - logJoinGroup: 'logEvent()', - logLevelEnd: 'logEvent()', - logLevelStart: 'logEvent()', - logLevelUp: 'logEvent()', - logLogin: 'logEvent()', - logPostScore: 'logEvent()', - logSelectContent: 'logEvent()', - logPurchase: 'logEvent()', - logRefund: 'logEvent()', - logRemoveFromCart: 'logEvent()', - logSearch: 'logEvent()', - logSelectItem: 'logEvent()', - logSetCheckoutOption: 'logEvent()', - logSelectPromotion: 'logEvent()', - logShare: 'logEvent()', - logSignUp: 'logEvent()', - logSpendVirtualCurrency: 'logEvent()', - logTutorialBegin: 'logEvent()', - logTutorialComplete: 'logEvent()', - logUnlockAchievement: 'logEvent()', - logViewCart: 'logEvent()', - logViewItem: 'logEvent()', - logViewPromotion: 'logEvent()', - logViewSearchResults: 'logEvent()', - }, - }, crashlytics: { default: { checkForUnsentReports: 'checkForUnsentReports()',