def test_all_sorting_options_but(self): """Test all_sorting_options_but method""" self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_NR_VIEWS[0] ), [ LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_AVG_GRADE, LoreSortingFields.SORT_BY_TITLE, ] ) self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_NR_ATTEMPTS[0] ), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_AVG_GRADE, LoreSortingFields.SORT_BY_TITLE, ] ) self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_AVG_GRADE[0] ), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_TITLE, ] ) self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_TITLE[0] ), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_AVG_GRADE, ] ) self.assertEqual( LoreSortingFields.all_sorting_options_but('foo_field'), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_AVG_GRADE, LoreSortingFields.SORT_BY_TITLE, ] )
def repository_view(request, repo_slug): """ View for repository page. """ try: repo = get_repo(repo_slug, request.user.id) except NotFound: raise Http404 except LorePermissionDenied: raise PermissionDenied exports = request.session.get( 'learning_resource_exports', {}).get(repo.slug, []) sortby = dict(request.GET.copy()).get('sortby', []) if (len(sortby) > 0 and sortby[0] in LoreSortingFields.all_sorting_fields()): sortby_field = sortby[0] else: # default value sortby_field = LoreSortingFields.DEFAULT_SORTING_FIELD sorting_options = { "current": LoreSortingFields.get_sorting_option( sortby_field), "all": LoreSortingFields.all_sorting_options_but( sortby_field) } try: page_size = int(request.GET.get(LorePagination.page_size_query_param)) except (ValueError, KeyError, TypeError): page_size = LorePagination.page_size if page_size <= 0: page_size = LorePagination.page_size elif page_size > LorePagination.max_page_size: page_size = LorePagination.max_page_size context = { "repo": repo, "perms_on_cur_repo": get_perms(request.user, repo), "sorting_options_json": json.dumps(sorting_options), "exports_json": json.dumps(exports), "page_size_json": json.dumps(page_size) } return render( request, "repository.html", context )
def test_all_sorting_options_but(self): """Test all_sorting_options_but method""" self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_NR_VIEWS[0]), [ LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_AVG_GRADE, LoreSortingFields.SORT_BY_TITLE, ]) self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_NR_ATTEMPTS[0]), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_AVG_GRADE, LoreSortingFields.SORT_BY_TITLE, ]) self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_AVG_GRADE[0]), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_TITLE, ]) self.assertEqual( LoreSortingFields.all_sorting_options_but( LoreSortingFields.SORT_BY_TITLE[0]), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_AVG_GRADE, ]) self.assertEqual( LoreSortingFields.all_sorting_options_but('foo_field'), [ LoreSortingFields.SORT_BY_NR_VIEWS, LoreSortingFields.SORT_BY_NR_ATTEMPTS, LoreSortingFields.SORT_BY_AVG_GRADE, LoreSortingFields.SORT_BY_TITLE, ])
def test_sorting_options(self): """ Test presence of sorting options. """ sortby = "nr_views" resp = self.client.get("/repositories/{slug}/?sortby={sortby}".format( slug=self.repo.slug, sortby=sortby)) self.assertEqual( json.loads(resp.context["sorting_options_json"]), { "current": list(LoreSortingFields.get_sorting_option(sortby)), "all": [ list(x) for x in LoreSortingFields.all_sorting_options_but(sortby) ] })
def repository_view(request, repo_slug): """ View for repository page. """ try: repo = get_repo(repo_slug, request.user.id) except NotFound: raise Http404 except LorePermissionDenied: raise PermissionDenied exports = request.session.get('learning_resource_exports', {}).get(repo.slug, []) sortby = dict(request.GET.copy()).get('sortby', []) if (len(sortby) > 0 and sortby[0] in LoreSortingFields.all_sorting_fields()): sortby_field = sortby[0] else: # default value sortby_field = LoreSortingFields.DEFAULT_SORTING_FIELD sorting_options = { "current": LoreSortingFields.get_sorting_option(sortby_field), "all": LoreSortingFields.all_sorting_options_but(sortby_field) } try: page_size = int(request.GET.get(LorePagination.page_size_query_param)) except (ValueError, KeyError, TypeError): page_size = LorePagination.page_size if page_size <= 0: page_size = LorePagination.page_size elif page_size > LorePagination.max_page_size: page_size = LorePagination.max_page_size context = { "repo": repo, "perms_on_cur_repo": get_perms(request.user, repo), "sorting_options_json": json.dumps(sorting_options), "exports_json": json.dumps(exports), "page_size_json": json.dumps(page_size) } return render(request, "repository.html", context)
def extra_context(self): """Add to the context.""" context = super(RepositoryView, self).extra_context() params = dict(self.request.GET.copy()) qs_prefix = "?" # Chop out page number so we don't end up with # something like ?page=2&page=3&page=4. if "page" in params: params.pop("page") # for the same reason I remove the sorting if "sortby" in params: params.pop("sortby") if len(params) > 0: qs_prefix = [] for key in params.keys(): qs_prefix.append( "&".join([ "{0}={1}".format(key, val) for val in params[key] ]) ) qs_prefix = "?{0}&".format("&".join(qs_prefix)) show_export_button = LearningResource.objects.filter( course__repository__id=self.repo.id ).exists() context.update({ "repo": self.repo, "perms_on_cur_repo": get_perms(self.request.user, self.repo), "vocabularies": get_vocabularies(context["facets"]), "qs_prefix": qs_prefix, "sorting_options": { "current": LoreSortingFields.get_sorting_option( self.sortby), "all": LoreSortingFields.all_sorting_options_but( self.sortby) }, "exports": self.request.session.get( 'learning_resource_exports', {}).get(self.repo.slug, []), "show_export_button": show_export_button }) return context
def test_sorting_options(self): """ Test presence of sorting options. """ sortby = "nr_views" resp = self.client.get( "/repositories/{slug}/?sortby={sortby}".format( slug=self.repo.slug, sortby=sortby ) ) self.assertEqual( json.loads(resp.context["sorting_options_json"]), { "current": list(LoreSortingFields.get_sorting_option(sortby)), "all": [list(x) for x in LoreSortingFields.all_sorting_options_but(sortby)] } )