Exemplo n.º 1
0
    def test_nimbus_config(self):
        user_email = "*****@*****.**"
        feature_configs = NimbusFeatureConfigFactory.create_batch(10)

        response = self.query(
            """
            query{
                nimbusConfig{
                    application {
                        label
                        value
                    }
                    channel {
                        label
                        value
                    }
                    firefoxMinVersion {
                        label
                        value
                    }
                    featureConfig {
                        name
                        slug
                        id
                        description
                    }
                    outcomes {
                        friendlyName
                        slug
                        application
                        description
                    }
                    targetingConfigSlug {
                        label
                        value
                        applicationValues
                    }
                    documentationLink {
                        label
                        value
                    }
                    hypothesisDefault
                    maxPrimaryOutcomes
                    locales {
                        code
                        name
                    }
                    countries {
                        code
                        name
                    }
                }
            }
            """,
            headers={settings.OPENIDC_EMAIL_HEADER: user_email},
        )
        self.assertEqual(response.status_code, 200)
        content = json.loads(response.content)
        config = content["data"]["nimbusConfig"]

        def assertChoices(data, text_choices):
            self.assertEqual(len(data), len(text_choices.names))
            for index, name in enumerate(text_choices.names):
                self.assertEqual(data[index]["label"], text_choices[name].label)
                self.assertEqual(data[index]["value"], name)

        assertChoices(config["application"], NimbusExperiment.Application)
        assertChoices(config["channel"], NimbusExperiment.Channel)
        assertChoices(config["firefoxMinVersion"], NimbusExperiment.Version)
        assertChoices(config["documentationLink"], NimbusExperiment.DocumentationLink)
        self.assertEqual(len(config["featureConfig"]), 13)

        for outcome in Outcomes.all():
            self.assertIn(
                {
                    "slug": outcome.slug,
                    "friendlyName": outcome.friendly_name,
                    "application": NimbusExperiment.Application(outcome.application).name,
                    "description": outcome.description,
                },
                config["outcomes"],
            )

        for feature_config in feature_configs:
            config_feature_config = next(
                filter(lambda f: f["id"] == feature_config.id, config["featureConfig"])
            )
            self.assertEqual(config_feature_config["id"], feature_config.id)
            self.assertEqual(config_feature_config["name"], feature_config.name)
            self.assertEqual(config_feature_config["slug"], feature_config.slug)
            self.assertEqual(
                config_feature_config["description"], feature_config.description
            )

        for choice in NimbusExperiment.TargetingConfig:
            self.assertIn(
                {
                    "label": choice.label,
                    "value": choice.name,
                    "applicationValues": list(
                        NimbusExperiment.TARGETING_CONFIGS[
                            choice.value
                        ].application_choice_names
                    ),
                },
                config["targetingConfigSlug"],
            )

        self.assertEqual(config["hypothesisDefault"], NimbusExperiment.HYPOTHESIS_DEFAULT)
        self.assertEqual(
            config["maxPrimaryOutcomes"], NimbusExperiment.MAX_PRIMARY_OUTCOMES
        )

        for locale in Locale.objects.all():
            self.assertIn({"code": locale.code, "name": locale.name}, config["locales"])

        for country in Country.objects.all():
            self.assertIn(
                {"code": country.code, "name": country.name}, config["countries"]
            )
Exemplo n.º 2
0
    def test_nimbus_config(self):
        user_email = "*****@*****.**"
        # Create some probes and feature configs
        feature_configs = NimbusFeatureConfigFactory.create_batch(10)
        probe_sets = NimbusProbeSetFactory.create_batch(10)

        response = self.query(
            """
            query{
                nimbusConfig{
                    applicationChannels {
                        label
                        channels
                    }
                    application {
                        label
                        value
                    }
                    channel {
                        label
                        value
                    }
                    firefoxMinVersion {
                        label
                        value
                    }
                    featureConfig {
                        name
                        slug
                        id
                        description
                    }
                    probeSets {
                        id
                        name
                    }
                    targetingConfigSlug {
                        label
                        value
                    }
                    hypothesisDefault
                    maxPrimaryProbeSets
                }
            }
            """,
            headers={settings.OPENIDC_EMAIL_HEADER: user_email},
        )
        self.assertEqual(response.status_code, 200)
        content = json.loads(response.content)
        config = content["data"]["nimbusConfig"]

        def assertChoices(data, text_choices):
            self.assertEqual(len(data), len(text_choices.names))
            for index, name in enumerate(text_choices.names):
                self.assertEqual(data[index]["label"],
                                 text_choices[name].label)
                self.assertEqual(data[index]["value"], name)

        assertChoices(config["application"], NimbusExperiment.Application)
        assertChoices(config["channel"], NimbusExperiment.Channel)
        assertChoices(config["firefoxMinVersion"], NimbusExperiment.Version)
        assertChoices(config["targetingConfigSlug"],
                      NimbusExperiment.TargetingConfig)
        self.assertEqual(len(config["featureConfig"]), 10)
        self.assertEqual(len(config["probeSets"]), 10)
        app_channels = config["applicationChannels"]
        self.assertEqual(len(app_channels),
                         len(NimbusExperiment.ApplicationChannels))
        # Transform list to dict for easier comparison
        app_channel_dict = {ac["label"]: ac["channels"] for ac in app_channels}
        for app_label, channel_names in NimbusExperiment.ApplicationChannels.items(
        ):
            app_compare_channels = app_channel_dict[app_label.label]
            self.assertEqual(
                set(app_compare_channels),
                set(channel.label for channel in channel_names),
            )
        for probe_set in probe_sets:
            config_probe_set = next(
                filter(lambda p: p["id"] == str(probe_set.id),
                       config["probeSets"]))
            self.assertEqual(config_probe_set["id"], str(probe_set.id))
            self.assertEqual(config_probe_set["name"], probe_set.name)
        for feature_config in feature_configs:
            config_feature_config = next(
                filter(lambda f: f["id"] == str(feature_config.id),
                       config["featureConfig"]))
            self.assertEqual(config_feature_config["id"],
                             str(feature_config.id))
            self.assertEqual(config_feature_config["name"],
                             feature_config.name)
            self.assertEqual(config_feature_config["slug"],
                             feature_config.slug)
            self.assertEqual(config_feature_config["description"],
                             feature_config.description)
        self.assertEqual(config["hypothesisDefault"],
                         NimbusExperiment.HYPOTHESIS_DEFAULT)
        self.assertEqual(config["maxPrimaryProbeSets"],
                         NimbusExperiment.MAX_PRIMARY_PROBE_SETS)