Ejemplo n.º 1
0
 def test_serializer_outputs_expected_schema(self):
     locale1 = LocaleFactory.create(code="ab")
     locale2 = LocaleFactory.create(code="cd")
     experiment = ExperimentFactory.create(locales=[locale1, locale2])
     serializer = FilterObjectLocaleSerializer(experiment)
     self.assertEqual(serializer.data["type"], "locale")
     self.assertEqual(set(serializer.data["locales"]), set(["ab", "cd"]))
Ejemplo n.º 2
0
 def test_view_renders_locales_correctly(self):
     user_email = "*****@*****.**"
     experiment = ExperimentFactory.create_with_status(Experiment.STATUS_DRAFT)
     experiment.locales.add(LocaleFactory(code="yy", name="Why"))
     experiment.locales.add(LocaleFactory(code="xx", name="Xess"))
     response = self.client.get(
         reverse("experiments-detail", kwargs={"slug": experiment.slug}),
         **{settings.OPENIDC_EMAIL_HEADER: user_email},
     )
     self.assertEqual(response.status_code, 200)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 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,
     )
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 def test_serializer_locales(self):
     locale = LocaleFactory()
     experiment = ExperimentFactory.create(locales=[locale])
     serializer = ExperimentSerializer(experiment)
     self.assertEqual(
         serializer.data["locales"], [{"code": locale.code, "name": locale.name}]
     )
Ejemplo n.º 7
0
 def test_serializer_outputs_expected_schema(self):
     locale = LocaleFactory.create()
     serializer = LocaleSerializer(locale)
     self.assertEqual(serializer.data, {
         "code": locale.code,
         "name": locale.name
     })
Ejemplo n.º 8
0
 def test_serializer_outputs_expected_schema(self):
     locale = LocaleFactory.create()
     serializer = LocaleSerializerMultiSelect(locale)
     self.assertEqual(serializer.data, {
         "value": locale.id,
         "label": locale.name
     })
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
    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",
     )
Ejemplo n.º 13
0
    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())
Ejemplo n.º 14
0
    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
                }],
            },
        )
Ejemplo n.º 15
0
 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"])
Ejemplo n.º 17
0
    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,
            ],
        )
Ejemplo n.º 18
0
    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),
        )
Ejemplo n.º 19
0
    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)
Ejemplo n.º 20
0
    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)
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
    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)