def test_get_user_badges(self): badge = badge_api.create_badge(**self.BADGE_MOCK_ATTRIBUTES) badge_api.publish_badge(badge['uri']) self.BADGE_MOCK_ATTRIBUTES['title'] = 'Badge 2' badge = badge_api.create_badge(**self.BADGE_MOCK_ATTRIBUTES) badge_api.publish_badge(badge['uri']) self.BADGE_MOCK_ATTRIBUTES['title'] = 'Badge 3' badge = badge_api.create_badge(**self.BADGE_MOCK_ATTRIBUTES) badge_api.publish_badge(badge['uri']) self.BADGE_MOCK_ATTRIBUTES['title'] = 'Badge 4' self.BADGE_MOCK_ATTRIBUTES['author_uri'] = '/uri/user/bob' badge = badge_api.create_badge(**self.BADGE_MOCK_ATTRIBUTES) badge_api.publish_badge(badge['uri']) badges = badge_api.get_user_earned_badges('/uri/autor/badgemaker') self.assertEqual(len(badges), 3) badges = badge_api.get_user_earned_badges('/uri/user/bob') self.assertEqual(len(badges), 1) badges = badge_api.get_user_earned_badges('/uri/user/auser') self.assertEqual(len(badges), 0)
def test_get_user_badges(self): badge = badge_api.create_badge(*self.badge_values) badge_api.publish_badge(badge['uri']) badge_values = self.badge_values badge_values[0] = 'Badge 2' badge = badge_api.create_badge(*badge_values) badge_api.publish_badge(badge['uri']) badge_values[0] = 'Badge 3' badge = badge_api.create_badge(*badge_values) badge_api.publish_badge(badge['uri']) badge_values[0] = 'Badge 4' badge_values[4] = '/uri/user/bob' badge = badge_api.create_badge(*badge_values) badge_api.publish_badge(badge['uri']) badges = badge_api.get_user_earned_badges('/uri/user/badgemaker') self.assertEqual(len(badges), 3) badges = badge_api.get_user_earned_badges('/uri/user/bob') self.assertEqual(len(badges), 1) badges = badge_api.get_user_earned_badges('/uri/user/auser') self.assertEqual(len(badges), 0)
def review(request): """ This view shows a list of projects for a user that he/she can submit feedback on """ user = request.session.get('user') projects = [] if user: user_badges = badge_api.get_user_earned_badges(user['uri']) for badge in user_badges: projects += project_api.get_projects_ready_for_feedback(badge['uri']) badges = [] feedback_list = [] if len(projects) == 0: badges = badge_api.get_published_badges() else: for project in projects: feedback_list = project_api.get_project_feedback(project['uri']) fetch_resources(project, feedback_list) return render_to_response( 'project/review.html', { 'projects': map(fetch_resources, projects), 'badges': map(fetch_badge_resources, badges) }, context_instance=RequestContext(request) )
def profile(request, username ): context = {} user_uri = u'/uri/user/{0}'.format(username) context['draft_badges'] = badge_api.get_user_draft_badges(user_uri) context['earned_badges'] = badge_api.get_user_earned_badges(user_uri) context['created_badges'] = badge_api.get_user_created_badges(user_uri) context['awarded_badges'] = badge_api.get_user_awarded_badges(user_uri) map(fetch_badge_resources, context['draft_badges']) map(fetch_badge_resources, context['earned_badges']) map(fetch_badge_resources, context['created_badges']) map(fetch_badge_resources, context['awarded_badges']) context['feedback_your_projects'] = project_api.search_projects(author_uri=user_uri) map(fetch_resources, context['feedback_your_projects']) peer_projects = [] feedback_latest = [] for badge in context['earned_badges']: feedback_latest += project_api.get_projects_ready_for_feedback(badge['uri']) peer_projects += project_api.search_projects(badge_uri=badge['uri']) filter_func = lambda project: not project['author_uri'] == user_uri peer_projects = filter(filter_func, peer_projects) badges_under_revision = [] context['badges_under_revision'] = None for project in context['feedback_your_projects']: badge_uri = project_api.get_badge_uri_from_project_under_revision(project['uri']) if badge_uri: badge = badge_api.get_badge(badge_uri) fetch_badge_resources(badge) badges_under_revision.append(badge) if badges_under_revision: context['badges_under_revision'] = badges_under_revision context['feedback_peer_projects'] = map(fetch_resources, peer_projects) context['feedback_latest'] = map(fetch_resources, feedback_latest) context['user'] = user_api.get_user(user_api.username2uri(username)) context['can_delete'] = False if 'user' in request.session: if context['user']['username'] == request.session.get('user')['username']: context['can_delete'] = True return render_to_response( 'dashboard/dashboard.html', context, context_instance=RequestContext(request) )
def profile_badges(request, username): user = user_api.get_user(user_api.username2uri(username)) user = check_if_owner(request.session.get('user', default=None), username, user) badges = map(fetch_badge_resources, badge_api.get_user_earned_badges(user['uri'])) draft_badges = map(fetch_badge_resources, badge_api.get_user_draft_badges(user['uri'])) projects = list_projects_by_user(user['uri']) return render_to_response( 'dashboard/dashboard_badges.html', { 'user': user, 'projects': projects, 'badges': badges, 'draft_badges': draft_badges, }, context_instance=RequestContext(request) )
def profile_dashboard(request, username): user = user_api.get_user(user_api.username2uri(username)) user = check_if_owner(request.session.get('user', default=None), username, user) if not user.get('is_owner'): return redirect(to=reverse('profile_badges', args=[username])) badges = map(fetch_badge_resources, badge_api.get_user_earned_badges(user['uri'])) projects = list_projects_ready_for_feedback(badges) return render_to_response( 'dashboard/dashboard.html', { 'user': user, 'projects': projects, 'badges': badges, }, context_instance=RequestContext(request) )
def test_award_badge(self): badge = badge_api.create_badge(*self.badge_values) self.assertNotIn(badge['author_uri'], badge_api.get_badge_experts(badge['uri'])) badge_api.publish_badge(badge['uri']) kwargs = { 'badge_uri': badge['uri'], 'user_uri': badge['author_uri'], 'expert_uri': badge['author_uri'], 'evidence_url': 'http://some.evi/dence' } # test that the author have the badge with self.assertRaisesRegexp(Exception, 'already awarded'): badge_api.award_badge(**kwargs) # test that non expert cannot award badge kwargs['user_uri'] = '/uri/user/iwantbadge' kwargs['expert_uri'] = '/uri/user/igivebadge' with self.assertRaisesRegexp(Exception, 'Cannot award'): badge_api.award_badge(**kwargs) # test that expert can award badge kwargs['expert_uri'] = badge['author_uri'] badge_api.award_badge(**kwargs) self.assertIn(kwargs['user_uri'], badge_api.get_badge_experts(badge['uri'])) badges = badge_api.get_user_earned_badges(kwargs['user_uri']) self.assertEqual(len(badges), 1) badges = badge_api.get_user_awarded_badges(kwargs['expert_uri']) self.assertEqual(len(badges), 2) # 2 because author awards it to self # test that badge awards triggers notifications kwargs['user_uri'] = '/uri/user/ialsowantbadge' with patch('notifications.models.send_notification') as send: badge_api.award_badge(**kwargs) self.assertTrue(send.called)