Ejemplo n.º 1
0
    def test_get_products_after_badge_was_already_awarded(self):
        """
        Testing dashboard after badge has been awarded
        """
        #setup
        user_one = self._create_user('username_one')
        badge = self._create_badge(user_one['username'], 'Test Badge')
        badges = get_badges_by_user(username2uri(user_one['username']))

        user_two = self._create_user('username_two')
        submitted_project = self._create_project(badge['uri'], user_two['username'])

        award_badge(badge_uri=badge['uri'],
                    user_uri=username2uri(user_one['username']),
                    expert_uri=username2uri(user_one['username']),
                    evidence_url='http://evidence.test')

        submit_feedback(
            '/uri/project/%s' % submitted_project.id,
            user_one['uri'],
            'Good',
            'Bad',
            'Ugly',
            award_badge=True,
        )
        #run
        projects = list_projects_ready_for_feedback(badges)

        #verify
        self.assertEquals(len(projects), 0)
Ejemplo n.º 2
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']))

        # 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)
Ejemplo n.º 3
0
def feedback( request, project_id ):
    project = project_api.get_project(project_api.id2uri(project_id))
    badge = badge_api.get_badge(project['badge_uri'])
    user_uri = request.session['user']['uri']

    if request.method == 'POST':
        form = FeedbackForm(request.POST)
    else:
        form = FeedbackForm()

    if form.is_valid():
        project_api.submit_feedback(
            project['uri'],
            user_uri,
            form.cleaned_data['good'],
            form.cleaned_data['bad'],
            form.cleaned_data['ugly'],
            form.cleaned_data.get('award_badge', form.cleaned_data.get('award_badge', False) )
        )
        if form.cleaned_data.get('award_badge'):
            badge_api.award_badge(
                badge['uri'],
                project['author_uri'],
                user_uri,
                reverse('project_view', args=(project_id,)),

            )
            messages.success(request, _('Badge awarded to user!'))
        return http.HttpResponseRedirect(reverse('project_view', args=(project_id,)))

    context = {
        'project': project,
        'form': form
    }

    return render_to_response(
        'project/feedback.html',
        context,
        context_instance=RequestContext(request)
    )
Ejemplo n.º 4
0
def feedback(request, project_id):
    project = project_api.get_project(project_api.id2uri(project_id))
    fetch_resources(project)
    feedback = project_api.get_project_feedback(project_api.id2uri(project_id))
    badge = badge_api.get_badge(project['badge_uri'])
    fetch_badge_resources(badge)
    user_uri = request.session['user']['uri']

    if request.method == 'POST':
        form = FeedbackForm(request.POST)
    else:
        form = FeedbackForm()

    if form.is_valid():
        try:
            feedback = project_api.submit_feedback(
                project['uri'],
                user_uri,
                form.cleaned_data['good'],
                form.cleaned_data['bad'],
                form.cleaned_data['ugly'],
                form.cleaned_data.get('award_badge', form.cleaned_data.get('award_badge', False))
            )
            if feedback == project_api.submit_feedback_result.AWARDED:
                badge_api.award_badge(
                    badge['uri'],
                    project['author_uri'],
                    user_uri,
                    reverse('project_view', args=(project_id,)),
                )
                messages.success(request, _("Success! You've awarded the Badge to %s" % project['author']['username']))
            elif feedback == project_api.submit_feedback_result.REQUIRES_APPROVAL:
                messages.error(request, _("Badge can only be awarded by it's creator. "
                                          "We had notified them that you liked this project."))
        except Exception, e:
            messages.error(request, _(e[0]))
        return http.HttpResponseRedirect(reverse('project_view', args=(project_id,)))
Ejemplo n.º 5
0
    def test_badge_awarded_from_nonpartner_expert(self):
        #create a partner
        partner = p2pu_user_api.create_partner('Test parnter')

        # create partner badge
        new_badge_values = self.badge_values.copy()
        new_badge_values['partner_name'] = partner['name']

        # create a parnter badge
        badge = badge_api.create_badge(**new_badge_values)
        badge_api.publish_badge(badge['uri'])

        # submit a project for a badge
        project_values = self.project_values.copy()
        project_values['badge_uri'] = badge['uri']
        project = project_api.create_project(**project_values)

        # award badge as a partner
        feedback = project_api.submit_feedback(
            project['uri'],
            badge['author_uri'],
            'Good',
            'Bad',
            'Ugly',
            award_badge=True
            )
        self.assertEquals(feedback, project_api.submit_feedback_result.AWARDED)
        # award badge
        # HACK - needs well revision on how to refactor in order to test cycle properly
        if project_api.submit_feedback_result.AWARDED:
            with patch('badge.models.send_badge_awarded_notification') as mock_notification:
                badge_api.award_badge(badge['uri'], project_values['author_uri'], badge['author_uri'], 'http://project.org/url')

        self.assertIn(project_values['author_uri'], badge_api.get_badge_experts(badge['uri']))
        # submit another project for a badge
        another_project_values = {
            'badge_uri': badge['uri'],
            'author_uri': '/uri/user/anotheruser',
            'title': 'Test Second Title',
            'image_uri': '/uri/image/2',
            'work_url': 'http://project.org/url',
            'description': 'Did the test second time',
            'reflection': 'Will not do it earlier and more next time',
            'tags': ['test', 'tdd', 'bdd'],
        }
        project = project_api.create_project(**another_project_values)

        # award badge as a non partner
        feedback = project_api.submit_feedback(
            project['uri'],
            '/uri/user/testuser',
            'Good',
            'Bad',
            'Ugly',
            award_badge=True
            )
        self.assertEquals(feedback, project_api.submit_feedback_result.REQUIRES_APPROVAL)

        # award badge as partner
        feedback = project_api.submit_feedback(
            project['uri'],
            badge['author_uri'],
            'Good',
            'Bad',
            'Ugly',
            award_badge=True
        )
        self.assertEquals(feedback, project_api.submit_feedback_result.AWARDED)

        # test that feedback can not be given anymore
        with self.assertRaises(Exception):
            project_api.submit_feedback(
                project['uri'],
                badge['author_uri'],
                'Good',
                'Bad',
                'Ugly',
                award_badge=True
            )

        # test that revision can not be given any longer either
        with self.assertRaises(Exception):
            project_api.revise_project(project['uri'], 'Some improvement')