Beispiel #1
0
    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)
Beispiel #2
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)
Beispiel #3
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)
    )
Beispiel #4
0
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)
    )
Beispiel #5
0
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)
    )
Beispiel #6
0
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)
    )
Beispiel #7
0
    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)