Example #1
0
class ViewTestCases(TestCase):

    def setUp(self):
        # create a reqest factory
        self.rf = MockRequest()

    @skipUnless(layout_dir_exists, 'custom layout dir required')
    def test_custom_layout(self):
        """if a custom template is used in a template then
        that will be used to render the page"""
        # write out the test template
        layout_path = '%s/unittest.html' % c_settings.CUSTOM_LAYOUTS
        layout = open(layout_path, 'w')
        layout.write('hello world')
        layout.close()
        # now make the page
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.status = Page.VISIBLE
        page1.layout = layout_path
        page1.save()
        # get the response and it is 'hello world'
        request = self.rf.get(reverse('ccpages:view', args=[1]))
        response = view(request, page1.slug)
        self.assertEqual('hello world', response.content)
        # remove the layout and it is not equal
        page1.layout = None
        page1.save()
        response = view(request, page1.slug)
        self.assertNotEqual('hello world', response.content)
        # delete the custom template
        os.unlink(layout_path)

    def test_password_404(self):
        """Any attempt to access a page that doesn't exist returns
        a 404 status code"""
        response = self.client.get(
                reverse('ccpages:password', args=['asd']))
        self.assertEqual(404, response.status_code)

    def test_password_200(self):
        """The password page responds with a 200 ok"""
        # make a page
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.password = '******'
        page1.status = Page.VISIBLE
        page1.save()
        # make post request and we get a 200
        request = self.rf.get(
                reverse('ccpages:password', args=[page1.slug]))
        response = password(request, page1.slug)
        self.assertEqual(200, response.status_code)

    def test_password_post_incorrect_password(self):
        """When the incorrect password for a page is sent via post
        the users session is updated to include a hash that allows
        access"""
        # make a page
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.password = '******'
        page1.status = Page.VISIBLE
        page1.save()
        # make post request and we get a 200
        request = self.rf.post(
                reverse('ccpages:password', args=[page1.slug]),
                {'password': '******'})
        response = password(request, page1.slug)
        self.assertEqual(200, response.status_code)

    def test_password_post_correct_password(self):
        """When the correct password for a page is sent via post
        the users session is updated to include a hash that allows
        access"""
        # make a page
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.password = '******'
        page1.status = Page.VISIBLE
        page1.save()
        # make request and we get a 302
        request = self.rf.post(
                reverse('ccpages:password', args=[page1.slug]),
                {'password': '******'})
        response = password(request, page1.slug)
        self.assertEqual(302, response.status_code)
        # and now the session has the key and a hash in it
        self.assertEqual(
                request.session['ccpage_1_hash'],
                'c0b0f36ffdfe68518916a0ea9d8a89cd2b4bc586')

    def test_password_redirects_back_if_page_has_no_password(self):
        """if a page has no password and the user attempts to access
        the password page, they are redirected back"""
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.status = Page.VISIBLE
        page1.save()
        # make request and we get a 302
        request = self.rf.get(reverse('ccpages:password', args=[1]))
        response = password(request, page1.slug)
        self.assertEqual(302, response.status_code)
        self.assertEqual(
                response['Location'],
                reverse('ccpages:view', args=[page1.slug]))

    def test_index_no_pages_404(self):
        """if there are no pages then the index returns a 404"""
        request = self.rf.get(reverse('ccpages:index'))
        self.assertRaises(Http404, index, request)

    def test_index_200(self):
        """If there is a default then we get a nice 200"""
        # make a page
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.status = Page.VISIBLE
        page1.save()
        # make request and we get a 200
        request = self.rf.get(reverse('ccpages:index'))
        response = index(request)
        self.assertEqual(302, response.status_code)

    def test_view_404(self):
        """Any attempt to access a page that doesn't exist returns
        a 404 status code"""
        response = self.client.get(reverse('ccpages:view', args=['asd']))
        self.assertEqual(404, response.status_code)

    def test_view_with_correct_hash(self):
        """if a user visits a page with the correct hash in their
        session the view returns a 200 response"""
        # make a page
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.password = '******'
        page1.status = Page.VISIBLE
        page1.save()
        # make request and we get a 200
        request = self.rf.get(reverse('ccpages:view', args=[page1.slug]))
        hash = 'c0b0f36ffdfe68518916a0ea9d8a89cd2b4bc586'
        request.session['ccpage_1_hash'] = hash
        response = view(request, page1.slug)
        self.assertEqual(200, response.status_code)

    def test_view_200(self):
        """A visible page with no password returns a 200"""
        # make a page
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.status = Page.VISIBLE
        page1.save()
        # make request and we get a 200
        request = self.rf.get(reverse('ccpages:view', args=[1]))
        response = view(request, page1.slug)
        self.assertEqual(200, response.status_code)

    def test_view_password_redirects(self):
        """If there is a page with a password and the user isn't
        authed to view it then it redirects to the view view, but
        with a different url"""
        page1 = Page()
        page1.title = '1'
        page1.slug = '1'
        page1.content = '1'
        page1.order = Decimal('1')
        page1.status = Page.VISIBLE
        page1.password = '******'
        page1.save()
        # make request and we get a 302
        request = self.rf.get(reverse('ccpages:view', args=[1]))
        response = view(request, page1.slug)
        self.assertEqual(302, response.status_code)
        self.assertEqual(
                response['Location'],
                reverse('ccpages:password', args=[page1.slug]))