def test_serializer_outputs_expected_schema(self): country1 = CountryFactory.create(code="ab") country2 = CountryFactory.create(code="cd") experiment = ExperimentFactory.create(countries=[country1, country2]) serializer = FilterObjectCountrySerializer(experiment) self.assertEqual(serializer.data["type"], "country") self.assertEqual(set(serializer.data["countries"]), set(["ab", "cd"]))
def test_view_renders_countries_correctly(self): user_email = "*****@*****.**" experiment = ExperimentFactory.create_with_status(Experiment.STATUS_DRAFT) experiment.countries.add(CountryFactory(code="YY", name="Wazoo")) experiment.countries.add(CountryFactory(code="XX", name="Xanadu")) response = self.client.get( reverse("experiments-detail", kwargs={"slug": experiment.slug}), **{settings.OPENIDC_EMAIL_HEADER: user_email}, ) self.assertEqual(response.status_code, 200)
def test_serializer_outputs_expected_schema_for_addon_experiment(self): experiment = ExperimentFactory.create_with_status( Experiment.STATUS_SHIP, firefox_min_version="63.0", type=Experiment.TYPE_ADDON, locales=[LocaleFactory.create()], countries=[CountryFactory.create()], platforms=[Experiment.PLATFORM_WINDOWS], windows_versions=[Experiment.VERSION_WINDOWS_8], ) serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "opt-out-study") self.assertEqual(serializer.data["name"], experiment.name) expected_comment = (f"{experiment.client_matching}\n" f"Platform: ['All Windows']\n" f"Windows Versions: ['Windows 8']\n") self.assertEqual(serializer.data["comment"], expected_comment) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) self.assertEqual( serializer.data["arguments"], ExperimentRecipeAddonArgumentsSerializer(experiment).data, ) self.assertEqual(serializer.data["experimenter_slug"], experiment.slug)
def test_serializer_outputs_expected_schema_for_addon_experiment(self): experiment = ExperimentFactory.create_with_status( Experiment.STATUS_SHIP, type=Experiment.TYPE_ADDON, locales=[LocaleFactory.create()], countries=[CountryFactory.create()], ) serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "opt-out-study") self.assertEqual(serializer.data["name"], experiment.name) self.assertEqual( serializer.data["comment"], experiment.client_matching ) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) self.assertEqual( serializer.data["arguments"], ExperimentRecipeAddonArgumentsSerializer(experiment).data, )
def test_serializer_outputs_expected_schema_for_pref_experiment(self): experiment = ExperimentFactory.create_with_status( Experiment.STATUS_SHIP, firefox_min_version="65.0", type=Experiment.TYPE_PREF, locales=[LocaleFactory.create()], countries=[CountryFactory.create()], platforms=[Experiment.PLATFORM_MAC], profile_age="Existing Profiles Only", ) serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "preference-experiment") self.assertEqual(serializer.data["name"], experiment.name) expected_comment = (f"{experiment.client_matching}\n" f"Platform: ['All Mac']\n" "Profile Age: Existing Profiles Only") self.assertEqual(serializer.data["comment"], expected_comment) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) self.assertEqual( serializer.data["arguments"], ExperimentRecipePrefArgumentsSerializer(experiment).data, ) self.assertEqual(serializer.data["experimenter_slug"], experiment.slug)
def test_serializer_outputs_expected_schema(self): country = CountryFactory.create() serializer = CountrySerializer(country) self.assertEqual(serializer.data, { "code": country.code, "name": country.name })
def test_serializer_countries(self): country = CountryFactory() experiment = ExperimentFactory.create(countries=[country]) serializer = ExperimentSerializer(experiment) self.assertEqual( serializer.data["countries"], [{"code": country.code, "name": country.name}] )
def test_serializer_outputs_expected_schema(self): country = CountryFactory.create() serializer = CountrySerializerMultiSelect(country) self.assertEqual(serializer.data, { "value": country.id, "label": country.name })
def test_serializer_outputs_expected_schema_for_pref_experiment(self): experiment = ExperimentFactory.create_with_status( Experiment.STATUS_SHIP, type=Experiment.TYPE_PREF, locales=[LocaleFactory.create()], countries=[CountryFactory.create()], ) serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "preference-experiment") self.assertEqual(serializer.data["name"], experiment.name) self.assertEqual(serializer.data["comment"], experiment.client_matching) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) self.assertEqual( serializer.data["arguments"], ExperimentRecipePrefArgumentsSerializer(experiment).data, ) self.assertEqual(serializer.data["experimenter_slug"], experiment.slug)
def test_format_bug_body_lists_countries_locales(self): country = CountryFactory(code="CA", name="Canada") locale = LocaleFactory(code="da", name="Danish") experiment = ExperimentFactory.create(countries=[country], locales=[locale]) body = format_bug_body(experiment) self.assertIn("Countries: Canada (CA)", body) self.assertIn("Locales: Danish (da)", body)
def test_serializer_outputs_expected_schema_for_message(self): experiment = ExperimentFactory.create( type=Experiment.TYPE_MESSAGE, firefox_min_version="70.0", locales=[LocaleFactory.create()], countries=[CountryFactory.create()], public_description="this is my public description!", public_name="public name", normandy_slug="some-random-slug", platforms=[Experiment.PLATFORM_WINDOWS], ) variant = ExperimentVariant(slug="slug-value", ratio=25, experiment=experiment, is_control=True) variant.save() expected_comment = expected_comment = ( f"{experiment.client_matching}\n" f"Platform: ['All Windows']\n") serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "messaging-experiment") self.assertEqual(serializer.data["name"], experiment.name) self.assertEqual(serializer.data["comment"], expected_comment) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) expected_data = { "slug": "some-random-slug", "experimentDocumentUrl": experiment.experiment_url, "userFacingName": "public name", "userFacingDescription": "this is my public description!", "branches": [{ "groups": [], "value": {}, "ratio": 25, "slug": "slug-value" }], } self.assertEqual(serializer.data["arguments"], expected_data)
def setUp(self): super().setUp() self.locale = LocaleFactory.create() self.country = CountryFactory.create() self.experiment = ExperimentFactory.create( type=ExperimentConstants.TYPE_PREF, locales=[self.locale], countries=[self.country], population_percent="30.0000", )
def test_view_saves_experiment(self): user_email = "*****@*****.**" experiment = ExperimentFactory.create_with_status( Experiment.STATUS_DRAFT, proposed_enrollment=1, proposed_duration=2) locale = LocaleFactory() country = CountryFactory() new_start_date = timezone.now().date() + datetime.timedelta( days=random.randint(1, 100)) new_enrollment = experiment.proposed_enrollment + 1 new_duration = experiment.proposed_duration + 1 data = { "action": "continue", "proposed_start_date": new_start_date, "proposed_enrollment": new_enrollment, "proposed_duration": new_duration, "population_percent": "11", "firefox_min_version": Experiment.VERSION_CHOICES[-2][0], "firefox_max_version": Experiment.VERSION_CHOICES[-1][0], "firefox_channel": Experiment.CHANNEL_NIGHTLY, "client_matching": "New matching!", "platform": Experiment.PLATFORM_WINDOWS, "locales": [locale.code], "countries": [country.code], } response = self.client.post( reverse("experiments-timeline-pop-update", kwargs={"slug": experiment.slug}), data, **{settings.OPENIDC_EMAIL_HEADER: user_email}, ) self.assertEqual(response.status_code, 302) experiment = Experiment.objects.get() self.assertEqual(experiment.proposed_start_date, new_start_date) self.assertEqual(experiment.proposed_enrollment, new_enrollment) self.assertEqual(experiment.proposed_duration, new_duration) self.assertEqual(experiment.population_percent, decimal.Decimal(data["population_percent"])) self.assertEqual(experiment.firefox_min_version, data["firefox_min_version"]) self.assertEqual(experiment.firefox_max_version, data["firefox_max_version"]) self.assertEqual(experiment.firefox_channel, data["firefox_channel"]) self.assertEqual(experiment.platform, data["platform"]) self.assertTrue(locale in experiment.locales.all()) self.assertTrue(country in experiment.countries.all())
def test_serializer_outputs_expect_schema_for_branched_addon(self): experiment = ExperimentFactory.create( firefox_min_version="70.0", type=Experiment.TYPE_ADDON, locales=[LocaleFactory.create()], countries=[CountryFactory.create()], public_description="this is my public description!", public_name="public name", normandy_slug="some-random-slug", platforms=[Experiment.PLATFORM_LINUX], ) variant = ExperimentVariant(slug="slug-value", ratio=25, experiment=experiment) variant.save() serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "branched-addon-study") self.assertEqual(serializer.data["name"], experiment.name) expected_comment = f"{experiment.client_matching}\n" f"Platform: ['All Linux']\n" self.assertEqual(serializer.data["comment"], expected_comment) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) self.assertEqual( serializer.data["arguments"], { "slug": "some-random-slug", "userFacingName": "public name", "userFacingDescription": "this is my public description!", "branches": [{ "ratio": 25, "slug": "slug-value", "extensionApiId": None }], }, )
def setUp(self): super().setUp() self.locale = LocaleFactory.create() self.country = CountryFactory.create() self.experiment = ExperimentFactory.create_with_status( ExperimentConstants.STATUS_DRAFT, type=ExperimentConstants.TYPE_PREF, locales=[self.locale], countries=[self.country], population_percent="30.0000", platforms=[ExperimentConstants.PLATFORM_WINDOWS], windows_versions=[ExperimentConstants.VERSION_WINDOWS_8], )
def test_serializer_saves_values(self): country = CountryFactory() locale = LocaleFactory() countries = [{"value": country.id, "label": country.name}] locales = [{"value": locale.id, "label": locale.name}] data = { "proposed_start_date": datetime.date.today(), "proposed_duration": 50, "proposed_enrollment": 20, "population_percent": 32, "firefox_channel": "Nightly", "firefox_min_version": "67.0", "firefox_max_version": "68.0", "countries": countries, "locales": locales, "platform": "All Windows", "client_matching": "matching client.", } serializer = ExperimentTimelinePopSerializer( instance=self.experiment, data=data, context={"request": self.request}) self.assertTrue(serializer.is_valid()) experiment = serializer.save() self.assertEqual(experiment.changes.count(), 1) self.assertEqual(experiment.proposed_start_date, data["proposed_start_date"]) self.assertEqual(experiment.proposed_duration, data["proposed_duration"]) self.assertEqual(experiment.proposed_enrollment, data["proposed_enrollment"]) self.assertEqual(experiment.population_percent, data["population_percent"]) self.assertEqual(experiment.firefox_channel, data["firefox_channel"]) self.assertEqual(experiment.firefox_min_version, data["firefox_min_version"]) self.assertEqual(experiment.firefox_max_version, data["firefox_max_version"]) self.assertEqual(experiment.countries.get(), country) self.assertEqual(experiment.locales.get(), locale) self.assertEqual(experiment.platform, data["platform"]) self.assertEqual(experiment.client_matching, data["client_matching"])
def test_serializer_outputs_expected_schema_for_windows_versions(self): experiment = ExperimentFactory.create_with_status( Experiment.STATUS_SHIP, firefox_min_version="65.0", type=Experiment.TYPE_PREF, locales=[LocaleFactory.create()], countries=[CountryFactory.create()], windows_versions=[Experiment.VERSION_WINDOWS_8], ) serializer = ExperimentRecipeSerializer(experiment) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], )
def test_message_experiment_sets_default_locales_countries(self): [ LocaleFactory.create(code=l) for l in Experiment.MESSAGE_DEFAULT_LOCALES ] [ CountryFactory.create(code=c) for c in Experiment.MESSAGE_DEFAULT_COUNTRIES ] self.data["type"] = Experiment.TYPE_MESSAGE form = ExperimentOverviewForm(request=self.request, data=self.data) self.assertTrue(form.is_valid()) experiment = form.save() self.assertEqual( set(experiment.locales.values_list("code", flat=True)), set(Experiment.MESSAGE_DEFAULT_LOCALES), ) self.assertEqual( set(experiment.countries.values_list("code", flat=True)), set(Experiment.MESSAGE_DEFAULT_COUNTRIES), )
def test_serializer_outputs_expected_schema(self): country1 = CountryFactory(code="CA", name="Canada") locale1 = LocaleFactory(code="da", name="Danish") project = ProjectFactory.create() experiment = ExperimentFactory.create( locales=[locale1], countries=[country1], projects=[project] ) related_exp = ExperimentFactory.create() experiment.related_to.add(related_exp) serializer = ChangeLogSerializer(experiment) risk_tech_description = experiment.risk_technical_description expected_data = { "type": experiment.type, "owner": experiment.owner.id, "name": experiment.name, "short_description": experiment.short_description, "related_work": experiment.related_work, "related_to": [related_exp.id], "proposed_start_date": str(experiment.proposed_start_date), "proposed_duration": experiment.proposed_duration, "proposed_enrollment": experiment.proposed_enrollment, "design": experiment.design, "addon_experiment_id": experiment.addon_experiment_id, "addon_release_url": experiment.addon_release_url, "pref_name": experiment.pref_name, "pref_type": experiment.pref_type, "pref_branch": experiment.pref_branch, "public_name": experiment.public_name, "public_description": experiment.public_description, "population_percent": "{0:.4f}".format(experiment.population_percent), "firefox_min_version": experiment.firefox_min_version, "firefox_max_version": experiment.firefox_max_version, "firefox_channel": experiment.firefox_channel, "client_matching": experiment.client_matching, "locales": [{"code": "da", "name": "Danish"}], "countries": [{"code": "CA", "name": "Canada"}], "projects": [{"slug": project.slug}], "platforms": experiment.platforms, "windows_versions": experiment.windows_versions, "profile_age": experiment.profile_age, "objectives": experiment.objectives, "total_enrolled_clients": experiment.total_enrolled_clients, "analysis": experiment.analysis, "analysis_owner": experiment.analysis_owner.id, "telemetry_event_category": experiment.telemetry_event_category, "telemetry_event_method": experiment.telemetry_event_method, "telemetry_event_object": experiment.telemetry_event_object, "telemetry_event_value": experiment.telemetry_event_value, "survey_required": experiment.survey_required, "survey_urls": experiment.survey_urls, "survey_instructions": experiment.survey_instructions, "engineering_owner": experiment.engineering_owner, "bugzilla_id": experiment.bugzilla_id, "normandy_slug": experiment.normandy_slug, "normandy_id": experiment.normandy_id, "data_science_issue_url": experiment.data_science_issue_url, "feature_bugzilla_url": experiment.feature_bugzilla_url, "risk_partner_related": experiment.risk_partner_related, "risk_brand": experiment.risk_brand, "risk_fast_shipped": experiment.risk_fast_shipped, "risk_confidential": experiment.risk_confidential, "risk_release_population": experiment.risk_release_population, "risk_revenue": experiment.risk_revenue, "risk_data_category": experiment.risk_data_category, "risk_external_team_impact": experiment.risk_external_team_impact, "risk_telemetry_data": experiment.risk_telemetry_data, "risk_ux": experiment.risk_ux, "risk_security": experiment.risk_security, "risk_revision": experiment.risk_revision, "risk_technical": experiment.risk_technical, "risk_technical_description": risk_tech_description, "risks": experiment.risks, "testing": experiment.testing, "test_builds": experiment.test_builds, "qa_status": experiment.qa_status, "review_science": experiment.review_science, "review_engineering": experiment.review_engineering, "review_qa_requested": experiment.review_qa_requested, "review_intent_to_ship": experiment.review_intent_to_ship, "review_bugzilla": experiment.review_bugzilla, "review_qa": experiment.review_qa, "review_relman": experiment.review_relman, "review_advisory": experiment.review_advisory, "review_legal": experiment.review_legal, "review_ux": experiment.review_ux, "review_security": experiment.review_security, "review_vp": experiment.review_vp, "review_data_steward": experiment.review_data_steward, "review_comms": experiment.review_comms, "review_impacted_teams": experiment.review_impacted_teams, "variants": [ { "description": variant.description, "is_control": variant.is_control, "name": variant.name, "ratio": variant.ratio, "slug": variant.slug, "value": variant.value, "addon_release_url": variant.addon_release_url, "preferences": [ { "pref_name": preference.pref_name, "pref_type": preference.pref_type, "pref_branch": preference.pref_branch, "pref_value": preference.pref_value, } for preference in variant.preferences.all() ], "message_targeting": variant.message_targeting, "message_threshold": variant.message_threshold, "message_triggers": variant.message_triggers, } for variant in experiment.variants.all() ], "results_url": experiment.results_url, "results_initial": experiment.results_initial, "results_lessons_learned": experiment.results_lessons_learned, "results_fail_to_launch": experiment.results_fail_to_launch, "results_recipe_errors": experiment.results_recipe_errors, "results_restarts": experiment.results_restarts, "results_low_enrollment": experiment.results_low_enrollment, "results_early_end": experiment.results_early_end, "results_no_usable_data": experiment.results_no_usable_data, "results_failures_notes": experiment.results_failures_notes, "results_changes_to_firefox": experiment.results_changes_to_firefox, "results_data_for_hypothesis": experiment.results_data_for_hypothesis, "results_confidence": experiment.results_confidence, "results_measure_impact": experiment.results_measure_impact, "results_impact_notes": experiment.results_impact_notes, "rollout_playbook": experiment.rollout_playbook, "rollout_type": experiment.rollout_type, "message_type": experiment.message_type, "message_template": experiment.message_template, } self.assertEqual(set(serializer.data.keys()), set(expected_data.keys())) self.assertEqual(serializer.data, expected_data)
def test_serializer_outputs_expected_schema(self): country1 = CountryFactory(code="CA", name="Canada") locale1 = LocaleFactory(code="da", name="Danish") experiment = ExperimentFactory.create(locales=[locale1], countries=[country1]) serializer = ChangeLogSerializer(experiment) risk_tech_description = experiment.risk_technical_description # ensure expected_data has "string" if pref_type is json string pref_type = PrefTypeField().to_representation(experiment.pref_type) expected_data = { "type": experiment.type, "status": experiment.status, "owner": experiment.owner.id, "name": experiment.name, "short_description": experiment.short_description, "related_work": experiment.related_work, "proposed_start_date": str(experiment.proposed_start_date), "proposed_duration": experiment.proposed_duration, "proposed_enrollment": experiment.proposed_enrollment, "addon_experiment_id": experiment.addon_experiment_id, "addon_release_url": experiment.addon_release_url, "pref_key": experiment.pref_key, "pref_type": pref_type, "pref_branch": experiment.pref_branch, "public_name": experiment.public_name, "public_description": experiment.public_description, "population_percent": "{0:.4f}".format(experiment.population_percent), "firefox_min_version": experiment.firefox_min_version, "firefox_max_version": experiment.firefox_max_version, "firefox_channel": experiment.firefox_channel, "client_matching": experiment.client_matching, "locales": [{ "code": "da", "name": "Danish" }], "countries": [{ "code": "CA", "name": "Canada" }], "platform": experiment.platform, "objectives": experiment.objectives, "analysis": experiment.analysis, "analysis_owner": experiment.analysis_owner, "survey_required": experiment.survey_required, "survey_urls": experiment.survey_urls, "survey_instructions": experiment.survey_instructions, "engineering_owner": experiment.engineering_owner, "bugzilla_id": experiment.bugzilla_id, "normandy_slug": experiment.normandy_slug, "normandy_id": experiment.normandy_id, "data_science_bugzilla_url": experiment.data_science_bugzilla_url, "feature_bugzilla_url": experiment.feature_bugzilla_url, "risk_internal_only": experiment.risk_internal_only, "risk_partner_related": experiment.risk_partner_related, "risk_brand": experiment.risk_brand, "risk_fast_shipped": experiment.risk_fast_shipped, "risk_confidential": experiment.risk_confidential, "risk_release_population": experiment.risk_release_population, "risk_revenue": experiment.risk_revenue, "risk_data_category": experiment.risk_data_category, "risk_external_team_impact": experiment.risk_external_team_impact, "risk_telemetry_data": experiment.risk_telemetry_data, "risk_ux": experiment.risk_ux, "risk_security": experiment.risk_security, "risk_revision": experiment.risk_revision, "risk_technical": experiment.risk_technical, "risk_technical_description": risk_tech_description, "risks": experiment.risks, "testing": experiment.testing, "test_builds": experiment.test_builds, "qa_status": experiment.qa_status, "review_science": experiment.review_science, "review_engineering": experiment.review_engineering, "review_qa_requested": experiment.review_qa_requested, "review_intent_to_ship": experiment.review_intent_to_ship, "review_bugzilla": experiment.review_bugzilla, "review_qa": experiment.review_qa, "review_relman": experiment.review_relman, "review_advisory": experiment.review_advisory, "review_legal": experiment.review_legal, "review_ux": experiment.review_ux, "review_security": experiment.review_security, "review_vp": experiment.review_vp, "review_data_steward": experiment.review_data_steward, "review_comms": experiment.review_comms, "review_impacted_teams": experiment.review_impacted_teams, "variants": [ ExperimentVariantSerializer(variant).data for variant in experiment.variants.all() ], } self.assertEqual(set(serializer.data.keys()), set(expected_data.keys())) self.assertEqual(serializer.data, expected_data)
def test_serializer_outputs_expected_multipref_schema_for_singularpref( self): experiment = ExperimentFactory.create( pref_type=Experiment.PREF_TYPE_INT, pref_branch=Experiment.PREF_BRANCH_DEFAULT, firefox_min_version="70.0", locales=[LocaleFactory.create()], countries=[CountryFactory.create()], public_description="this is my public description!", public_name="public name", normandy_slug="some-random-slug", platforms=[Experiment.PLATFORM_WINDOWS], ) variant = ExperimentVariant(slug="slug-value", ratio=25, experiment=experiment, value=5) variant.save() expected_comment = expected_comment = ( f"{experiment.client_matching}\n" f"Platform: ['All Windows']\n") serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "multi-preference-experiment") self.assertEqual(serializer.data["name"], experiment.name) self.assertEqual(serializer.data["comment"], expected_comment) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) expected_data = { "slug": "some-random-slug", "experimentDocumentUrl": experiment.experiment_url, "userFacingName": "public name", "userFacingDescription": "this is my public description!", "branches": [{ "preferences": { experiment.pref_name: { "preferenceBranchType": "default", "preferenceType": Experiment.PREF_TYPE_INT, "preferenceValue": 5, } }, "ratio": 25, "slug": "slug-value", }], } self.assertEqual(serializer.data["arguments"], expected_data)
def test_serializer_outputs_expected_schema_for_multipref(self): experiment = ExperimentFactory.create( firefox_min_version="70.0", locales=[LocaleFactory.create()], countries=[CountryFactory.create()], public_description="this is my public description!", public_name="public name", normandy_slug="some-random-slug", platforms=[ Experiment.PLATFORM_WINDOWS, Experiment.PLATFORM_MAC, Experiment.PLATFORM_LINUX, ], is_multi_pref=True, ) variant = ExperimentVariant(slug="slug-value", ratio=25, experiment=experiment, is_control=True) variant.save() pref = VariantPreferencesFactory.create(variant=variant) expected_comment = expected_comment = f"{experiment.client_matching}\n" serializer = ExperimentRecipeSerializer(experiment) self.assertEqual(serializer.data["action_name"], "multi-preference-experiment") self.assertEqual(serializer.data["name"], experiment.name) self.assertEqual(serializer.data["comment"], expected_comment) self.assertEqual( serializer.data["filter_object"], [ FilterObjectBucketSampleSerializer(experiment).data, FilterObjectChannelSerializer(experiment).data, FilterObjectVersionsSerializer(experiment).data, FilterObjectLocaleSerializer(experiment).data, FilterObjectCountrySerializer(experiment).data, ], ) expected_data = { "slug": "some-random-slug", "experimentDocumentUrl": experiment.experiment_url, "userFacingName": "public name", "userFacingDescription": "this is my public description!", "branches": [{ "preferences": { pref.pref_name: { "preferenceBranchType": pref.pref_branch, "preferenceType": pref.pref_type, "preferenceValue": pref.pref_value, } }, "ratio": 25, "slug": "slug-value", }], } self.assertEqual(serializer.data["arguments"], expected_data)