def test_save_with_metadata(self): title = "Test Resource" course = TestResource.test_course default_metadata = Resource.metadata_default() missing_metadata = ("", None) invalid_metadata = (None, True, False, 123, {}) valid_metadata = ([], [{"label":"X", "value": "Y"}]) # check that missing or invalid metadata values are saved using the default value # for example the string "null" is not a valid value, so it should be overwritten with "[]" for metadata in missing_metadata + invalid_metadata: instance = Resource(course=course, title=title, metadata=metadata) instance.save() self.assertNotEqual(metadata, instance.metadata) self.assertEqual(default_metadata, instance.metadata) # check that valid metadata is saved unchanged for metadata in valid_metadata: instance = Resource(course=course, title=title, metadata=json.dumps(metadata)) instance.save() self.assertEqual(json.dumps(metadata), instance.metadata)