Completed
Push — master ( bc8c97...72fe21 )
by Batiste
01:20
created

new_page()   A

Complexity

Conditions 3

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 12
rs 9.4285
cc 3
1
from django.test import TestCase
2
from pages.cache import cache
3
from pages.models import Page, Content
4
from pages import settings as pages_settings
5
from pages.testproj import test_settings
6
from django.conf import settings
7
from django.contrib.auth import get_user_model
8
from django.core.urlresolvers import reverse
9
from django.template import TemplateDoesNotExist, Engine
10
from django.contrib.sites.models import Site
11
from importlib import import_module
12
from django.core.urlresolvers import clear_url_caches
13
from six.moves import reload_module
14
15
16
class MockRequest:
17
18
    def __init__(self):
19
        self.REQUEST = {'language': 'en'}
20
        self.GET = {}
21
        self.META = {}
22
        self.COOKIES = {}
23
24
25
class Error404Expected(Exception):
26
    """
27
    A 404 error was expected."
28
    """
29
    pass
30
31
32
def new_page(content={'title': 'test-page', 'slug': 'test-page-slug'}, 
33
        parent=None, language='en-us', template='pages/examples/index.html'):
34
    author = get_user_model().objects.all()[0]
35
    page = Page.objects.create(author=author, status=Page.PUBLISHED,
36
        template=template, parent=parent)
37
    if pages_settings.PAGE_USE_SITE_ID:
38
        page.sites.add(Site.objects.get(id=1))
39
    # necessary to clear old URL cache
40
    page.invalidate()
41
    for key, value in list(content.items()):
42
        Content(page=page, language='en-us', type=key, body=value).save()
43
    return page
44
45
46
class TestCase(TestCase):
47
    """Django page CMS test suite class"""
48
    fixtures = ['pages_tests.json']
49
    counter = 1
50
    settings_to_reset = {}
51
    old_url_conf = None
52
53
    def setUp(self):
54
        # useful to make sure the tests will be properly
55
        # executed in an exotic project.
56
        self.set_setting('PAGE_TEMPLATES',
57
            test_settings.PAGE_TEMPLATES)
58
        self.set_setting('PAGE_DEFAULT_TEMPLATE',
59
            test_settings.PAGE_DEFAULT_TEMPLATE)
60
61
        self.old_url_conf = getattr(settings, 'ROOT_URLCONF')
62
        setattr(settings, 'ROOT_URLCONF', 'pages.testproj.urls')
63
        clear_url_caches()
64
        cache.clear()
65
66
    def tearDown(self):
67
        setattr(settings, 'ROOT_URLCONF', self.old_url_conf)
68
        for name, value in list(self.settings_to_reset.items()):
69
            setattr(pages_settings, name, value)
70
        self.reset_urlconf()
71
        self.settings_to_reset = {}
72
73
    def set_setting(self, name, value):
74
        old_value = getattr(pages_settings, name)
75
        setattr(pages_settings, name, value)
76
        if name == 'PAGE_USE_LANGUAGE_PREFIX':
77
            self.reset_urlconf()
78
        if name not in self.settings_to_reset:
79
            self.settings_to_reset[name] = old_value
80
81
    def assert404(self, func):
82
        try:
83
            response = func()
84
            if response.status_code != 404:
85
                raise Error404Expected
86
        except TemplateDoesNotExist:
87
            pass
88
89
    def get_admin_client(self):
90
        from django.test.client import Client
91
        client = Client()
92
        client.login(username='admin', password='b')
93
        return client
94
95
    def get_page_url(self, path=''):
96
        return reverse('pages-details-by-path', args=[path])
97
98
    def get_template_from_string(self, tpl):
99
        return Engine.get_default().from_string(tpl)
100
101
    def reset_urlconf(self):
102
        url_conf = getattr(settings, 'ROOT_URLCONF', False)
103
        if url_conf:
104
            try:
105
                reload(import_module(url_conf))
106
            except:
107
                pass
108
        reload_module(import_module('pages.urls'))
109
        reload_module(import_module('pages.testproj.urls'))
110
        clear_url_caches()
111
112
    def get_new_page_data(self, draft=False):
113
        """Helper method for creating page datas"""
114
        page_data = {
115
            'title': 'test page %d' % self.counter,
116
            'slug': 'test-page-%d' % self.counter, 'language': 'en-us',
117
            'sites': [1], 'status': Page.DRAFT if draft else Page.PUBLISHED,
118
            # used to disable an error with connected models
119
            'document_set-TOTAL_FORMS': 0, 'document_set-INITIAL_FORMS': 0,
120
        }
121
        self.counter = self.counter + 1
122
        return page_data
123
124
    def new_page(self, *args, **kwargs):
125
        new_page(*args, **kwargs)
126
127
    def create_new_page(self, client=None, draft=False):
128
        if not client:
129
            client = self.get_admin_client()
130
        page_data = self.get_new_page_data(draft=draft)
131
        response = client.post(reverse("admin:pages_page_add"), page_data)
132
        self.assertRedirects(response, reverse("admin:pages_page_changelist"))
133
        slug_content = Content.objects.get_content_slug_by_slug(
134
            page_data['slug'])
135
        return slug_content.page
136