コード例 #1
0
class GetByUrlPathTestCase(ContentAPIBaseTestCase):
    """
    Tests getting a page by its path.
    """
    def setUp(self):
        super().setUp()
        self.page = ConditionPageFactory(title='Page')

    def test_get(self):
        """
        Tests that getting a page by its path returns 200 if it exists.
        """
        response = self.get_content_api_response(page_path='conditions/page/')
        self.assertEqual(response.status_code, 200)
        content = response.json()

        self.assertEqual(content['title'], self.page.title)
        self.assertEqual(content['id'], self.page.id)

    def test_404_if_url_doesnt_exist(self):
        """
        Tests that trying to get a page by an invalid page returns 404
        """
        response = self.get_content_api_response(page_path='invalid/')
        self.assertEqual(response.status_code, 404)

    def test_404_if_not_live(self):
        """
        Tests that trying to get a page that is not live returns 404
        """
        self.page.live = False
        self.page.save()

        response = self.get_content_api_response(page_path='conditions/page/')
        self.assertEqual(response.status_code, 404)
コード例 #2
0
class LivePagesTestCase(TestCase):
    def setUp(self):
        super().setUp()

        self.page = ConditionPageFactory(title='Page')
        self.request = self.get_request(Site.objects.first())

    def get_request(self, site):
        request = self.client.get('/test/', HTTP_HOST=site.hostname)
        request.site = site
        return request

    @override_settings(FRONTEND_BASE_URL=TEST_FRONTEND_BASE_URL)
    def test_live_page_redirects_to_frontend(self):
        """
        Tests that the url /<page-url>/ redirects to <frontend-url>/<page-url>/ where
            frontend-url == settings.FRONTEND_BASE_URL
        if the page is live
        """
        response = self.client.get(self.page.full_url)
        expected_url = '{}{}'.format(TEST_FRONTEND_BASE_URL, self.page.url)
        self.assertRedirects(response, expected_url, target_status_code=302)

    def test_non_live_page_404s(self):
        """
        Tests that the url /<page-url>/ returns 404 if the page is not live
        """
        self.page.live = False
        self.page.save()

        response = self.client.get(self.page.full_url)
        self.assertEqual(response.status_code, 404)

    def test_non_existing_page_404s(self):
        """
        Tests that if the invalid urls return 404
        """
        invalid_url = '{}invalid/'.format(self.page.full_url)
        response = self.client.get(invalid_url)
        self.assertEqual(response.status_code, 404)

    @override_settings(FRONTEND_BASE_URL='')
    def test_placeholder_response_with_empty_settings(self):
        """
        Tests that the url /<page-url>/ returns a placeholder string
        if settings.FRONTEND_BASE_URL has not been set
        """
        response = self.client.get(self.page.full_url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.content,
                         b'Please set FRONTEND_BASE_URL in your settings.py')
コード例 #3
0
    def setUp(self):
        # set permissions
        wagtailadmin_content_type, _ = ContentType.objects.get_or_create(
            app_label='wagtailadmin', model='admin')
        Permission.objects.get_or_create(
            content_type=wagtailadmin_content_type,
            codename='access_admin',
            name='Can access Wagtail admin')

        # login
        self.user = self.login()

        # create pages
        self.page = ConditionPageFactory(title='Page')
        self.revision = self.page.save_revision()
コード例 #4
0
    def setUp(self):
        # set up images
        self.image = ImageFactory(title='Test image')

        # Set up pages
        ConditionPageFactory(
            title='condition-1', slug='condition-1',
            main=EditorialPage._meta.get_field('main').to_python(
                json.dumps([
                    {
                        'type': 'text',
                        'value': {
                            'variant': 'markdown',
                            'value': 'lorem ipsum'
                        },
                    },
                    {
                        'type': 'image',
                        'value': self.image.pk
                    }
                ])
            )
        )
        self.url = reverse('export-content',)

        # Login
        self.login()
コード例 #5
0
    def test_import_existing_page(self, mocked_get_data_from_remote, mocked_get_list_of_children_from_remote):
        title = 'test'
        description = 'description'
        ConditionPageFactory(title=title, slug=title, search_description='old text')

        tot_pages = Page.objects.count()

        mocked_get_list_of_children_from_remote.return_value = []
        mocked_get_data_from_remote.return_value = {
            'layout': 'content-simple',
            'title': title,
            'choicesOrigin': '',
            'description': description,
            'nonEmergencyCallout': True,
            'content': {
                'header': [],
                'main': []
            }
        }
        importer = Importer()

        importer.import_items('conditions', [title])
        self.assertEqual(importer.items_in_error, [])

        self.assertEqual(Page.objects.count(), tot_pages)
        page = EditorialPage.objects.get(slug='test')

        self.assertEqual(page.title, title)
        self.assertEqual(page.choices_origin, '')
        self.assertEqual(page.search_description, description)
        self.assertEqual(page.non_emergency_callout, True)
        self.assertTrue(page.live)
コード例 #6
0
    def test_existing_pages_unselected(self, mocked_get_list_of_children_from_remote):
        mocked_get_list_of_children_from_remote.side_effect = self.get_mocked_list_of_children()

        ConditionPageFactory(title='condition-2', slug='condition-2')
        ConditionPageFactory(title='different-condition', slug='different-condition')

        SymptomPageFactory(title='symptom-3', slug='symptom-3')

        form = ImportForm()
        self.assertEqual(
            form.fields['conditions'].initial,
            ['condition-1', 'condition-3']
        )

        self.assertEqual(
            form.fields['symptoms'].initial,
            ['symptom-1', 'symptom-2']
        )
コード例 #7
0
    def setUp(self):
        """
        Creates:

        root
            homepage
                conditions (live)
                    level1-a (live)
                    level1-b (draft)
                    level1-c (live)
                        level2-c (live)
        """
        super().setUp()

        ConditionsPageFactory()

        ConditionPageFactory(title='level1-a live', slug='level1-a', live=True)
        ConditionPageFactory(title='level1-b draft', slug='level1-b', live=False)
        level1c = ConditionPageFactory(title='level1-c live', slug='level1-c', live=True)
        ConditionPageFactory(
            title='level2-c live', slug='level2-c', live=True,
            depth=level1c.depth + 1,
            path='{}0001'.format(level1c.path)
        )
コード例 #8
0
 def setUp(self):
     super().setUp()
     self.page = ConditionPageFactory(title='Page')
コード例 #9
0
    def setUp(self):
        super().setUp()

        self.page = ConditionPageFactory(title='Page')
        self.request = self.get_request(Site.objects.first())
コード例 #10
0
class PreviewPagesTestCase(ContentAPIBaseTestCase):
    """
    Tests getting the content of a page by its revision id.
    """
    def setUp(self):
        super().setUp()
        self.page = ConditionPageFactory(title='Page')

    def test_get_by_revision_x(self):
        """
        Tests that getting a page by its revision id returns the related content, not the live one.
        """

        # save some revisions
        revision_data = []
        for change_number in range(1, 3):
            self.page.title = 'Page change {}'.format(change_number)
            self.page.save()
            revision = self.page.save_revision()
            revision_data.append((revision.id, self.page.title))

        # get those versions and check that page.title == saved title
        for revision_id, page_title in revision_data:
            response = self.get_preview_content_api_response(
                self.page.id, revision_id=revision_id)
            content = response.json()
            self.assertEqual(response.status_code, 200)
            self.assertEqual(content['title'], page_title)

    def test_404_if_revision_doesnt_exist(self):
        """
        Tests that trying to get a page by an invalid revision returns 404.
        """
        # save a few revisions
        for change_number in range(1, 3):
            self.page.title = 'Page change {}'.format(change_number)
            self.page.save()
            self.page.save_revision()

        # get invalid revision id (last id + 1)
        revision_id = PageRevision.objects.order_by('-id')[0].id + 1

        response = self.get_preview_content_api_response(
            self.page.id, revision_id=revision_id)
        self.assertEqual(response.status_code, 404)

    def test_get_defaults_to_latest_revision(self):
        """
        Tests that getting a page without specifying a revision id returns the latest version.
        """
        # save some revisions
        latest_title = self.page.title
        for change_number in range(1, 3):
            self.page.title = 'Page change {}'.format(change_number)
            self.page.save()
            self.page.save_revision()
            latest_title = self.page.title

        # check that returned content.title == latest title
        response = self.get_preview_content_api_response(self.page.id)
        content = response.json()
        self.assertEqual(response.status_code, 200)
        self.assertEqual(content['title'], latest_title)