The type of the attrib object wasn't actually a dict.

It was an internal class that we can't easily compare to. So I'm opting
to just make the xml output be more consistent and ordered.  I was
hoping to avoid this since the order shouldn't matter but the juggling
we have to do to validate the unorderd data is more complication than
it's worth.
This commit is contained in:
Feanil Patel
2019-11-07 10:22:17 -05:00
parent 08877db858
commit 1a3f21080e
2 changed files with 2 additions and 15 deletions

View File

@@ -222,21 +222,8 @@ class VideoBlockTestBase(unittest.TestCase):
for attr in ['tag', 'attrib', 'text', 'tail']:
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)

View File

@@ -745,7 +745,7 @@ class VideoBlock(
xml.set('sub', '')
# Update `transcripts` attribute in the xml
xml.set('transcripts', json.dumps(transcripts))
xml.set('transcripts', json.dumps(transcripts, sort_keys=True))
except edxval_api.ValVideoNotFoundError:
pass