def test_scores_user(member, system): score_data = scores.get(member.__class__)(member) assert isinstance(score_data, UserScores) assert score_data.ns == "pootle.score.user" assert score_data.sw_version == PootleScoreConfig.version assert score_data.context == member assert score_data.public_score == member.public_score assert (list(score_data.get_scores_by_language(10)) == list( score_data.get_scores(10).order_by("tp__language").values( "tp__language").annotate(Sum("score")))) top_lang = score_data.get_scores_by_language(20).order_by( "score__sum").first() top_lang = Language.objects.get(id=top_lang["tp__language"]) assert (score_data.get_top_language_within(20) == top_lang) assert (score_data.get_language_top_scores(top_lang) == scores.get( Language)(top_lang).top_scorers) top_lang = score_data.get_top_language_within(100) language_scores = score_data.get_language_top_scores(top_lang) for index, user_score in enumerate(language_scores): if user_score['user__username'] == member.username: assert (score_data.get_top_language(100) == (index + 1, top_lang)) break assert (score_data.top_language == score_data.get_top_language(30)) project_directory = Directory.objects.get(pootle_path="/projects/") assert ( score_data.revision == revision.get(Directory)(project_directory).get( key="stats")) assert (score_data.cache_key == ( "%s.%s.%s" % (member.id, timezone.now().date(), score_data.revision))) # system gets no rank sys_score_data = scores.get(system.__class__)(system) assert (sys_score_data.top_language == (-1, None))
def test_scores_user(member, system): score_data = scores.get(member.__class__)(member) assert isinstance(score_data, UserScores) assert score_data.ns == "pootle.score.user" assert score_data.sw_version == PootleScoreConfig.version assert score_data.context == member assert score_data.public_score == member.public_score assert( list(score_data.get_scores_by_language(10)) == list( score_data.get_scores(10).order_by( "tp__language").values("tp__language").annotate(Sum("score")))) top_lang = score_data.get_scores_by_language(20).order_by("score__sum").first() top_lang = Language.objects.get(id=top_lang["tp__language"]) assert ( score_data.get_top_language_within(20) == top_lang) assert ( score_data.get_language_top_scores(top_lang) == scores.get(Language)(top_lang).top_scorers) top_lang = score_data.get_top_language_within(100) language_scores = score_data.get_language_top_scores(top_lang) for index, user_score in enumerate(language_scores): if user_score['user__username'] == member.username: assert ( score_data.get_top_language(100) == (index + 1, top_lang)) break assert ( score_data.top_language == score_data.get_top_language(30)) project_directory = Directory.objects.get(pootle_path="/projects/") assert ( score_data.revision == revision.get(Directory)( project_directory).get(key="stats")) assert ( score_data.cache_key == ("%s.%s.%s" % (member.id, timezone.now().date(), score_data.revision))) # system gets no rank sys_score_data = scores.get(system.__class__)(system) assert ( sys_score_data.top_language == (-1, None))
def test_view_user_detail(client, member, system): response = client.get( reverse('pootle-user-profile', kwargs=dict(username=member.username))) assert isinstance(response.context["view"], UserDetailView) user_scores = scores.get(member.__class__)(member) assert response.context["user_score"] == user_scores.public_score assert response.context["user_top_language"] == user_scores.top_language
def get_context_data(self, **kwargs): context = super(UserDetailView, self).get_context_data(**kwargs) context['user_is_manager'] = self.request.user.has_manager_permissions() user_scores = scores.get(User)(self.object) context['user_score'] = user_scores.public_score context["user_top_language"] = user_scores.top_language return context
def test_scores_project_set(project_set): score_data = scores.get(project_set.__class__)(project_set) assert isinstance(score_data, ProjectSetScores) _test_scores("projects", project_set, score_data) assert (score_data.cache_key == ( "%s.%s" % (timezone.now().date(), score_data.revision))) qs = score_data.scores_within_days(30) assert score_data.filter_scores(qs) is qs
def test_inclusion_tag_top_scorers(project_set, member): score_data = scores.get(project_set.__class__)(project_set) rendered = _render_str( "{% load common_tags %}{% top_scorers user score_data %}", context=dict(user=member, score_data=score_data.display())) top_scorer = list(score_data.display())[0] assert top_scorer["public_total_score"] in rendered assert top_scorer["user"].email_hash in rendered
def test_scores_project(project0): score_data = scores.get(project0.__class__)(project0) assert isinstance(score_data, ProjectScores) _test_scores("project", project0, score_data) assert (score_data.cache_key == ( "%s.%s.%s" % (project0.code, localdate(), score_data.revision))) qs = score_data.scores_within_days(30) assert (list(score_data.filter_scores(qs)) == list( qs.filter(tp__project_id=project0.id)))
def test_scores_language(language0): score_data = scores.get(language0.__class__)(language0) assert isinstance(score_data, LanguageScores) _test_scores("language", language0, score_data) assert (score_data.cache_key == ( "%s.%s.%s" % (language0.code, localdate(), score_data.revision))) qs = score_data.scores_within_days(30) assert (list(score_data.filter_scores(qs)) == list( qs.filter(tp__language_id=language0.id)))
def get_context_data(self, **kwargs): context = super(UserDetailView, self).get_context_data(**kwargs) context['user_is_manager'] = self.request.user.has_manager_permissions() user_scores = scores.get(User)(self.object) context['user_score'] = user_scores.public_score context["user_top_language"] = user_scores.top_language context["user_last_event"] = self.request.user.last_event( locale=self.request_lang) return context
def test_view_user_detail(client, member, system): response = client.get( reverse( 'pootle-user-profile', kwargs=dict(username=member.username))) assert isinstance(response.context["view"], UserDetailView) user_scores = scores.get(member.__class__)(member) assert response.context["user_score"] == user_scores.public_score assert response.context["user_top_language"] == user_scores.top_language
def test_view_projects_browse(client, request_users): user = request_users["user"] client.login( username=user.username, password=request_users["password"]) response = client.get(reverse("pootle-projects-browse")) assert response.cookies["pootle-language"].value == "projects" ctx = response.context request = response.wsgi_request user_projects = Project.accessible_by_user(request.user) user_projects = ( Project.objects.for_user(request.user) .filter(code__in=user_projects)) obj = ProjectSet(user_projects) stats = obj.data_tool.get_stats(user=request.user) if request.user.is_superuser: url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 checks = ChecksDisplay(obj).checks_by_category stats = StatsDisplay(obj, stats=stats).stats del stats["children"] chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE score_data = scores.get(ProjectSet)(obj) def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display( limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict( page="browse", pootle_path="/projects/", resource_path="", resource_path_parts=[], object=obj, browser_extends="projects/all/base.html", top_scorers=top_scorer_data, translation_states=get_translation_states(obj), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all, checks=checks, stats=stats) view_context_test(ctx, **assertions)
def test_inclusion_tag_top_scorers(project_set, member): score_data = scores.get(project_set.__class__)(project_set) rendered = _render_str( "{% load common_tags %}{% top_scorers user score_data %}", context=dict( user=member, score_data=score_data.display())) top_scorer = list(score_data.display())[0] assert top_scorer["public_total_score"] in rendered assert top_scorer["user"].email_hash in rendered
def test_scores_tp(tp0): score_data = scores.get(tp0.__class__)(tp0) assert isinstance(score_data, TPScores) _test_scores("tp", tp0, score_data) assert (score_data.cache_key == ( "%s/%s.%s.%s" % (tp0.language.code, tp0.project.code, timezone.now().date(), score_data.revision))) qs = score_data.scores_within_days(30) assert (list(score_data.filter_scores(qs)) == list( qs.filter(tp_id=tp0.id)))
def test_scores_project_set(project_set): score_data = scores.get(project_set.__class__)(project_set) assert isinstance(score_data, ProjectSetScores) _test_scores("projects", project_set, score_data) assert ( score_data.cache_key == ("%s.%s" % (timezone.now().date(), score_data.revision))) qs = score_data.scores_within_days(30) assert score_data.filter_scores(qs) is qs
def test_view_projects_browse(client, request_users): user = request_users["user"] client.login(username=user.username, password=request_users["password"]) response = client.get(reverse("pootle-projects-browse")) assert response.cookies["pootle-language"].value == "projects" ctx = response.context request = response.wsgi_request user_projects = Project.accessible_by_user(request.user) user_projects = (Project.objects.for_user( request.user).filter(code__in=user_projects)) obj = ProjectSet(user_projects) stats = obj.data_tool.get_stats(user=request.user) if request.user.is_superuser: url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 checks = ChecksDisplay(obj).checks_by_category stats = StatsDisplay(obj, stats=stats).stats del stats["children"] chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE score_data = scores.get(ProjectSet)(obj) def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display(limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict(page="browse", pootle_path="/projects/", resource_path="", resource_path_parts=[], object=obj, browser_extends="projects/all/base.html", top_scorers=top_scorer_data, translation_states=get_translation_states(obj), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all, checks=checks, stats=stats) view_context_test(ctx, **assertions)
def test_scores_language(language0): score_data = scores.get(language0.__class__)(language0) assert isinstance(score_data, LanguageScores) _test_scores("language", language0, score_data) assert ( score_data.cache_key == ("%s.%s.%s" % (language0.code, timezone.now().date(), score_data.revision))) qs = score_data.scores_within_days(30) assert ( list(score_data.filter_scores(qs)) == list(qs.filter(tp__language_id=language0.id)))
def test_scores_project(project0): score_data = scores.get(project0.__class__)(project0) assert isinstance(score_data, ProjectScores) _test_scores("project", project0, score_data) assert ( score_data.cache_key == ("%s.%s.%s" % (project0.code, timezone.now().date(), score_data.revision))) qs = score_data.scores_within_days(30) assert ( list(score_data.filter_scores(qs)) == list(qs.filter(tp__project_id=project0.id)))
def get_top_scorers_test_data(obj, offset=0): score_data = scores.get(obj.__class__)(obj) chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display( offset=offset, limit=chunk_size, formatter=scores_to_json) return dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > (offset + chunk_size))
def _test_browse_view(language, request, response, kwargs): assert response.cookies["pootle-language"].value == language.code assert (request.user.is_anonymous or "announcements/%s" % language.code in request.session) ctx = response.context user_tps = language.get_children_for_user(request.user) stats = language.data_tool.get_stats(user=request.user) items = [make_project_item(tp) for tp in user_tps] for item in items: if item["code"] in stats["children"]: item["stats"] = stats["children"][item["code"]] checks = ChecksDisplay(language).checks_by_category stats = StatsDisplay(language, stats=stats).stats del stats["children"] score_data = scores.get(language.__class__)(language) chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display(limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict( page="browse", object=language, language={ 'code': language.code, 'name': language.name }, browser_extends="languages/base.html", pootle_path="/%s/" % language.code, resource_path="", resource_path_parts=[], url_action_continue=language.get_translate_url(state='incomplete'), url_action_fixcritical=language.get_critical_url(), url_action_review=language.get_translate_url(state='suggestions'), url_action_view_all=language.get_translate_url(state='all'), # check_categories=get_qualitycheck_schema(language), translation_states=get_translation_states(language), top_scorers=top_scorer_data, checks=checks, stats=stats) sidebar = get_sidebar_announcements_context(request, (language, )) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[k] view_context_test(ctx, **assertions)
def _test_browse_view(language, request, response, kwargs): assert response.cookies["pootle-language"].value == language.code assert (request.user.is_anonymous or "announcements/%s" % language.code in request.session) ctx = response.context user_tps = language.get_children_for_user(request.user) stats = language.data_tool.get_stats(user=request.user) items = [make_project_item(tp) for tp in user_tps] for item in items: if item["code"] in stats["children"]: item["stats"] = stats["children"][item["code"]] checks = ChecksDisplay(language).checks_by_category stats = StatsDisplay(language, stats=stats).stats del stats["children"] score_data = scores.get(language.__class__)(language) chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display( limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict( page="browse", object=language, language={ 'code': language.code, 'name': language.name}, browser_extends="languages/base.html", pootle_path="/%s/" % language.code, resource_path="", resource_path_parts=[], url_action_continue=language.get_translate_url(state='incomplete'), url_action_fixcritical=language.get_critical_url(), url_action_review=language.get_translate_url(state='suggestions'), url_action_view_all=language.get_translate_url(state='all'), # check_categories=get_qualitycheck_schema(language), translation_states=get_translation_states(language), top_scorers=top_scorer_data, checks=checks, stats=stats) sidebar = get_sidebar_announcements_context(request, (language, )) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[k] view_context_test(ctx, **assertions)
def test_scores_tp(tp0): score_data = scores.get(tp0.__class__)(tp0) assert isinstance(score_data, TPScores) _test_scores("tp", tp0, score_data) assert ( score_data.cache_key == ("%s/%s.%s.%s" % (tp0.language.code, tp0.project.code, timezone.now().date(), score_data.revision))) qs = score_data.scores_within_days(30) assert ( list(score_data.filter_scores(qs)) == list(qs.filter(tp_id=tp0.id)))
def get_language_top_scores(self, language): return scores.get(language.__class__)(language).top_scorers
def scores(self): return scores.get(self.user.__class__)(self.user)
def _test_browse_view(tp, request, response, kwargs): assert (request.user.is_anonymous or "announcements/projects/%s" % tp.project.code in request.session) assert (request.user.is_anonymous or "announcements/%s" % tp.language.code in request.session) assert (request.user.is_anonymous or "announcements/%s/%s" % (tp.language.code, tp.project.code) in request.session) ctx = response.context kwargs["project_code"] = tp.project.code kwargs["language_code"] = tp.language.code resource_path = "%(dir_path)s%(filename)s" % kwargs pootle_path = "%s%s" % (tp.pootle_path, resource_path) if not (kwargs["dir_path"] or kwargs.get("filename")): obj = tp.directory elif not kwargs.get("filename"): obj = Directory.objects.get( pootle_path=pootle_path) else: obj = Store.objects.get( pootle_path=pootle_path) if obj.tp_path == "/": data_obj = obj.tp else: data_obj = obj stats = StatsDisplay( data_obj, stats=data_obj.data_tool.get_stats(user=request.user)).stats if not kwargs.get("filename"): vfolders = True else: vfolders = None filters = {} if vfolders: filters['sort'] = 'priority' checks = ChecksDisplay(obj).checks_by_category del stats["children"] score_data = scores.get(tp.__class__)(tp) chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE top_scorers = score_data.top_scorers def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display( limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict( page="browse", object=obj, translation_project=tp, language=tp.language, project=tp.project, has_admin_access=check_permission('administrate', request), is_store=(kwargs.get("filename") and True or False), browser_extends="translation_projects/base.html", pootle_path=pootle_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), translation_states=get_translation_states(obj), checks=checks, top_scorers=top_scorer_data, url_action_continue=obj.get_translate_url( state='incomplete', **filters), url_action_fixcritical=obj.get_critical_url(**filters), url_action_review=obj.get_translate_url( state='suggestions', **filters), url_action_view_all=obj.get_translate_url(state='all'), stats=stats, parent=get_parent(obj)) sidebar = get_sidebar_announcements_context( request, (tp.project, tp.language, tp)) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[k] view_context_test(ctx, **assertions) assert (('display_download' in ctx and ctx['display_download']) == (request.user.is_authenticated and check_permission('translate', request)))
def scores(self): return scores.get(self.score_context.__class__)(self.score_context)
def scores(self): return scores.get(self.user.__class__)(self.user)
def score_data(self): return scores.get(ProjectSet)( self.project_set).display(language=self.request_lang)
def scores(self): return scores.get( self.score_context.__class__)( self.score_context)
def _test_browse_view(tp, request, response, kwargs): assert (request.user.is_anonymous or "announcements/projects/%s" % tp.project.code in request.session) assert (request.user.is_anonymous or "announcements/%s" % tp.language.code in request.session) assert (request.user.is_anonymous or "announcements/%s/%s" % (tp.language.code, tp.project.code) in request.session) ctx = response.context kwargs["project_code"] = tp.project.code kwargs["language_code"] = tp.language.code resource_path = "%(dir_path)s%(filename)s" % kwargs pootle_path = "%s%s" % (tp.pootle_path, resource_path) if not (kwargs["dir_path"] or kwargs.get("filename")): obj = tp.directory elif not kwargs.get("filename"): obj = Directory.objects.get(pootle_path=pootle_path) else: obj = Store.objects.get(pootle_path=pootle_path) if obj.tp_path == "/": data_obj = obj.tp else: data_obj = obj stats = StatsDisplay( data_obj, stats=data_obj.data_tool.get_stats(user=request.user)).stats if not kwargs.get("filename"): vfolders = True else: vfolders = None filters = {} if vfolders: filters['sort'] = 'priority' checks = ChecksDisplay(obj).checks_by_category del stats["children"] score_data = scores.get(tp.__class__)(tp) chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE top_scorers = score_data.top_scorers def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display(limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict( page="browse", object=obj, translation_project=tp, language=tp.language, project=tp.project, has_admin_access=check_permission('administrate', request), is_store=(kwargs.get("filename") and True or False), browser_extends="translation_projects/base.html", pootle_path=pootle_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), translation_states=get_translation_states(obj), checks=checks, top_scorers=top_scorer_data, url_action_continue=obj.get_translate_url(state='incomplete', **filters), url_action_fixcritical=obj.get_critical_url(**filters), url_action_review=obj.get_translate_url(state='suggestions', **filters), url_action_view_all=obj.get_translate_url(state='all'), stats=stats, parent=get_parent(obj)) sidebar = get_sidebar_announcements_context(request, (tp.project, tp.language, tp)) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[k] view_context_test(ctx, **assertions) assert (('display_download' in ctx and ctx['display_download']) == (request.user.is_authenticated and check_permission( 'translate', request)))
def _test_browse_view(project, request, response, kwargs): assert (request.user.is_anonymous or "announcements/projects/%s" % project.code in request.session) ctx = response.context kwargs["project_code"] = project.code resource_path = ( "%(dir_path)s%(filename)s" % kwargs) project_path = ( "%s/%s" % (kwargs["project_code"], resource_path)) if not (kwargs["dir_path"] or kwargs["filename"]): obj = project elif not kwargs["filename"]: obj = ProjectResource( Directory.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) else: obj = ProjectResource( Store.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) stats = obj.data_tool.get_stats(user=request.user) if request.user.is_superuser or kwargs.get("language_code"): url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 checks = ChecksDisplay(obj).checks_by_category stats = StatsDisplay(obj, stats=stats).stats del stats["children"] chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE score_data = scores.get(Project)(project) def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display( limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict( page="browse", project=project, browser_extends="projects/base.html", pootle_path="/projects/%s" % project_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all, translation_states=get_translation_states(obj), top_scorers=top_scorer_data, checks=checks, stats=stats) sidebar = get_sidebar_announcements_context( request, (project, )) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[k] view_context_test(ctx, **assertions)
def score_data(self): return scores.get(ProjectSet)( self.project_set).display(language=self.request_lang)
def get_language_top_scores(self, language): return scores.get(language.__class__)(language).top_scorers
def _test_browse_view(project, request, response, kwargs): assert (request.user.is_anonymous or "announcements/projects/%s" % project.code in request.session) ctx = response.context kwargs["project_code"] = project.code resource_path = ("%(dir_path)s%(filename)s" % kwargs) project_path = ("%s/%s" % (kwargs["project_code"], resource_path)) if not (kwargs["dir_path"] or kwargs["filename"]): obj = project elif not kwargs["filename"]: obj = ProjectResource(Directory.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) else: obj = ProjectResource(Store.objects.live().filter( pootle_path__regex="^/.*/%s$" % project_path), pootle_path="/projects/%s" % project_path) stats = obj.data_tool.get_stats(user=request.user) if request.user.is_superuser or kwargs.get("language_code"): url_action_continue = obj.get_translate_url(state='incomplete') url_action_fixcritical = obj.get_critical_url() url_action_review = obj.get_translate_url(state='suggestions') url_action_view_all = obj.get_translate_url(state='all') else: (url_action_continue, url_action_fixcritical, url_action_review, url_action_view_all) = [None] * 4 checks = ChecksDisplay(obj).checks_by_category stats = StatsDisplay(obj, stats=stats).stats del stats["children"] chunk_size = TOP_CONTRIBUTORS_CHUNK_SIZE score_data = scores.get(Project)(project) def scores_to_json(score): score["user"] = score["user"].to_dict() return score top_scorers = score_data.display(limit=chunk_size, formatter=scores_to_json) top_scorer_data = dict( items=list(top_scorers), has_more_items=len(score_data.top_scorers) > chunk_size) assertions = dict(page="browse", project=project, browser_extends="projects/base.html", pootle_path="/projects/%s" % project_path, resource_path=resource_path, resource_path_parts=get_path_parts(resource_path), url_action_continue=url_action_continue, url_action_fixcritical=url_action_fixcritical, url_action_review=url_action_review, url_action_view_all=url_action_view_all, translation_states=get_translation_states(obj), top_scorers=top_scorer_data, checks=checks, stats=stats) sidebar = get_sidebar_announcements_context(request, (project, )) for k in ["has_sidebar", "is_sidebar_open", "announcements"]: assertions[k] = sidebar[k] view_context_test(ctx, **assertions)