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)