Esempio n. 1
0
    def __init__(self, *args, **kwargs):
        super(BaseArticleAdminForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002
        self.article = kwargs.get('instance', None)
        templates = get_article_templates(self.article,
                                          getattr(self, "current_user", None))
        if templates:
            self.fields['template'].widget = forms.Select(choices=templates)

        self.slug_fields = []
        if is_localized():
            for lang_and_name in settings.LANGUAGES:
                from modeltranslation.utils import build_localized_fieldname
                field_name = build_localized_fieldname('slug',
                                                       lang_and_name[0])
                self.slug_fields.append(field_name)
        else:
            self.slug_fields = ['slug']

        can_change_article_slug = can_rewrite_url()

        if not can_change_article_slug:
            can_change_article_slug = (
                self.article.publication != BaseArticle.PUBLISHED
            ) if self.article else True

        for slug_field in self.slug_fields:
            if not can_change_article_slug:
                self.fields[slug_field].widget = ReadOnlyInput()
Esempio n. 2
0
    def test_new_article_two_sites(self):
        other_site = mommy.make(Site)
        article_class = get_article_class()

        self._log_as_editor()
        data = {
            'title': "Un titre",
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': sorted([settings.SITE_ID, other_site.id])
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(article_class.objects.count(), 1)
        article = article_class.objects.all()[0]

        self.assertEqual(article.title, data['title'])
        self.assertEqual(article.publication, data['publication'])
        self.assertEqual(article.template, data['template'])
        self.assertEqual(article.navigation_parent, None)
        self.assertEqual(NavNode.objects.count(), 0)
        self.assertEqual(
            [_article.id for _article in article.sites.order_by("id")],
            data['sites'])
Esempio n. 3
0
    def test_new_article_invalid_category_site(self):
        article_class = get_article_class()

        category1 = mommy.make(ArticleCategory)
        category1.sites.clear()
        category1.sites.add(Site.objects.get_current())
        category1.save()

        category2 = mommy.make(ArticleCategory)
        category2.sites.clear()
        category2.save()

        self._log_as_editor()
        data = {
            'title': "Un titre",
            'category': category2.id,
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'), data=data, follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(article_class.objects.count(), 0)

        soup = BeautifulSoup(response.content)
        self.assertEqual(len(soup.select("ul.errorlist")), 1)
Esempio n. 4
0
    def __init__(self, user, *args, **kwargs):
        article = kwargs['instance']

        try:
            initials = kwargs['initial']
        except KeyError:
            initials = {}
        summary = article.summary
        if not summary:
            summary = dehtml(article.content)[:400]
        initials.update({'summary': summary})
        initials.update({'publication_date': article.publication_date.strftime("%Y-%m-%d %H:%M:%S")})
        
        kwargs['initial'] = initials
        super(ArticleSettingsForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002

        self.fields['category'].queryset = self.fields['category'].queryset.filter(sites=settings.SITE_ID)

        choices = get_article_templates(article, user)
        if choices:
            self.fields["template"] = forms.ChoiceField(choices=choices)
        else:
            self.fields["template"] = forms.CharField()

        if 'sites' in self.fields and not is_multi_site():
            self.fields['sites'].widget = forms.MultipleHiddenInput()
Esempio n. 5
0
    def test_new_article_invalid_category_site(self):
        article_class = get_article_class()

        category1 = mommy.make(ArticleCategory)
        category1.sites.clear()
        category1.sites.add(Site.objects.get_current())
        category1.save()

        category2 = mommy.make(ArticleCategory)
        category2.sites.clear()
        category2.save()

        self._log_as_editor()
        data = {
            'title': "Un titre",
            'category': category2.id,
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(article_class.objects.count(), 0)

        soup = BeautifulSoup(response.content)
        self.assertEqual(len(soup.select("ul.errorlist")), 1)
Esempio n. 6
0
    def __init__(self, user, *args, **kwargs):
        article = kwargs['instance']

        try:
            initials = kwargs['initial']
        except KeyError:
            initials = {}
        summary = article.summary
        if not summary:
            summary = dehtml(article.content)[:400]
        initials.update({'summary': summary})
        initials.update({
            'publication_date':
            article.publication_date.strftime("%Y-%m-%d %H:%M:%S")
        })

        kwargs['initial'] = initials
        super(ArticleSettingsForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002

        self.fields['category'].queryset = self.fields[
            'category'].queryset.filter(sites=settings.SITE_ID)

        choices = get_article_templates(article, user)
        if choices:
            self.fields["template"] = forms.ChoiceField(choices=choices)
        else:
            self.fields["template"] = forms.CharField()

        if 'sites' in self.fields and not is_multi_site():
            self.fields['sites'].widget = forms.MultipleHiddenInput()
Esempio n. 7
0
 def test_new_article_navigation(self):
     article_class = get_article_class()
     
     tree = get_navtree_class().objects.create()
     
     self._log_as_editor()
     data = {
         'title': "Un titre",
         'publication': BaseArticle.PUBLISHED,
         'template': get_article_templates(None, self.user)[0][0],
         'navigation_parent': -tree.id,
         'sites': [settings.SITE_ID]
     }
     
     response = self.client.post(reverse('coop_cms_new_article'), data=data, follow=True)
     self.assertEqual(response.status_code, 200)
     
     self.assertEqual(article_class.objects.count(), 1)
     article = article_class.objects.all()[0]
     
     self.assertEqual(article.title, data['title'])
     self.assertEqual(article.publication, data['publication'])
     self.assertEqual(article.template, data['template'])
     self.assertEqual(article.navigation_parent, -tree.id)
     
     self.assertEqual(NavNode.objects.count(), 1)
     node = NavNode.objects.all()[0]
     self.assertEqual(node.content_object, article)
     self.assertEqual(node.parent, None)
     self.assertEqual(node.tree, tree)
Esempio n. 8
0
    def test_new_article_navigation(self):
        article_class = get_article_class()

        tree = get_navtree_class().objects.create()

        self._log_as_editor()
        data = {
            'title': "Un titre",
            'publication': BaseArticle.PUBLISHED,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': -tree.id,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(article_class.objects.count(), 1)
        article = article_class.objects.all()[0]

        self.assertEqual(article.title, data['title'])
        self.assertEqual(article.publication, data['publication'])
        self.assertEqual(article.template, data['template'])
        self.assertEqual(article.navigation_parent, -tree.id)

        self.assertEqual(NavNode.objects.count(), 1)
        node = NavNode.objects.all()[0]
        self.assertEqual(node.content_object, article)
        self.assertEqual(node.parent, None)
        self.assertEqual(node.tree, tree)
Esempio n. 9
0
 def test_new_article_navigation_leaf(self):
     initial_data = {'title': "test", 'content': "this is my article content"}
     article_class = get_article_class()
     art1 = article_class.objects.create(publication=BaseArticle.PUBLISHED, **initial_data)
     
     tree = get_navtree_class().objects.create()
     ct = ContentType.objects.get_for_model(article_class)
     node1 = NavNode.objects.create(content_type=ct, object_id=art1.id, tree=tree, parent=None)
     
     self._log_as_editor()
     data = {
         'title': "Un titre",
         'publication': BaseArticle.PUBLISHED,
         'template': get_article_templates(None, self.user)[0][0],
         'navigation_parent': node1.id,
         'sites': [settings.SITE_ID]
     }
     
     response = self.client.post(reverse('coop_cms_new_article'), data=data, follow=True)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(article_class.objects.exclude(id=art1.id).count(), 1)
     art2 = article_class.objects.exclude(id=art1.id)[0]
     
     self.assertEqual(art2.title, data['title'])
     self.assertEqual(art2.publication, data['publication'])
     self.assertEqual(art2.template, data['template'])
     self.assertEqual(art2.navigation_parent, node1.id)
     
     self.assertEqual(NavNode.objects.count(), 2)
     node2 = NavNode.objects.exclude(id=node1.id)[0]
     self.assertEqual(node2.content_object, art2)
     self.assertEqual(node2.parent, node1)
Esempio n. 10
0
    def test_new_article_two_sites(self):
        other_site = mommy.make(Site)
        article_class = get_article_class()

        self._log_as_editor()
        data = {
            'title': "Un titre",
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': sorted([settings.SITE_ID, other_site.id])
        }

        response = self.client.post(reverse('coop_cms_new_article'), data=data, follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(article_class.objects.count(), 1)
        article = article_class.objects.all()[0]

        self.assertEqual(article.title, data['title'])
        self.assertEqual(article.publication, data['publication'])
        self.assertEqual(article.template, data['template'])
        self.assertEqual(article.navigation_parent, None)
        self.assertEqual(NavNode.objects.count(), 0)
        self.assertEqual([_article.id for _article in article.sites.order_by("id")], data['sites'])
Esempio n. 11
0
    def test_article_settings_no_sites(self):
        other_site = mommy.make(Site)

        initial_data = {'title': "test", 'content': "this is my article content"}
        article_class = get_article_class()

        art1 = article_class.objects.create(publication=BaseArticle.PUBLISHED, **initial_data)

        self._log_as_editor()
        data = {
            'template': get_article_templates(None, self.user)[0][0],
            'category': '',
            'publication': BaseArticle.PUBLISHED,
            'publication_date': "2013-01-01 12:00:00",
            'headline': True,
            'in_newsletter': True,
            'summary': 'short summary',
            'navigation_parent': None,
            'sites': []
        }

        response = self.client.post(reverse('coop_cms_article_settings', args=[art1.id]), data=data, follow=True)
        self.assertEqual(response.status_code, 200)

        soup = BeautifulSoup(response.content)
        self.assertEqual(len(soup.select("ul.errorlist")), 1)

        self.assertEqual(article_class.objects.exclude(id=art1.id).count(), 0)
        art1 = article_class.objects.get(id=art1.id)

        self.assertNotEqual(art1.summary, data['summary'])
        self.assertEqual(sorted([a.id for a in art1.sites.all()]), [settings.SITE_ID])
Esempio n. 12
0
 def __init__(self, article, user, *args, **kwargs):
     super(ArticleTemplateForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002
     choices = get_article_templates(article, user)
     if choices:
         self.fields["template"] = forms.ChoiceField(choices=choices)
     else:
         self.fields["template"] = forms.CharField()
     self.fields["template"].initial = article.template
Esempio n. 13
0
 def __init__(self, user, *args, **kwargs):
     super(NewArticleForm, self).__init__(*args, **kwargs)
     choices = get_article_templates(None, user)
     if choices:
         self.fields["template"] = forms.ChoiceField(choices=choices)
     else:
         self.fields["template"] = forms.CharField()
     self.fields["title"].widget = forms.TextInput(attrs={'size': 30})
Esempio n. 14
0
 def __init__(self, article, user, *args, **kwargs):
     super(ArticleTemplateForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002
     choices = get_article_templates(article, user)
     if choices:
         self.fields["template"] = forms.ChoiceField(choices=choices)
     else:
         self.fields["template"] = forms.CharField()
     self.fields["template"].initial = article.template
Esempio n. 15
0
 def __init__(self, *args, **kwargs):
     super(ArticleAdminForm, self).__init__(*args, **kwargs)
     self.article = kwargs.get('instance', None)
     self.fields['navigation_parent'] = forms.ChoiceField(
        choices=get_node_choices(), required=False, help_text=get_navigation_parent_help_text()
     )
     if self.article:
         self.initial['navigation_parent'] = self.article.navigation_parent
     templates = get_article_templates(self.article, self.current_user)
     if templates:
         self.fields['template'].widget = forms.Select(choices=templates)
Esempio n. 16
0
 def test_new_article_no_perm(self):
     article_class = get_article_class()
     
     self._log_as_editor_no_add()
     data = {
         'title': "Ceci est un titre",
         'publication': BaseArticle.DRAFT,
         'template': get_article_templates(None, self.user)[0][0],
         'navigation_parent': None,
         'sites': [settings.SITE_ID]
     }
     
     response = self.client.post(reverse('coop_cms_new_article'), data=data, follow=True)
     self.assertEqual(403, response.status_code)
     self.assertEqual(article_class.objects.filter(title=data['title']).count(), 0)
Esempio n. 17
0
    def __init__(self, user, *args, **kwargs):
        super(NewArticleForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002
        choices = get_article_templates(None, user)
        if choices:
            self.fields["template"] = forms.ChoiceField(choices=choices)
        else:
            self.fields["template"] = forms.CharField()
        self.fields["title"].required = True
        self.fields["title"].widget = forms.TextInput(attrs={'size': 30})

        self.fields['category'].queryset = self.fields['category'].queryset.filter(sites=settings.SITE_ID)

        if 'sites' in self.fields:
            self.fields['sites'].initial = self.get_initials('sites')
            if not is_multi_site():
                self.fields['sites'].widget = forms.MultipleHiddenInput()
Esempio n. 18
0
    def __init__(self, user, *args, **kwargs):
        super(NewArticleForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002
        choices = get_article_templates(None, user)
        if choices:
            self.fields["template"] = forms.ChoiceField(choices=choices)
        else:
            self.fields["template"] = forms.CharField()
        self.fields["title"].required = True
        self.fields["title"].widget = forms.TextInput(attrs={'size': 30})

        self.fields['category'].queryset = self.fields['category'].queryset.filter(sites=settings.SITE_ID)

        if 'sites' in self.fields:
            self.fields['sites'].initial = self.get_initials('sites')
            if not is_multi_site():
                self.fields['sites'].widget = forms.MultipleHiddenInput()
Esempio n. 19
0
    def test_new_article_no_perm(self):
        article_class = get_article_class()

        self._log_as_editor_no_add()
        data = {
            'title': "Ceci est un titre",
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(403, response.status_code)
        self.assertEqual(
            article_class.objects.filter(title=data['title']).count(), 0)
Esempio n. 20
0
    def test_new_article_title_required(self):
        article_class = get_article_class()

        self._log_as_editor()
        data = {
            'title': "",
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': [settings.SITE_ID]
        }
        
        response = self.client.post(reverse('coop_cms_new_article'), data=data, follow=True)
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content)
        
        self.assertEqual(article_class.objects.count(), 0)
        self.assertEqual(len(soup.select("ul.errorlist")), 1)
Esempio n. 21
0
    def __init__(self, user, *args, **kwargs):
        article = kwargs['instance']

        try:
            initials = kwargs['initial']
        except:
            initials = {}
        summary = article.summary
        if not summary:
            summary = dehtml(article.content)[:250]
        initials.update({'summary': summary})
        kwargs['initial'] = initials
        super(ArticleSettingsForm, self).__init__(*args, **kwargs)

        choices = get_article_templates(article, user)
        if choices:
            self.fields["template"] = forms.ChoiceField(choices=choices)
        else:
            self.fields["template"] = forms.CharField()
Esempio n. 22
0
 def test_new_article_anonymous(self):
     article_class = get_article_class()
     
     self._log_as_editor() #create self.user
     self.client.logout()
     data = {
         'title': "Ceci est un titre",
         'publication': BaseArticle.DRAFT,
         'template': get_article_templates(None, self.user)[0][0],
         'navigation_parent': None,
         'sites': [settings.SITE_ID]
     }
     
     response = self.client.post(reverse('coop_cms_new_article'), data=data, follow=True)
     self.assertEqual(200, response.status_code)  # if can_edit returns 404 error
     next_url = response.redirect_chain[-1][0]
     login_url = reverse('login')
     self.assertTrue(login_url in next_url)
     
     self.assertEqual(article_class.objects.filter(title=data['title']).count(), 0)
Esempio n. 23
0
    def test_new_article_title_required(self):
        article_class = get_article_class()

        self._log_as_editor()
        data = {
            'title': "",
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)
        soup = BeautifulSoup(response.content)

        self.assertEqual(article_class.objects.count(), 0)
        self.assertEqual(len(soup.select("ul.errorlist")), 1)
Esempio n. 24
0
    def test_new_article_navigation_leaf(self):
        initial_data = {
            'title': "test",
            'content': "this is my article content"
        }
        article_class = get_article_class()
        art1 = article_class.objects.create(publication=BaseArticle.PUBLISHED,
                                            **initial_data)

        tree = get_navtree_class().objects.create()
        ct = ContentType.objects.get_for_model(article_class)
        node1 = NavNode.objects.create(content_type=ct,
                                       object_id=art1.id,
                                       tree=tree,
                                       parent=None)

        self._log_as_editor()
        data = {
            'title': "Un titre",
            'publication': BaseArticle.PUBLISHED,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': node1.id,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(article_class.objects.exclude(id=art1.id).count(), 1)
        art2 = article_class.objects.exclude(id=art1.id)[0]

        self.assertEqual(art2.title, data['title'])
        self.assertEqual(art2.publication, data['publication'])
        self.assertEqual(art2.template, data['template'])
        self.assertEqual(art2.navigation_parent, node1.id)

        self.assertEqual(NavNode.objects.count(), 2)
        node2 = NavNode.objects.exclude(id=node1.id)[0]
        self.assertEqual(node2.content_object, art2)
        self.assertEqual(node2.parent, node1)
Esempio n. 25
0
    def test_article_settings_unknown_sites(self):
        other_site = mommy.make(Site)

        initial_data = {
            'title': "test",
            'content': "this is my article content"
        }
        article_class = get_article_class()

        art1 = article_class.objects.create(publication=BaseArticle.PUBLISHED,
                                            **initial_data)

        self._log_as_editor()
        data = {
            'template': get_article_templates(None, self.user)[0][0],
            'category': '',
            'publication': BaseArticle.PUBLISHED,
            'publication_date': "2013-01-01 12:00:00",
            'headline': True,
            'in_newsletter': True,
            'summary': 'short summary',
            'navigation_parent': None,
            'sites': [settings.SITE_ID, 999]
        }

        response = self.client.post(reverse('coop_cms_article_settings',
                                            args=[art1.id]),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)

        soup = BeautifulSoup(response.content)
        self.assertEqual(len(soup.select("ul.errorlist")), 1)

        self.assertEqual(article_class.objects.exclude(id=art1.id).count(), 0)
        art1 = article_class.objects.get(id=art1.id)

        self.assertNotEqual(art1.summary, data['summary'])
        self.assertEqual(sorted([a.id for a in art1.sites.all()]),
                         [settings.SITE_ID])
Esempio n. 26
0
    def __init__(self, *args, **kwargs):
        super(BaseArticleAdminForm, self).__init__(*args, **kwargs)  # pylint: disable=E1002
        self.article = kwargs.get('instance', None)
        templates = get_article_templates(self.article, getattr(self, "current_user", None))
        if templates:
            self.fields['template'].widget = forms.Select(choices=templates)

        self.slug_fields = []
        if is_localized():
            for lang_and_name in settings.LANGUAGES:
                from modeltranslation.utils import build_localized_fieldname
                field_name = build_localized_fieldname('slug', lang_and_name[0])
                self.slug_fields.append(field_name)
        else:
            self.slug_fields = ['slug']

        can_change_article_slug = can_rewrite_url()

        if not can_change_article_slug:
            can_change_article_slug = (self.article.publication != BaseArticle.PUBLISHED) if self.article else True

        for slug_field in self.slug_fields:
            if not can_change_article_slug:
                self.fields[slug_field].widget = ReadOnlyInput()
Esempio n. 27
0
    def test_new_article_anonymous(self):
        article_class = get_article_class()

        self._log_as_editor()  #create self.user
        self.client.logout()
        data = {
            'title': "Ceci est un titre",
            'publication': BaseArticle.DRAFT,
            'template': get_article_templates(None, self.user)[0][0],
            'navigation_parent': None,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_new_article'),
                                    data=data,
                                    follow=True)
        self.assertEqual(200,
                         response.status_code)  # if can_edit returns 404 error
        next_url = response.redirect_chain[-1][0]
        login_url = reverse('login')
        self.assertTrue(login_url in next_url)

        self.assertEqual(
            article_class.objects.filter(title=data['title']).count(), 0)
Esempio n. 28
0
    def test_article_settings(self, move_nav=False):
        initial_data = {
            'title': "test",
            'content': "this is my article content"
        }
        article_class = get_article_class()
        art0 = mommy.make(article_class, slug="art0")

        art1 = article_class.objects.create(publication=BaseArticle.PUBLISHED,
                                            **initial_data)

        tree = get_navtree_class().objects.create()
        ct = ContentType.objects.get_for_model(article_class)
        node1 = NavNode.objects.create(content_type=ct,
                                       object_id=art0.id,
                                       tree=tree,
                                       parent=None)
        node2 = NavNode.objects.create(content_type=ct,
                                       object_id=art0.id,
                                       tree=tree,
                                       parent=None)

        category = mommy.make(ArticleCategory)

        self._log_as_editor()
        data = {
            'template': get_article_templates(None, self.user)[0][0],
            'category': category.id,
            'publication': BaseArticle.PUBLISHED,
            'publication_date': "2013-01-01 12:00:00",
            'headline': True,
            'in_newsletter': True,
            'summary': 'short summary',
            'navigation_parent': node1.id,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_article_settings',
                                            args=[art1.id]),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(
            article_class.objects.exclude(id__in=(art1.id, art0.id)).count(),
            0)
        art1 = article_class.objects.get(id=art1.id)

        self.assertEqual(art1.title, initial_data['title'])
        self.assertEqual(art1.publication, data['publication'])
        self.assertEqual(art1.navigation_parent, node1.id)
        self.assertEqual(art1.publication_date,
                         make_dt(datetime(2013, 1, 1, 12, 0, 0)))
        self.assertEqual(art1.headline, data['headline'])
        self.assertEqual(art1.in_newsletter, data['in_newsletter'])
        self.assertEqual(art1.summary, data['summary'])
        self.assertEqual(art1.template, data['template'])
        self.assertEqual([a.id for a in art1.sites.all()], data['sites'])
        self.assertEqual(NavNode.objects.count(), 3)
        node = NavNode.objects.exclude(id__in=(node1.id, node2.id))[0]
        self.assertEqual(node.content_object, art1)
        self.assertEqual(node.parent, node1)

        # Update the article
        category2 = mommy.make(ArticleCategory)

        node_id = node2.id if move_nav else node1.id

        data = {
            'template': get_article_templates(None, self.user)[1][0],
            'category': category2.id,
            'publication': BaseArticle.DRAFT,
            'publication_date': "2013-01-01 18:00:00",
            'headline': False,
            'in_newsletter': False,
            'summary': 'another summary',
            'navigation_parent': node_id,
            'sites': [settings.SITE_ID]
        }

        response = self.client.post(reverse('coop_cms_article_settings',
                                            args=[art1.id]),
                                    data=data,
                                    follow=True)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(
            article_class.objects.exclude(id__in=(art1.id, art0.id)).count(),
            0)
        art1 = article_class.objects.get(id=art1.id)

        self.assertEqual(art1.title, initial_data['title'])
        self.assertEqual(art1.publication, data['publication'])
        self.assertEqual(art1.template, data['template'])
        self.assertEqual(art1.publication_date,
                         make_dt(datetime(2013, 1, 1, 18, 0, 0)))
        self.assertEqual(art1.headline, data['headline'])
        self.assertEqual(art1.in_newsletter, data['in_newsletter'])
        self.assertEqual(art1.summary, data['summary'])

        if move_nav:
            self.assertEqual(NavNode.objects.count(), 4)
            node = NavNode.objects.exclude(id__in=(node1.id, node2.id,
                                                   node.id))[0]
            self.assertEqual(node.content_object, art1)
            self.assertEqual(node.parent, node2)
        else:
            self.assertEqual(NavNode.objects.count(), 3)
            node = NavNode.objects.exclude(id__in=(node1.id, node2.id))[0]
            self.assertEqual(node.content_object, art1)
            self.assertEqual(node.parent, node1)
Esempio n. 29
0
 def __init__(self, *args, **kwargs):
     super(ArticleAdminForm, self).__init__(*args, **kwargs)
     self.article = kwargs.get('instance', None)
     templates = get_article_templates(self.article, self.current_user)
     if templates:
         self.fields['template'].widget = forms.Select(choices=templates)
Esempio n. 30
0
    def test_article_settings(self, move_nav=False):
        initial_data = {'title': "test", 'content': "this is my article content"}
        article_class = get_article_class()
        art0 = mommy.make(article_class, slug="art0" )
        
        art1 = article_class.objects.create(publication=BaseArticle.PUBLISHED, **initial_data)
        
        tree = get_navtree_class().objects.create()
        ct = ContentType.objects.get_for_model(article_class)
        node1 = NavNode.objects.create(content_type=ct, object_id=art0.id, tree=tree, parent=None)
        node2 = NavNode.objects.create(content_type=ct, object_id=art0.id, tree=tree, parent=None)
        
        category = mommy.make(ArticleCategory)
        
        self._log_as_editor()
        data = {
            'template': get_article_templates(None, self.user)[0][0],
            'category': category.id,
            'publication': BaseArticle.PUBLISHED,
            'publication_date': "2013-01-01 12:00:00",
            'headline': True,
            'in_newsletter': True,
            'summary': 'short summary',
            'navigation_parent': node1.id,
            'sites': [settings.SITE_ID]
        }
        
        response = self.client.post(reverse('coop_cms_article_settings', args=[art1.id]), data=data, follow=True)
        self.assertEqual(response.status_code, 200)
        
        self.assertEqual(article_class.objects.exclude(id__in=(art1.id, art0.id)).count(), 0)
        art1 = article_class.objects.get(id=art1.id)
        
        self.assertEqual(art1.title, initial_data['title'])
        self.assertEqual(art1.publication, data['publication'])
        self.assertEqual(art1.navigation_parent, node1.id)
        self.assertEqual(art1.publication_date, make_dt(datetime(2013, 1, 1, 12, 0, 0)))
        self.assertEqual(art1.headline, data['headline'])
        self.assertEqual(art1.in_newsletter, data['in_newsletter'])
        self.assertEqual(art1.summary, data['summary'])
        self.assertEqual(art1.template, data['template'])
        self.assertEqual([a.id for a in art1.sites.all()], data['sites'])
        self.assertEqual(NavNode.objects.count(), 3)
        node = NavNode.objects.exclude(id__in=(node1.id, node2.id))[0]
        self.assertEqual(node.content_object, art1)
        self.assertEqual(node.parent, node1)
        
        # Update the article
        category2 = mommy.make(ArticleCategory)
        
        node_id = node2.id if move_nav else node1.id
        
        data = {
            'template': get_article_templates(None, self.user)[1][0],
            'category': category2.id,
            'publication': BaseArticle.DRAFT,
            'publication_date': "2013-01-01 18:00:00",
            'headline': False,
            'in_newsletter': False,
            'summary': 'another summary',
            'navigation_parent': node_id,
            'sites': [settings.SITE_ID]
        }
        
        response = self.client.post(reverse('coop_cms_article_settings', args=[art1.id]), data=data, follow=True)
        self.assertEqual(response.status_code, 200)
        
        self.assertEqual(article_class.objects.exclude(id__in=(art1.id, art0.id)).count(), 0)
        art1 = article_class.objects.get(id=art1.id)
        
        self.assertEqual(art1.title, initial_data['title'])
        self.assertEqual(art1.publication, data['publication'])
        self.assertEqual(art1.template, data['template'])
        self.assertEqual(art1.publication_date, make_dt(datetime(2013, 1, 1, 18, 0, 0)))
        self.assertEqual(art1.headline, data['headline'])
        self.assertEqual(art1.in_newsletter, data['in_newsletter'])
        self.assertEqual(art1.summary, data['summary'])

        if move_nav:
            self.assertEqual(NavNode.objects.count(), 4)
            node = NavNode.objects.exclude(id__in=(node1.id, node2.id, node.id))[0]
            self.assertEqual(node.content_object, art1)
            self.assertEqual(node.parent, node2)
        else:
            self.assertEqual(NavNode.objects.count(), 3)
            node = NavNode.objects.exclude(id__in=(node1.id, node2.id))[0]
            self.assertEqual(node.content_object, art1)
            self.assertEqual(node.parent, node1)