Commit e1885be2 by Will Daly

Fix an intermittently failing leaderboard test

parent 7933cae0
...@@ -3,19 +3,22 @@ ...@@ -3,19 +3,22 @@
Tests for leaderboard handlers in Open Assessment XBlock. Tests for leaderboard handlers in Open Assessment XBlock.
""" """
import json import json
import mock
from django.core.cache import cache
from random import randint from random import randint
from submissions import api as sub_api from urlparse import urlparse
from .base import XBlockHandlerTransactionTestCase, scenario
from django.test.utils import override_settings
from moto import mock_s3
import boto import boto
from boto.s3.key import Key from boto.s3.key import Key
from openassessment.fileupload import api from django.test.utils import override_settings
from django.core.cache import cache
import mock
from moto import mock_s3
from submissions import api as sub_api
from .base import XBlockHandlerTransactionTestCase, scenario
from openassessment.fileupload import api
from openassessment.xblock.data_conversion import create_submission_dict, prepare_submission_for_serialization from openassessment.xblock.data_conversion import create_submission_dict, prepare_submission_for_serialization
class TestLeaderboardRender(XBlockHandlerTransactionTestCase): class TestLeaderboardRender(XBlockHandlerTransactionTestCase):
@scenario('data/basic_scenario.xml') @scenario('data/basic_scenario.xml')
...@@ -264,13 +267,19 @@ class TestLeaderboardRender(XBlockHandlerTransactionTestCase): ...@@ -264,13 +267,19 @@ class TestLeaderboardRender(XBlockHandlerTransactionTestCase):
""" """
if workflow_status is not None: if workflow_status is not None:
xblock.get_workflow_info = mock.Mock(return_value={ 'status': workflow_status }) xblock.get_workflow_info = mock.Mock(return_value={'status': workflow_status})
if workflow_status == 'done': if workflow_status == 'done':
path, context = xblock.render_leaderboard_complete(xblock.get_student_item_dict()) path, context = xblock.render_leaderboard_complete(xblock.get_student_item_dict())
else: else:
path, context = xblock.render_leaderboard_incomplete() path, context = xblock.render_leaderboard_incomplete()
# Strip query string parameters from the file URLs, since these are time-dependent
# (expiration and signature)
if "topscores" in expected_context:
context["topscores"] = self._clean_score_filenames(context["topscores"])
expected_context["topscores"] = self._clean_score_filenames(context["topscores"])
self.assertEqual(path, expected_path) self.assertEqual(path, expected_path)
self.assertEqual(context, expected_context) self.assertEqual(context, expected_context)
...@@ -285,3 +294,14 @@ class TestLeaderboardRender(XBlockHandlerTransactionTestCase): ...@@ -285,3 +294,14 @@ class TestLeaderboardRender(XBlockHandlerTransactionTestCase):
fragment = self.runtime.render(xblock, "student_view") fragment = self.runtime.render(xblock, "student_view")
has_leaderboard = 'openassessment__leaderboard' in fragment.body_html() has_leaderboard = 'openassessment__leaderboard' in fragment.body_html()
self.assertEqual(has_leaderboard, is_visible) self.assertEqual(has_leaderboard, is_visible)
def _clean_score_filenames(self, scores):
"""
Remove querystring parameters from the file name of the score.
"""
for score in scores:
if score.get("file"):
url = urlparse(score["file"])
score["file"] = url.scheme + "://" + url.netloc + url.path
return scores
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment