예제 #1
0
    def update_changelog(self, instance, validated_data):
        new_serialized_vals = ChangeLogSerializer(instance).data
        user = self.context["request"].user
        changed_data = validated_data.copy()
        generate_change_log(self.old_serialized_vals, new_serialized_vals,
                            instance, changed_data, user)

        return instance
 def test_generate_change_log_is_empty_when_no_change(self):
     experiment = ExperimentFactory.create()
     old_serialized_val = ChangeLogSerializer(experiment).data
     new_serialized_val = ChangeLogSerializer(experiment).data
     changed_data = {}
     user = UserFactory.create()
     generate_change_log(old_serialized_val, new_serialized_val, experiment,
                         changed_data, user)
     changed_values = experiment.changes.latest().changed_values
     self.assertEqual(changed_values, {})
예제 #3
0
    def save(self, *args, **kwargs):

        experiment = super().save(*args, **kwargs)
        new_serialized_vals = ChangeLogSerializer(self.instance).data
        message = self.get_changelog_message()
        generate_change_log(
            self.old_serialized_vals,
            new_serialized_vals,
            experiment,
            self.changed_data,
            self.request.user,
            message,
            self.fields,
        )
        return experiment
    def test_generate_change_log_gives_correct_output(self):
        experiment = ExperimentFactory.create_with_status(
            target_status=Experiment.STATUS_REVIEW,
            num_variants=0,
            short_description="description",
            qa_status="pretty good",
            firefox_min_version="55.0",
        )
        variant1 = ExperimentVariantFactory.create(
            experiment=experiment,
            ratio=75,
            description="variant1 description",
            name="variant1",
            slug="variant1-slug",
        )
        variant1.save()
        old_serialized_val = ChangeLogSerializer(experiment).data

        experiment.short_description = "changing the description"
        experiment.qa_status = "good"
        experiment.firefox_min_version = "56.0"
        variant2 = ExperimentVariantFactory.create(
            experiment=experiment,
            ratio=25,
            description="variant2 description",
            name="variant2",
            slug="variant2-slug",
        )
        variant2.save()

        VariantPreferencesFactory.create(
            variant=variant2,
            pref_name="p1",
            pref_type=Experiment.PREF_TYPE_INT,
            pref_branch=Experiment.PREF_BRANCH_DEFAULT,
            pref_value="5",
        )

        experiment.save()
        new_serialized_val = ChangeLogSerializer(experiment).data
        changed_variant_pref = {
            "pref_name": "p1",
            "pref_type": "integer",
            "pref_branch": "default",
            "pref_value": "5",
        }
        changed_data = {
            "short_description":
            "changing the description",
            "qa_status":
            "good",
            "firefox_min_version":
            "56.0",
            "variants": [{
                "ratio": 25,
                "description": "variant2 description",
                "name": "variant2",
                "slug": "variant2-slug",
                "preferences": [changed_variant_pref],
            }],
        }

        user = UserFactory.create()

        generate_change_log(old_serialized_val, new_serialized_val, experiment,
                            changed_data, user)

        changed_value = experiment.changes.latest().changed_values
        expected_changed_value = {
            "firefox_min_version": {
                "display_name": "Firefox Min Version",
                "new_value": "56.0",
                "old_value": "55.0",
            },
            "qa_status": {
                "display_name": "Qa Status",
                "new_value": "good",
                "old_value": "pretty good",
            },
            "short_description": {
                "display_name": "Short Description",
                "new_value": "changing the description",
                "old_value": "description",
            },
            "variants": {
                "display_name":
                "Branches",
                "new_value": [
                    {
                        "ratio": 25,
                        "description": "variant2 description",
                        "name": "variant2",
                        "slug": "variant2-slug",
                    },
                    {
                        "ratio": 75,
                        "description": "variant1 description",
                        "name": "variant1",
                        "slug": "variant1-slug",
                    },
                ],
                "old_value": [{
                    "ratio": 75,
                    "description": "variant1 description",
                    "name": "variant1",
                    "slug": "variant1-slug",
                }],
            },
        }
        self.assertEqual(
            expected_changed_value["firefox_min_version"],
            changed_value["firefox_min_version"],
        )
        self.assertEqual(expected_changed_value["qa_status"],
                         changed_value["qa_status"])
        self.assertEqual(
            expected_changed_value["short_description"],
            changed_value["short_description"],
        )
        self.assertCountEqual(expected_changed_value["variants"],
                              changed_value["variants"])