Exemple #1
0
    def test_detail(self):
        """Validate we can get a specific series."""
        series = create_series()
        create_cover(series=series)

        resp = self.client.get(self.api_url(series.id))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertSerialized(series, resp.data)
Exemple #2
0
    def _create_series(self):
        project_obj = create_project(linkname='myproject')
        person_obj = create_person(email='*****@*****.**')
        series_obj = create_series(project=project_obj, submitter=person_obj)
        create_cover(series=series_obj)
        create_patch(series=series_obj)

        return series_obj
Exemple #3
0
    def test_list_version_1_0(self):
        create_cover()

        resp = self.client.get(self.api_url(version='1.0'))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertIn('url', resp.data[0])
        self.assertNotIn('mbox', resp.data[0])
        self.assertNotIn('web_url', resp.data[0])
Exemple #4
0
    def test_detail_version_1_0(self):
        cover = create_cover()

        resp = self.client.get(self.api_url(cover.id, version='1.0'))
        self.assertIn('url', resp.data)
        self.assertNotIn('web_url', resp.data)
        self.assertNotIn('comments', resp.data)
Exemple #5
0
 def test_cover_created(self):
     cover = utils.create_cover()
     events = _get_events(cover=cover)
     self.assertEqual(events.count(), 1)
     self.assertEqual(events[0].category, Event.CATEGORY_COVER_CREATED)
     self.assertEqual(events[0].project, cover.project)
     self.assertEventFields(events[0])
Exemple #6
0
    def test_detail(self):
        """Validate we can get a specific cover letter."""
        cover_obj = create_cover()

        resp = self.client.get(self.api_url(cover_obj.id))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertSerialized(cover_obj, resp.data)
Exemple #7
0
    def test_redirect(self):
        cover_id = create_cover().id

        requested_url = reverse('patch-detail', kwargs={'patch_id': cover_id})
        redirect_url = reverse('cover-detail', kwargs={'cover_id': cover_id})

        response = self.client.get(requested_url)
        self.assertRedirects(response, redirect_url)
Exemple #8
0
    def test_redirect(self):
        cover_id = create_cover().id

        requested_url = reverse('patch-detail', kwargs={'patch_id': cover_id})
        redirect_url = reverse('cover-detail', kwargs={'cover_id': cover_id})

        response = self.client.get(requested_url)
        self.assertRedirects(response, redirect_url)
Exemple #9
0
    def test_list_version_1_0(self):
        """List cover letter comments using API v1.0."""
        cover = create_cover()
        create_comment(submission=cover)

        # check we can't access comments using the old version of the API
        with self.assertRaises(NoReverseMatch):
            self.client.get(self.api_url(cover, version='1.0'))
Exemple #10
0
    def test_list(self):
        """List cover letter comments."""
        cover = create_cover()
        comment = create_comment(submission=cover)

        resp = self.client.get(self.api_url(cover))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(comment, resp.data[0])
Exemple #11
0
    def test_find_cover_for_comment__direct_reply(self):
        """Test behavior when we have a reference to the original cover."""
        msgid = make_msgid()
        project = create_project()
        cover = create_cover(msgid=msgid, project=project)

        result = parser.find_cover_for_comment(project, [msgid])

        self.assertEqual(cover, result)
Exemple #12
0
    def test_detail(self):
        """Validate we can get a specific series."""
        cover = create_cover()
        series = create_series()
        series.add_cover_letter(cover)

        resp = self.client.get(self.api_url(series.id))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertSerialized(series, resp.data)
Exemple #13
0
    def test_list_filter_project(self):
        """Filter cover letters by project."""
        cover = create_cover()
        project = cover.project

        resp = self.client.get(self.api_url(), {'project': project.linkname})
        self.assertEqual([cover.id], [x['id'] for x in resp.data])

        resp = self.client.get(self.api_url(), {'project': 'invalidproject'})
        self.assertEqual(0, len(resp.data))
Exemple #14
0
    def test_find_cover_for_comment__indirect_reply(self):
        """Test behavior when we only have a reference to a comment."""
        msgid = make_msgid()
        project = create_project()
        cover = create_cover(project=project)
        create_cover_comment(cover=cover, msgid=msgid)

        result = parser.find_cover_for_comment(project, [msgid])

        self.assertEqual(cover, result)
Exemple #15
0
    def test_list_authenticated(self):
        """List cover letters as an authenticated user."""
        cover = create_cover()
        user = create_user()

        self.client.force_authenticate(user=user)
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(cover, resp.data[0])
Exemple #16
0
    def test_list_version_1_1(self):
        """List cover letter comments using API v1.1."""
        cover = create_cover()
        comment = create_cover_comment(cover=cover)

        resp = self.client.get(self.api_url(cover, version='1.1'))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(comment, resp.data[0])
        self.assertNotIn('list_archive_url', resp.data[0])
Exemple #17
0
    def test_list(self):
        """Validate we can list series."""
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(0, len(resp.data))

        project_obj = create_project(linkname='myproject')
        person_obj = create_person(email='*****@*****.**')
        series_obj = create_series(project=project_obj, submitter=person_obj)
        create_cover(series=series_obj)
        create_patch(series=series_obj)

        # anonymous users
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        series_rsp = resp.data[0]
        self.assertSerialized(series_obj, series_rsp)

        # authenticated user
        user = create_user()
        self.client.force_authenticate(user=user)
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        series_rsp = resp.data[0]
        self.assertSerialized(series_obj, series_rsp)

        # test filtering by project
        resp = self.client.get(self.api_url(), {'project': 'myproject'})
        self.assertEqual([series_obj.id], [x['id'] for x in resp.data])
        resp = self.client.get(self.api_url(), {'project': 'invalidproject'})
        self.assertEqual(0, len(resp.data))

        # test filtering by owner, both ID and email
        resp = self.client.get(self.api_url(), {'submitter': person_obj.id})
        self.assertEqual([series_obj.id], [x['id'] for x in resp.data])
        resp = self.client.get(self.api_url(), {
            'submitter': '*****@*****.**'})
        self.assertEqual([series_obj.id], [x['id'] for x in resp.data])
        resp = self.client.get(self.api_url(), {
            'submitter': '*****@*****.**'})
        self.assertEqual(0, len(resp.data))
Exemple #18
0
    def test_list_anonymous(self):
        """List cover letter as anonymous user."""
        # we specifically set series to None to test code that handles legacy
        # cover letters created before series existed
        cover = create_cover(series=None)

        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(cover, resp.data[0])
Exemple #19
0
    def test_list_authenticated(self):
        """List cover letters as an authenticated user."""
        cover = create_cover()
        user = create_user()

        self.client.force_authenticate(user=user)
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(cover, resp.data[0])
Exemple #20
0
    def test_list_filter_project(self):
        """Filter cover letters by project."""
        cover = create_cover()
        project = cover.project

        resp = self.client.get(self.api_url(), {'project': project.linkname})
        self.assertEqual([cover.id], [x['id'] for x in resp.data])

        resp = self.client.get(self.api_url(), {'project': 'invalidproject'})
        self.assertEqual(0, len(resp.data))
Exemple #21
0
    def test_list_anonymous(self):
        """List cover letter as anonymous user."""
        # we specifically set series to None to test code that handles legacy
        # cover letters created before series existed
        cover = create_cover(series=None)

        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(cover, resp.data[0])
Exemple #22
0
    def test_list_filter_msgid(self):
        """Filter covers by msgid."""
        cover = create_cover()

        resp = self.client.get(self.api_url(), {'msgid': cover.url_msgid})
        self.assertEqual([cover.id], [x['id'] for x in resp.data])

        # empty response if nothing matches
        resp = self.client.get(self.api_url(), {'msgid': '*****@*****.**'})
        self.assertEqual(0, len(resp.data))
Exemple #23
0
    def test_old_mbox_url(self):
        cover = create_cover()

        requested_url = reverse('cover-mbox-redirect',
                                kwargs={'cover_id': cover.id})
        redirect_url = reverse('cover-mbox',
                               kwargs={'project_id': cover.project.linkname,
                                       'msgid': cover.url_msgid})

        response = self.client.get(requested_url)
        self.assertRedirects(response, redirect_url)
Exemple #24
0
    def test_redirect(self):
        cover = create_cover()

        requested_url = reverse('patch-detail',
                                kwargs={'project_id': cover.project.linkname,
                                        'msgid': cover.url_msgid})
        redirect_url = reverse('cover-detail',
                               kwargs={'project_id': cover.project.linkname,
                                       'msgid': cover.url_msgid})

        response = self.client.get(requested_url)
        self.assertRedirects(response, redirect_url)
    def test_update_invalid_addressed(self):
        """Update an existing cover letter comment using invalid values.

        Ensure we handle invalid cover letter comment addressed values.
        """
        person = create_person(name='cover-submitter', user=create_user())
        cover = create_cover(submitter=person)
        resp = self._test_update(person=person,
                                 cover=cover,
                                 addressed='not-valid',
                                 validate_request=False)
        self.assertEqual(status.HTTP_400_BAD_REQUEST, resp.status_code)
        self.assertFalse(
            getattr(CoverComment.objects.all().first(), 'addressed'))
Exemple #26
0
    def _create_events(self):
        """Create sample events.

        This one's a bit weird. While we could generate event models ourselves,
        it seems wiser to test the event machinery as many times as possible.
        As a result, we actually create a load of *other* objects, which will
        raise signals and trigger the remainder.
        """
        # series-created
        series = create_series()
        # patch-created, patch-completed, series-completed
        patch = create_patch(series=series)
        # cover-created
        create_cover(series=series)
        # check-created
        create_check(patch=patch)
        # patch-delegated, patch-state-changed
        user = create_maintainer(project=patch.project)
        state = create_state()
        patch.delegate = user
        patch.state = state
        patch.save()

        return Event.objects.all()
Exemple #27
0
    def test_cover_redirect(self):
        cover = create_cover()
        comment_id = create_cover_comment(cover=cover).id

        requested_url = reverse('comment-redirect',
                                kwargs={'comment_id': comment_id})
        redirect_url = '%s#%d' % (reverse('cover-detail',
                                          kwargs={
                                              'project_id':
                                              cover.project.linkname,
                                              'msgid': cover.url_msgid
                                          }), comment_id)

        response = self.client.get(requested_url)
        self.assertRedirects(response, redirect_url)
Exemple #28
0
    def test_detail(self):
        """Validate we can get a specific cover letter."""
        cover_obj = create_cover(
            headers='Received: from somewhere\nReceived: from another place')

        resp = self.client.get(self.api_url(cover_obj.id))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertSerialized(cover_obj, resp.data)

        # Make sure we don't regress and all headers with the same key are
        # included in the response
        parsed_headers = email.parser.Parser().parsestr(
            cover_obj.headers, True)
        for key, value in parsed_headers.items():
            self.assertIn(value, resp.data['headers'][key])
Exemple #29
0
    def test_list_filter_submitter(self):
        """Filter cover letter by submitter."""
        cover = create_cover()
        submitter = cover.submitter

        # test filtering by submitter, both ID and email
        resp = self.client.get(self.api_url(), {'submitter': submitter.id})
        self.assertEqual([cover.id], [x['id'] for x in resp.data])

        resp = self.client.get(self.api_url(), {'submitter': submitter.email})
        self.assertEqual([cover.id], [x['id'] for x in resp.data])

        resp = self.client.get(self.api_url(),
                               {'submitter': '*****@*****.**'})
        self.assertEqual(0, len(resp.data))
Exemple #30
0
    def test_list_filter_submitter(self):
        """Filter cover letter by submitter."""
        cover = create_cover()
        submitter = cover.submitter

        # test filtering by submitter, both ID and email
        resp = self.client.get(self.api_url(), {'submitter': submitter.id})
        self.assertEqual([cover.id], [x['id'] for x in resp.data])

        resp = self.client.get(self.api_url(), {
            'submitter': submitter.email})
        self.assertEqual([cover.id], [x['id'] for x in resp.data])

        resp = self.client.get(self.api_url(), {
            'submitter': '*****@*****.**'})
        self.assertEqual(0, len(resp.data))
Exemple #31
0
    def test_detail(self):
        """Validate we can get a specific cover letter."""
        cover_obj = create_cover(
            headers='Received: from somewhere\nReceived: from another place'
        )

        resp = self.client.get(self.api_url(cover_obj.id))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertSerialized(cover_obj, resp.data)

        # Make sure we don't regress and all headers with the same key are
        # included in the response
        parsed_headers = email.parser.Parser().parsestr(cover_obj.headers,
                                                        True)
        for key, value in parsed_headers.items():
            self.assertIn(value, resp.data['headers'][key])
Exemple #32
0
    def test_detail(self):
        """Validate we can get a specific series."""
        series = create_series()

        resp = self.client.get(self.api_url(series.id))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertSerialized(series, resp.data)

        patch = create_patch(project=series.project)
        series.add_patch(patch, 1)
        resp = self.client.get(self.api_url(series.id))
        self.assertSerialized(series, resp.data)

        cover_letter = create_cover(project=series.project)
        series.add_cover_letter(cover_letter)
        resp = self.client.get(self.api_url(series.id))
        self.assertSerialized(series, resp.data)
Exemple #33
0
    def test_list(self):
        cover_obj = create_cover()
        resp = self.client.get(self.api_url(cover_obj))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(0, len(resp.data))

        comment_obj = create_comment(submission=cover_obj)
        resp = self.client.get(self.api_url(cover_obj))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(comment_obj, resp.data[0])

        create_comment(submission=cover_obj)
        resp = self.client.get(self.api_url(cover_obj))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(2, len(resp.data))

        # check we can't access comments using the old version of the API
        with self.assertRaises(NoReverseMatch):
            self.client.get(self.api_url(cover_obj, version='1.0'))
Exemple #34
0
    def test_list(self):
        cover_obj = create_cover()
        resp = self.client.get(self.api_url(cover_obj))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(0, len(resp.data))

        comment_obj = create_comment(submission=cover_obj)
        resp = self.client.get(self.api_url(cover_obj))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(comment_obj, resp.data[0])

        create_comment(submission=cover_obj)
        resp = self.client.get(self.api_url(cover_obj))
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(2, len(resp.data))

        # check we can't access comments using the old version of the API
        with self.assertRaises(NoReverseMatch):
            self.client.get(self.api_url(cover_obj, version='1.0'))
Exemple #35
0
    def test_list(self):
        """Validate we can list cover letters."""
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(0, len(resp.data))

        cover_obj = create_cover()

        # anonymous user
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(cover_obj, resp.data[0])

        # authenticated user
        user = create_user()
        self.client.force_authenticate(user=user)
        resp = self.client.get(self.api_url())
        self.assertEqual(status.HTTP_200_OK, resp.status_code)
        self.assertEqual(1, len(resp.data))
        self.assertSerialized(cover_obj, resp.data[0])
Exemple #36
0
 def test_cover_redirect(self):
     cover = create_cover()
     self._test_redirect(cover, "cover-detail", "cover_id")
 def setUp(self):
     super(TestCoverComments, self).setUp()
     self.project = create_project()
     self.user = create_maintainer(self.project)
     self.cover = create_cover(project=self.project)
 def test_cover_redirect(self):
     cover = create_cover()
     self._test_redirect(cover, 'cover-detail')
Exemple #39
0
 def test_list_empty(self):
     """List cover letter comments when none are present."""
     cover = create_cover()
     resp = self.client.get(self.api_url(cover))
     self.assertEqual(status.HTTP_200_OK, resp.status_code)
     self.assertEqual(0, len(resp.data))
Exemple #40
0
 def test_cover_redirect(self):
     cover = create_cover()
     self._test_redirect(cover, 'cover-detail', 'cover_id')