def test_get_chart_data(self): """ Test review averaging and organizing """ chart_data = get_chart_data(difficulty=1, user=self.users[0]) self.assertEqual(len(chart_data), 2) song1 = chart_data[0] self.assertEqual(song1.get('title'), SAMPLE_SONG_DATA[0].get('title')) self.assertEqual(song1.get('id'), SAMPLE_SONG_DATA[0].get('music_id')) self.assertEqual(song1.get('avg_clear_rating'), 1.2) self.assertEqual(song1.get('avg_hc_rating'), 2.5) self.assertEqual(song1.get('avg_exhc_rating'), 3.5) self.assertEqual(song1.get('avg_score_rating'), 2.0) self.assertIsNone(song1.get('has_reviewed')) song2 = chart_data[1] self.assertEqual(song2.get('title'), SAMPLE_SONG_DATA[1].get('title')) self.assertEqual(song2.get('id'), SAMPLE_SONG_DATA[1].get('music_id')) self.assertIsNone(song2.get('avg_clear_rating')) self.assertIsNone(song2.get('has_reviewed'))
def ratings_view(request): """ Assemble ratings page. Possible filters include difficulty and version. :rtype dict: Context including chart data """ difficulty = request.GET.get('difficulty') version = request.GET.get('version') play_style = request.GET.get('style', 'SP') user = request.user.id chart_data = get_chart_data(version, difficulty, play_style, user, include_reviews=bool(request.GET.get('json'))) if request.GET.get('json') == 'true': return HttpResponse( json.dumps({'data': chart_data}, indent=4, ensure_ascii=False)) # assemble displayed info for each of the charts context = { 'charts': chart_data } # assemble page title title_elements = [] if version: title_elements.append(FULL_VERSION_NAMES[int(version)].upper()) if difficulty or not (difficulty or version): title_elements.append('LV. ' + str(difficulty or 12)) title_elements.append(play_style) create_page_title(context, title_elements) # create version/level navigator to display above songlist context['versions'] = generate_version_urls() context['levels'] = generate_level_urls() context['nav_links'] = make_nav_links() return render(request, 'ratings.html', context)