Ejemplo n.º 1
0
    def test_get_projects(self):
        project = project_api.create_project(**self.project_values)
        project_values2 = self.project_values.copy()
        project_values2['author_uri'] = '/uri/user/testuser2'
        project = project_api.create_project(**project_values2)
        project_values2['author_uri'] = '/uri/user/testuser3'
        project = project_api.create_project(**project_values2)
        project_values2['badge_uri'] = '/uri/badge/3'
        project = project_api.create_project(**project_values2)

        projects = project_api.get_projects()
        self.assertEqual(len(projects), 4)
Ejemplo n.º 2
0
    def test_project_feedback_cycle(self):
        # create badge
        badge = badge_api.create_badge(**self.badge_values)
        badge_api.publish_badge(badge['uri'])
        user = p2pu_user_api.save_user('badgemaker', 'http://placeholdit.com/40x40', '*****@*****.**')

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

        # get feedback - has to be zero, there was not any feedback submitted yet
        project_feedback = project_api.get_project_feedback(project['uri'])
        self.assertEqual(len(project_feedback), 0)

        # test that project can be revised - it can not, there has not been feedback given yet
        self.assertFalse(project_api.can_revise_project(project['uri']))

        # test that error is raised when revision is given - it has to be, there was no feedback given yet
        with self.assertRaises(Exception):
            project_api.revise_project(project['uri'], 'All better')

        # test that project is ready for feedback
        self.assertTrue(project_api.ready_for_feedback(project['uri']))

        # submit feedback
        project_api.submit_feedback(project['uri'], '/uri/user/badgemaker', 'Ugly', 'Bad', 'Good')
        project_feedback = project_api.get_project_feedback(project['uri'])

        self.assertEqual(len(project_feedback), 1)
        self.assertIn('good', project_feedback[0])
        self.assertIn('bad', project_feedback[0])
        self.assertIn('ugly', project_feedback[0])
        self.assertIn('expert_uri', project_feedback[0])

        # test that multiple feedback cannont be submitted without a revision
        #self.assertFalse(project_api.ready_for_feedback(project['uri']))
        #with self.assertRaises(Exception):
        #    project_api.submit_feedback(project['uri'], '/uri/user/badgemaker', 'Ugly', 'Bad', 'Good')

        project_api.revise_project(project['uri'], 'everything is better now!!')
        project_feedback = project_api.get_project_feedback(project['uri'])
        self.assertEqual(len(project_feedback), 2)

        project_api.submit_feedback(project['uri'], '/uri/user/badgemaker', 'Ugly', 'Bad', 'Good')

        project_api.revise_project(project['uri'], 'everything is better now, promise!!', work_url='http://mywork.com/new-and-improved')
        project_feedback = project_api.get_project_feedback(project['uri'])
        self.assertEqual(len(project_feedback), 4)
 
        self.assertIn('improvement', project_feedback[1]) 
        self.assertIn('date_created', project_feedback[1]) 
        self.assertNotIn('work_url', project_feedback[1])

        self.assertIn('improvement', project_feedback[3]) 
        self.assertIn('work_url', project_feedback[3])
Ejemplo n.º 3
0
    def test_raise_error_on_badge_if_has_projects(self):
        # setup
        badge = badge_api.create_badge(**self.BADGE_MOCK_ATTRIBUTES)
        badge_api.publish_badge(badge['uri'])
        project = {
            'badge_uri': badge['uri'],
            'author_uri': '/uri/user/author',
            'title': 'Test Project 1',
            'image_uri': '/uri/image/1',
            'work_url': 'http://example.com',
            'description': 'Some description',
            'reflection': 'Some other lesions learned',
            'tags': 'tags'
        }
        project_api.create_project(**project)

        # test that method raises error when badge has projects attached to it
        with self.assertRaises(badge_api.HasProjectsAttachedError):
            badge_api.delete_badge(badge['uri'], badge['author_uri'])
Ejemplo n.º 4
0
    def test_create_project(self):
        project = project_api.create_project(**self.project_values)
        attrs = self.project_values.keys()
        attrs += ['id', 'uri']

        for attr in attrs:
            self.assertIn(attr, project)

        for attr, value in self.project_values.items():
            self.assertEqual(project[attr], value)

        project2 = project_api.get_project(project['uri'])
        self.assertEqual(project, project2)
Ejemplo n.º 5
0
    def test_expert_feedback_and_creator_revision(self):
        badge = badge_api.create_badge(**self.badge_values)
        badge_api.publish_badge(badge['uri'])
        user = p2pu_user_api.save_user('badgemaker', 'http://placeholdit.com/40x40', '*****@*****.**')

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

        project_feedback = project_api.get_project_feedback(project['uri'])
        self.assertEqual(len(project_feedback), 0)
        
        with self.assertRaises(Exception):
            project_api.submit_feedback(project['uri'], '/uri/user/not_an_expert', 'Ugly', 'Bad', 'Good')

        project_api.submit_feedback(project['uri'], badge['author_uri'], 'Ugly', 'Bad', 'Good')
        project_feedback = project_api.get_project_feedback(project['uri'])
        self.assertEqual(len(project_feedback), 1)
Ejemplo n.º 6
0
def create(request, badge_id):
    badge = badge_api.get_badge(badge_api.id2uri(badge_id))
    fetch_badge_resources(badge)
    context = {'badge': badge}
    user_uri = request.session['user']['uri']

    if request.method == 'POST':
        form = ProjectForm(request.POST, request.FILES)
    else:
        form = ProjectForm()

    if form.is_valid():

        try:
            image = media_api.upload_image(
                request.FILES['image'],
                user_uri,
                media_root=settings.MEDIA_ROOT,
                delete_original=True)

            project = project_api.create_project(
                badge['uri'],
                user_uri,
                form.cleaned_data['title'],
                image['uri'],
                form.cleaned_data['work_url'],
                form.cleaned_data['description'],
                form.cleaned_data['reflection'],
                form.cleaned_data['tags']
            )
            return http.HttpResponseRedirect(reverse('project_view', args=(project['id'],)))
        except project_api.MultipleProjectError:
            messages.error(request, _('You have already submitted a project for this badge.'))
        except media_api.UploadImageError:
            messages.error(request, _('Project image cannot be uploaded. Possible reasons: format not supported'
                                      '(png, jpeg, jpg, gif), file size too large (up to 256kb).'))

    context['form'] = form
    return render_to_response(
        'project/create.html',
        context,
        context_instance=RequestContext(request)
    )
Ejemplo n.º 7
0
    def test_get_badge_uri_from_project_under_revision(self):
        # create badge
        badge = badge_api.create_badge('Title badge 1', '/media/img/1.png', 'desc', 'reqs', '/uri/user/2' )
        project = project_api.create_project('/uri/badge/1', '/uri/user/user1', 'Title project 1', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])

        # get badge uri from a project which is unde revision
        badge_uri = project_api.get_badge_uri_from_project_under_revision(project['uri'])

        # check badge uri
        self.assertEquals('/uri/badge/1', badge_uri)

        # submit feedback award badge
        project_api.submit_feedback(project['uri'], '/uri/user/2', 'good', 'bad', 'ugly', award_badge=True)

        # check badge uri
        badge_uri = project_api.get_badge_uri_from_project_under_revision(project['uri'])

        # check there is no more project after badge was awarded
        self.assertEquals(None, badge_uri)
Ejemplo n.º 8
0
    def test_final_feedback(self):
        badge = badge_api.create_badge(**self.badge_values)
        badge_api.publish_badge(badge['uri'])
        user = p2pu_user_api.save_user('badgemaker', 'http://placeholdit.com/40x40', '*****@*****.**')

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

        project_feedback = project_api.get_project_feedback(project['uri'])
        self.assertEqual(len(project_feedback), 0)
        
        self.assertTrue(project_api.ready_for_feedback(project['uri']))
        project_api.submit_feedback(project['uri'], badge['author_uri'], 'Ugly', 'Bad', 'Good', True)
        project_feedback = project_api.get_project_feedback(project['uri'])
        self.assertEqual(len(project_feedback), 1)

        self.assertFalse(project_api.ready_for_feedback(project['uri']))
        self.assertFalse(project_api.can_revise_project(project['uri']))
Ejemplo n.º 9
0
    def test_award_partner_badge_as_partne(self):

        #create a partner
        partner = p2pu_user_api.create_partner('test partner')

        # create a parnter badge
        badge_values = self.badge_values.copy()
        badge_values['partner_name'] = partner['name']
        badge =badge_api.create_badge(**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)

        # give feedback as a partner
        feedback = project_api.submit_feedback(
            project['uri'],
            self.badge_values['author_uri'],
            'Good',
            'Bad',
            'Ugly',
            )
        self.assertEquals(feedback, project_api.submit_feedback_result.NOT_AWARDED)

        # revise feedback
        revision = project_api.revise_project(project['uri'], 'Some improvement')
        self.assertEquals('Some improvement', revision['improvement'])

        # give feedback and award a badge
        feedback = project_api.submit_feedback(
            project['uri'],
            self.badge_values['author_uri'],
            'SecondGood',
            'SecondBad',
            'SecondUgly',
            award_badge=True
        )
        self.assertEquals(feedback, project_api.submit_feedback_result.AWARDED)
Ejemplo n.º 10
0
    def test_get_projects_ready_for_feedback(self):
        project_api.create_project('/uri/badge/1', '/uri/user/user1', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/1', '/uri/user/user2', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/1', '/uri/user/user3', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])

        project_api.create_project('/uri/badge/2', '/uri/user/user1', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/2', '/uri/user/user4', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/2', '/uri/user/user5', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])

        project_api.create_project('/uri/badge/3', '/uri/user/user1', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/3', '/uri/user/user6', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])

        projects_ready_for_feedback = project_api.get_projects_ready_for_feedback('/uri/badge/1')
        self.assertEqual(len(projects_ready_for_feedback), 3)
Ejemplo n.º 11
0
    def test_search_projects(self):
        project_api.create_project('/uri/badge/1', '/uri/user/user1', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/1', '/uri/user/user2', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/1', '/uri/user/user3', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])

        project_api.create_project('/uri/badge/2', '/uri/user/user1', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/2', '/uri/user/user4', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/2', '/uri/user/user5', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])

        project_api.create_project('/uri/badge/3', '/uri/user/user1', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])
        project_api.create_project('/uri/badge/3', '/uri/user/user6', 'Title', '/uri/image/1', 'https://url.com', 'Description', 'Reflection', ['tag1', 'tag2'])

        projects = project_api.search_projects(author_uri='/uri/user/user1')
        self.assertEqual(len(projects), 3)

        projects = project_api.search_projects(badge_uri='/uri/badge/3')
        self.assertEqual(len(projects), 2)
        
        projects = project_api.search_projects(author_uri='/uri/user/user1', badge_uri='/uri/badge/2')
        self.assertEqual(len(projects), 1)
        
        projects = project_api.search_projects(author_uri='/uri/user/user2', badge_uri='/uri/badge/3')
        self.assertEqual(len(projects), 0)
Ejemplo n.º 12
0
 def test_one_project_per_badge(self):
     project = project_api.create_project(**self.project_values)
     with self.assertRaises(project_api.MultipleProjectError):
         project_api.create_project(**self.project_values)
Ejemplo n.º 13
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')