From 761d1cf9d98b214f09b1500586fbea09abb802fb Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 31 Dec 2025 10:01:33 +0000 Subject: [PATCH 1/2] Add assertions for new Remote Config value types in createTemplateFromJSON test Updates the `createTemplateFromJSON` unit test to include specific assertions for `new_ui_enabled`, `personalized_welcome_message`, and `experiment_enabled` parameters. This ensures that Rollout, Personalization, and Experiment value types are correctly handled when creating a template from a JSON string. --- test/unit/remote-config/remote-config.spec.ts | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test/unit/remote-config/remote-config.spec.ts b/test/unit/remote-config/remote-config.spec.ts index f7a2bcdbc5..b41b3a03f4 100644 --- a/test/unit/remote-config/remote-config.spec.ts +++ b/test/unit/remote-config/remote-config.spec.ts @@ -626,6 +626,48 @@ describe('RemoteConfig', () => { expect(p1.description).equals('this is a promo'); expect(p1.valueType).equals('BOOLEAN'); + const p2 = newTemplate.parameters['new_ui_enabled']; + expect(p2.defaultValue).deep.equals({ value: 'false' }); + expect(p2.conditionalValues).deep.equals({ + ios: { + rolloutValue: { + rolloutId: 'rollout_1', + value: 'true', + percent: 50, + } + } + }); + expect(p2.description).equals('New UI Rollout'); + expect(p2.valueType).equals('BOOLEAN'); + + const p3 = newTemplate.parameters['personalized_welcome_message']; + expect(p3.defaultValue).deep.equals({ value: 'Welcome!' }); + expect(p3.conditionalValues).deep.equals({ + ios: { + personalizationValue: { + personalizationId: 'personalization_1', + } + } + }); + expect(p3.description).equals('Personalized Welcome Message'); + expect(p3.valueType).equals('STRING'); + + const p4 = newTemplate.parameters['experiment_enabled']; + expect(p4.defaultValue).deep.equals({ value: 'false' }); + expect(p4.conditionalValues).deep.equals({ + ios: { + experimentValue: { + experimentId: 'experiment_1', + variantValue: [ + { variantId: 'variant_A', value: 'true' }, + { variantId: 'variant_B', noChange: true } + ] + } + } + }); + expect(p4.description).equals('Experiment Enabled'); + expect(p4.valueType).equals('BOOLEAN'); + expect(newTemplate.parameterGroups).deep.equals(PARAMETER_GROUPS); const c = newTemplate.conditions.find((c) => c.name === 'ios'); From f033e39e6afef5c20079cce8ec5b54fbe88c28f1 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 31 Dec 2025 10:51:44 +0000 Subject: [PATCH 2/2] Refactor Remote Config test assertions to use specific interfaces Updates the `createTemplateFromJSON` unit test to explicitly cast conditional values to `RolloutParameterValue`, `PersonalizationParameterValue`, and `ExperimentParameterValue` interfaces. Asserts on individual fields of these values instead of generic object equality checks. Exports the necessary interfaces from `src/remote-config/index.ts` to support these assertions. --- src/remote-config/index.ts | 3 ++ test/unit/remote-config/remote-config.spec.ts | 41 +++++++------------ 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/remote-config/index.ts b/src/remote-config/index.ts index 790568735e..f6121c60ac 100644 --- a/src/remote-config/index.ts +++ b/src/remote-config/index.ts @@ -47,6 +47,9 @@ export { PredefinedSignals, RemoteConfigCondition, RemoteConfigParameter, + ExperimentParameterValue, + PersonalizationParameterValue, + RolloutParameterValue, RemoteConfigParameterGroup, RemoteConfigParameterValue, RemoteConfigTemplate, diff --git a/test/unit/remote-config/remote-config.spec.ts b/test/unit/remote-config/remote-config.spec.ts index b41b3a03f4..6d501aeb4b 100644 --- a/test/unit/remote-config/remote-config.spec.ts +++ b/test/unit/remote-config/remote-config.spec.ts @@ -27,6 +27,9 @@ import { TagColor, ListVersionsResult, RemoteConfigFetchResponse, + RolloutParameterValue, + PersonalizationParameterValue, + ExperimentParameterValue, } from '../../../src/remote-config/index'; import { FirebaseApp } from '../../../src/app/firebase-app'; import * as mocks from '../../resources/mocks'; @@ -628,43 +631,27 @@ describe('RemoteConfig', () => { const p2 = newTemplate.parameters['new_ui_enabled']; expect(p2.defaultValue).deep.equals({ value: 'false' }); - expect(p2.conditionalValues).deep.equals({ - ios: { - rolloutValue: { - rolloutId: 'rollout_1', - value: 'true', - percent: 50, - } - } - }); + const rolloutParam = p2.conditionalValues['ios'] as RolloutParameterValue; + expect(rolloutParam.rolloutValue.rolloutId).to.equal('rollout_1'); + expect(rolloutParam.rolloutValue.value).to.equal('true'); + expect(rolloutParam.rolloutValue.percent).to.equal(50); expect(p2.description).equals('New UI Rollout'); expect(p2.valueType).equals('BOOLEAN'); const p3 = newTemplate.parameters['personalized_welcome_message']; expect(p3.defaultValue).deep.equals({ value: 'Welcome!' }); - expect(p3.conditionalValues).deep.equals({ - ios: { - personalizationValue: { - personalizationId: 'personalization_1', - } - } - }); + const personalizationParam = p3.conditionalValues['ios'] as PersonalizationParameterValue; + expect(personalizationParam.personalizationValue.personalizationId).to.equal('personalization_1'); expect(p3.description).equals('Personalized Welcome Message'); expect(p3.valueType).equals('STRING'); const p4 = newTemplate.parameters['experiment_enabled']; expect(p4.defaultValue).deep.equals({ value: 'false' }); - expect(p4.conditionalValues).deep.equals({ - ios: { - experimentValue: { - experimentId: 'experiment_1', - variantValue: [ - { variantId: 'variant_A', value: 'true' }, - { variantId: 'variant_B', noChange: true } - ] - } - } - }); + const experimentParam = p4.conditionalValues['ios'] as ExperimentParameterValue; + expect(experimentParam.experimentValue.experimentId).to.equal('experiment_1'); + expect(experimentParam.experimentValue.variantValue.length).to.equal(2); + expect(experimentParam.experimentValue.variantValue[0]).to.deep.equal({ variantId: 'variant_A', value: 'true' }); + expect(experimentParam.experimentValue.variantValue[1]).to.deep.equal({ variantId: 'variant_B', noChange: true }); expect(p4.description).equals('Experiment Enabled'); expect(p4.valueType).equals('BOOLEAN');