diff --git a/common/lib/xmodule/xmodule/tests/test_video.py b/common/lib/xmodule/xmodule/tests/test_video.py index e66058b18cdc30d8239c2ead276c6e80e734af6c..99b95b6fa88ec09d3b399c51d78f62d0c903855b 100644 --- a/common/lib/xmodule/xmodule/tests/test_video.py +++ b/common/lib/xmodule/xmodule/tests/test_video.py @@ -220,7 +220,23 @@ class VideoBlockTestBase(unittest.TestCase): return [child.tag for child in elem] for attr in ['tag', 'attrib', 'text', 'tail']: - self.assertEqual(getattr(expected, attr), getattr(xml, attr)) + expected_attr = getattr(expected, attr) + actual_attr = getattr(xml, attr) + + # This is to deal with a special issue in the video descriptor xml output. + # The value of the transcript attribute of the video tag is a serialized + # json string. This can have comparison problems in python3 where the order + # of the dictionary output is not gauranteed to be the same. So the strings + # don't match equally. We convert the parsed json instead so that the + # comparison can be correct. + if isinstance(expected_attr, dict) and \ + isinstance(actual_attr, dict) and \ + 'transcripts' in expected_attr and \ + 'transcripts' in actual_attr: + expected_attr['transcripts'] = json.loads(expected_attr['transcripts']) + actual_attr['transcripts'] = json.loads(actual_attr['transcripts']) + + self.assertEqual(expected_attr, actual_attr) self.assertEqual(get_child_tags(expected), get_child_tags(xml)) for left, right in zip(expected, xml): self.assertXmlEqual(left, right)