def test_serializer_outputs_expected_schema(self): experiment = ExperimentFactory.create_with_status( Experiment.STATUS_COMPLETE, countries=[], locales=[], normandy_slug="a-normandy-slug", normandy_id=123, other_normandy_ids=[], ) # ensure expected_data has "string" if pref_type is json string pref_type = PrefTypeField().to_representation(experiment.pref_type) serializer = ExperimentSerializer(experiment) expected_data = { "client_matching": experiment.client_matching, "platform": experiment.platform, "end_date": JSTimestampField().to_representation(experiment.end_date), "experiment_url": experiment.experiment_url, "firefox_channel": experiment.firefox_channel, "firefox_min_version": experiment.firefox_min_version, "firefox_max_version": experiment.firefox_max_version, "name": experiment.name, "population": experiment.population, "population_percent": "{0:.4f}".format(experiment.population_percent), "pref_branch": experiment.pref_branch, "pref_name": experiment.pref_name, "pref_type": pref_type, "addon_experiment_id": experiment.addon_experiment_id, "addon_release_url": experiment.addon_release_url, "proposed_start_date": JSTimestampField().to_representation( experiment.proposed_start_date ), "proposed_enrollment": experiment.proposed_enrollment, "proposed_duration": experiment.proposed_duration, "public_name": experiment.public_name, "public_description": experiment.public_description, "slug": experiment.slug, "start_date": JSTimestampField().to_representation(experiment.start_date), "status": Experiment.STATUS_COMPLETE, "type": experiment.type, "normandy_slug": experiment.normandy_slug, "normandy_id": experiment.normandy_id, "other_normandy_ids": experiment.other_normandy_ids, "variants": [ ExperimentVariantSerializer(variant).data for variant in experiment.variants.all() ], "locales": [], "countries": [], "changes": [ ExperimentChangeLogSerializer(change).data for change in experiment.changes.all() ], } self.assertEqual(set(serializer.data.keys()), set(expected_data.keys())) self.assertEqual(serializer.data, expected_data)
def test_serializer_outputs_expected_schema(self): experiment = ExperimentFactory.create_with_status( Experiment.STATUS_COMPLETE, countries=[], locales=[], normandy_slug="a-normandy-slug", normandy_id=123, other_normandy_ids=[], results_fail_to_launch=False, results_failures_notes="failure notes", platforms=[Experiment.PLATFORM_LINUX], ) # ensure expected_data has "string" if pref_type is json string pref_type = PrefTypeField().to_representation(experiment.pref_type) serializer = ExperimentSerializer(experiment) expected_data = { "client_matching": experiment.client_matching, "platforms": experiment.platforms, "end_date": JSTimestampField().to_representation(experiment.end_date), "experiment_url": experiment.experiment_url, "firefox_channel": experiment.firefox_channel, "firefox_min_version": experiment.firefox_min_version, "firefox_max_version": experiment.firefox_max_version, "name": experiment.name, "population": experiment.population, "population_percent": "{0:.4f}".format(experiment.population_percent), "pref_branch": experiment.pref_branch, "pref_name": experiment.pref_name, "pref_type": pref_type, "addon_experiment_id": experiment.addon_experiment_id, "addon_release_url": experiment.addon_release_url, "proposed_start_date": JSTimestampField().to_representation( experiment.proposed_start_date ), "proposed_enrollment": experiment.proposed_enrollment, "proposed_duration": experiment.proposed_duration, "public_name": experiment.public_name, "public_description": experiment.public_description, "slug": experiment.slug, "start_date": JSTimestampField().to_representation(experiment.start_date), "status": Experiment.STATUS_COMPLETE, "type": experiment.type, "normandy_slug": experiment.normandy_slug, "normandy_id": experiment.normandy_id, "other_normandy_ids": experiment.other_normandy_ids, "variants": [ ExperimentVariantSerializer(variant).data for variant in experiment.variants.all() ], "locales": [], "countries": [], "changes": [ ExperimentChangeLogSerializer(change).data for change in experiment.changes.all() ], "results": { "results_url": None, "results_initial": None, "results_lessons_learned": None, "results_fail_to_launch": False, "results_recipe_errors": None, "results_restarts": None, "results_low_enrollment": None, "results_early_end": None, "results_no_usable_data": None, "results_failures_notes": "failure notes", "results_changes_to_firefox": None, "results_data_for_hypothesis": None, "results_confidence": None, "results_measure_impact": None, "results_impact_notes": None, }, "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, } self.assertEqual(set(serializer.data.keys()), set(expected_data.keys())) self.assertEqual(serializer.data, expected_data)
def test_field_returns_none_if_no_datetime_passed_in(self): field = JSTimestampField() self.assertEqual(field.to_representation(None), None)
def test_field_serializes_to_js_time_format(self): field = JSTimestampField() example_datetime = datetime.datetime(2000, 1, 1, 1, 1, 1, 1) self.assertEqual(field.to_representation(example_datetime), 946688461000.0)