Beispiel #1
0
def convert_to_article(request, entry_id):
    def get_entry_author(entry):
        written_by_user = '******' % entry.user.username
        written_by_anon = 'Written by: Anonymous'
        if entry.hide_real_name:
            return written_by_anon
        return written_by_user

    entry = get_object_or_404(YourWordsCompetitionEntry, pk=entry_id)
    if not entry.article_page:
        competition_index_page = (
            YourWordsCompetitionIndexPage.objects.live().first())
        article = ArticlePage(
            title=entry.story_name,
            slug='yourwords-entry-%s' % cautious_slugify(entry.story_name),
            body=json.dumps([{
                "type": "paragraph", "value": get_entry_author(entry),
                "type": "paragraph", "value": entry.story_text,
            }])
        )
        competition_index_page.add_child(instance=article)
        article.save_revision()
        article.unpublish()

        entry.article_page = article
        entry.save()
        return redirect('/admin/pages/%d/move/' % article.id)
    return redirect('/admin/pages/%d/edit/' % entry.article_page.id)
    def setUp(self):
        self.mk_main()
        self.request = RequestFactory().get('/')
        self.request.user = self.login()
        session_middleware = SessionMiddleware()
        session_middleware.process_request(self.request)
        self.request.session.save()

        self.section = SectionPage(title='test section')
        self.section_index.add_child(instance=self.section)

        self.important_tag = Tag(title='important tag')
        self.another_tag = Tag(title='other tag')
        self.tags = [self.important_tag, self.another_tag]
        for tag in self.tags:
            self.tag_index.add_child(instance=tag)
            tag.save_revision()

        self.page = ArticlePage(title='test article')
        self.section.add_child(instance=self.page)
        self.page.save_revision()

        for tag in self.tags:
            ArticlePageTags.objects.create(
                tag=tag,
                page=self.page,
            )

        self.adapter = PersistentFormsSegmentsAdapter(self.request)
Beispiel #3
0
def submission_article(request, survey_id, submission_id):
    # get the specific submission entry
    survey_page = get_object_or_404(Page, id=survey_id).specific
    SubmissionClass = survey_page.get_submission_class()

    submission = SubmissionClass.objects.filter(
        page=survey_page).filter(pk=submission_id).first()
    if not submission.article_page:
        survey_index_page = (
            SurveysIndexPage.objects.descendant_of(
                request.site.root_page).live().first())
        body = []
        for value in submission.get_data().values():
            body.append({"type": "paragraph", "value": str(value)})
        article = ArticlePage(
            title='yourwords-entry-%s' % cautious_slugify(submission_id),
            slug='yourwords-entry-%s' % cautious_slugify(submission_id),
            body=json.dumps(body)
        )
        survey_index_page.add_child(instance=article)
        article.save_revision()
        article.unpublish()

        submission.article_page = article
        submission.save()
        return redirect('/admin/pages/%d/move/' % article.id)
    return redirect('/admin/pages/%d/edit/' % submission.article_page.id)
Beispiel #4
0
    def mk_articles(self, parent, count=2, **kwargs):
        articles = []

        for i in range(count):
            data = {}
            data.update({
                'title':
                'Test page %s' % (i, ),
                'subtitle':
                'Sample page description for %s' % (i, ),
                'body':
                json.dumps([{
                    'type': 'paragraph',
                    'value': 'Sample page content for %s' % (i, )
                }]),
            })
            data.update(kwargs)
            data.update({'slug': generate_slug(data['title'])})
            article = ArticlePage(**data)
            if not article.first_published_at:
                article.first_published_at = timezone.now()
            parent.add_child(instance=article)
            article.save_revision().publish()
            articles.append(article)
        return articles
 def add_article(self, title, tags):
     new_article = ArticlePage(title=title)
     self.section.add_child(instance=new_article)
     new_article.save_revision()
     for tag in tags:
         ArticlePageTags.objects.create(
             tag=tag,
             page=new_article,
         )
     return new_article
Beispiel #6
0
 def test_commenting_enabled(self):
     article_1 = ArticlePage(title="New article",
                             commenting_state=constants.COMMENTING_OPEN)
     self.assertTrue(article_1.is_commenting_enabled())
     article_2 = ArticlePage(title="New article",
                             commenting_state=constants.COMMENTING_CLOSED)
     self.assertTrue(article_2.is_commenting_enabled())
     article_3 = ArticlePage(title="New article",
                             commenting_state=constants.COMMENTING_DISABLED)
     self.assertFalse(article_3.is_commenting_enabled())
Beispiel #7
0
    def test_future_hero_article_not_in_latest(self):
        promote_date = timezone.now() + timezone.timedelta(days=2)
        demote_date = timezone.now() + timezone.timedelta(days=4)
        future_article = ArticlePage(title="Future article",
                                     promote_date=promote_date,
                                     demote_date=demote_date,
                                     depth="1",
                                     path="0003",
                                     featured_in_latest=True,
                                     feature_as_hero_article=True)
        self.yourmind.add_child(instance=future_article)
        future_article.save()
        main = Main.objects.all().first()
        self.assertQuerysetEqual(main.latest_articles(), [])

        promote_date = timezone.now() + timezone.timedelta(days=-2)
        demote_date = timezone.now() + timezone.timedelta(days=-1)
        present_article = ArticlePage(
            title="Present article",
            promote_date=promote_date,
            demote_date=demote_date,
            depth="1",
            path="0004",
            featured_in_latest_start_date=promote_date,
            feature_as_hero_article=True)
        self.yourmind.add_child(instance=present_article)
        present_article.save()
        promote_articles()
        self.assertQuerysetEqual(main.latest_articles(), [
            repr(present_article),
        ])
Beispiel #8
0
    def test_copy_to_all_scheduled_page(self):
        self.user = self.login()

        date = datetime.datetime(3099, 3, 10, 17, 0, tzinfo=UTC)
        article = ArticlePage(
            title='article 1', slug='article1', go_live_at=date, live=False)
        self.yourmind.add_child(instance=article)
        article.save_revision().publish()

        self.assertEqual(article.status_string, 'scheduled')

        self.client.post(reverse('copy-to-all', args=(article.id,)))
        new_article = ArticlePage.objects.descendant_of(
            self.main2).get(slug=article.slug)
        self.assertEqual(new_article.status_string, 'scheduled')
Beispiel #9
0
    def setUp(self):
        self.mk_main()
        self.request = RequestFactory().get('/')
        self.request.user = self.login()
        session_middleware = SessionMiddleware()
        session_middleware.process_request(self.request)
        self.request.session.save()

        self.section = SectionPage(title='test section')
        self.section_index.add_child(instance=self.section)

        self.important_tag = Tag(title='important tag')
        self.another_tag = Tag(title='other tag')
        self.tags = [self.important_tag, self.another_tag]
        for tag in self.tags:
            self.tag_index.add_child(instance=tag)
            tag.save_revision()

        self.page = ArticlePage(title='test article')
        self.section.add_child(instance=self.page)
        self.page.save_revision()

        for tag in self.tags:
            ArticlePageTags.objects.create(
                tag=tag,
                page=self.page,
            )

        self.adapter = PersistentSurveysSegmentsAdapter(self.request)
Beispiel #10
0
    def test_article_importable(self):
        content = constants.ARTICLE_PAGE_RESPONSE
        content_copy = dict(content)

        # Validate Assumptions
        #   The images have already been imported
        #   The record keeper has mapped the relationship

        foreign_image_id = content["image"]["id"]
        image = Image.objects.create(
            title=content["image"]["title"],
            file=get_test_image_file(),
        )

        foreign_social_media_image_id = content["social_media_image"]["id"]
        social_media_image = Image.objects.create(
            title=content["social_media_image"]["title"],
            file=get_test_image_file(),
        )

        record_keeper = importers.RecordKeeper()
        record_keeper.record_image_relation(foreign_image_id, image.id)
        record_keeper.record_image_relation(foreign_social_media_image_id,
                                            social_media_image.id)

        class_ = ArticlePage

        page = ArticlePage.create_page(content_copy,
                                       class_,
                                       record_keeper=record_keeper)

        self.check_article_and_footer_fields(page, content, record_keeper)
Beispiel #11
0
    def test_article_importable(self):
        content = constants.ARTICLE_PAGE_RESPONSE
        content_copy = dict(content)

        # Validate Assumptions
        #   The images have already been imported
        #   The record keeper has mapped the relationship

        foreign_image_id = content["image"]["id"]
        image = Image.objects.create(
            title=content["image"]["title"],
            file=get_test_image_file(),
        )

        foreign_social_media_image_id = content["social_media_image"]["id"]
        social_media_image = Image.objects.create(
            title=content["social_media_image"]["title"],
            file=get_test_image_file(),
        )

        record_keeper = importers.RecordKeeper()
        record_keeper.record_image_relation(foreign_image_id, image.id)
        record_keeper.record_image_relation(
            foreign_social_media_image_id, social_media_image.id)

        class_ = ArticlePage

        page = ArticlePage.create_page(
            content_copy, class_, record_keeper=record_keeper)

        self.check_article_and_footer_fields(page, content, record_keeper)
Beispiel #12
0
    def test_is_hero_article(self):
        promote_date = timezone.now() + timezone.timedelta(days=-1)
        demote_date = timezone.now() + timezone.timedelta(days=1)
        article_1 = ArticlePage(
            title="New article",
            feature_as_hero_article=True,
            promote_date=promote_date,
            demote_date=demote_date
        )
        self.yourmind.add_child(instance=article_1)
        self.assertTrue(article_1.is_current_hero_article())

        promote_date = timezone.now() + timezone.timedelta(days=2)
        demote_date = timezone.now() + timezone.timedelta(days=4)
        article_2 = ArticlePage(
            title="New article",
            promote_date=promote_date,
            demote_date=demote_date
        )
        self.yourmind.add_child(instance=article_2)
        self.assertFalse(article_2.is_current_hero_article())
Beispiel #13
0
 def setUp(self):
     self.mk_main()
     self.main = Main.objects.all().first()
     self.language_setting = Languages.objects.create(
         site_id=self.main.get_site().pk)
     self.english = SiteLanguageRelation.objects.create(
         language_setting=Languages.for_site(self.main.get_site()),
         locale='en',
         is_active=True)
     self.spanish = SiteLanguageRelation.objects.create(
         language_setting=Languages.for_site(self.main.get_site()),
         locale='sp',
         is_active=True)
     self.french = SiteLanguageRelation.objects.create(
         language_setting=Languages.for_site(self.main.get_site()),
         locale='fr',
         is_active=True)
     self.yourmind = self.mk_section(self.section_index, title='Your mind')
     self.article = ArticlePage(title='Test Article', slug='test-article')
     self.yourmind.add_child(instance=self.article)
     self.article.save_revision().publish()
Beispiel #14
0
    def test_image_not_imported_logs_error(self):
        content = constants.ARTICLE_WITH_ONLY_IMAGE_RESPONSE
        content_copy = dict(content)

        # Break the assumptions that the images have already
        # been imported thus the record keeper has mapped
        # the relationship

        record_keeper = importers.RecordKeeper()
        logger = importers.Logger()

        class_ = ArticlePage

        ArticlePage.create_page(
            content_copy, class_,
            record_keeper=record_keeper,
            logger=logger)

        self.assertTrue(len(logger.record), 1)
        error_log = logger.record[0]
        self.assertEqual(error_log["log_type"], ERROR)
Beispiel #15
0
    def test_image_not_imported_logs_error(self):
        content = constants.ARTICLE_WITH_ONLY_IMAGE_RESPONSE
        content_copy = dict(content)

        # Break the assumptions that the images have already
        # been imported thus the record keeper has mapped
        # the relationship

        record_keeper = importers.RecordKeeper()
        logger = importers.Logger()

        class_ = ArticlePage

        ArticlePage.create_page(content_copy,
                                class_,
                                record_keeper=record_keeper,
                                logger=logger)

        self.assertTrue(len(logger.record), 1)
        error_log = logger.record[0]
        self.assertEqual(error_log["log_type"], ERROR)
def submission_article(request, survey_id, submission_id):
    # get the specific submission entry
    survey_page = get_object_or_404(Page, id=survey_id).specific
    SubmissionClass = survey_page.get_submission_class()

    submission = SubmissionClass.objects.filter(page=survey_page).filter(
        pk=submission_id).first()
    if not submission.article_page:
        survey_index_page = (SurveysIndexPage.objects.descendant_of(
            request.site.root_page).live().first())
        body = []
        for value in submission.get_data().values():
            body.append({"type": "paragraph", "value": str(value)})
        article = ArticlePage(
            title='yourwords-entry-%s' % cautious_slugify(submission_id),
            slug='yourwords-entry-%s' % cautious_slugify(submission_id),
            body=json.dumps(body))
        survey_index_page.add_child(instance=article)
        article.save_revision()
        article.unpublish()

        submission.article_page = article
        submission.save()
        return redirect('/admin/pages/%d/move/' % article.id)
    return redirect('/admin/pages/%d/edit/' % submission.article_page.id)
Beispiel #17
0
def convert_to_article(request, entry_id):
    def get_entry_author(entry):
        written_by_user = '******' % entry.user.username
        written_by_anon = 'Written by: Anonymous'
        if entry.hide_real_name:
            return written_by_anon
        return written_by_user

    entry = get_object_or_404(YourWordsCompetitionEntry, pk=entry_id)
    if not entry.article_page:
        competition_index_page = (
            YourWordsCompetitionIndexPage.objects.descendant_of(
                request.site.root_page).live().first())
        article = ArticlePage(title=entry.story_name,
                              slug='yourwords-entry-%s-%s' %
                              (cautious_slugify(entry.story_name), entry.pk),
                              body=json.dumps([{
                                  "type": "paragraph",
                                  "value": get_entry_author(entry)
                              }, {
                                  "type": "paragraph",
                                  "value": entry.story_text
                              }]))
        competition_index_page.add_child(instance=article)
        article.save_revision()
        article.unpublish()

        entry.article_page = article
        entry.save()
        return redirect('/admin/pages/%d/move/' % article.id)
    return redirect('/admin/pages/%d/edit/' % entry.article_page.id)
Beispiel #18
0
    def test_future_hero_article_not_in_latest(self):
        promote_date = timezone.now() + timezone.timedelta(days=2)
        demote_date = timezone.now() + timezone.timedelta(days=4)
        future_article = ArticlePage(
            title="Future article",
            promote_date=promote_date,
            demote_date=demote_date,
            depth="1",
            path="0003",
            featured_in_latest=True,
            feature_as_hero_article=True
        )
        self.yourmind.add_child(instance=future_article)
        future_article.save()
        main = Main.objects.all().first()
        self.assertQuerysetEqual(main.latest_articles(), [])

        promote_date = timezone.now() + timezone.timedelta(days=-2)
        demote_date = timezone.now() + timezone.timedelta(days=-1)
        present_article = ArticlePage(
            title="Present article",
            promote_date=promote_date,
            demote_date=demote_date,
            depth="1",
            path="0004",
            featured_in_latest_start_date=promote_date,
            feature_as_hero_article=True
        )
        self.yourmind.add_child(instance=present_article)
        present_article.save()
        promote_articles()
        self.assertQuerysetEqual(
            main.latest_articles(), [repr(present_article), ])
Beispiel #19
0
    def test_copy_to_all_scheduled_page(self):
        self.user = self.login()

        date = datetime.datetime(3099, 3, 10, 17, 0, tzinfo=UTC)
        article = ArticlePage(
            title='article 1', slug='article1', go_live_at=date, live=False)
        self.yourmind.add_child(instance=article)
        article.save_revision().publish()

        tag = self.mk_tag(parent=self.tag_index, slug='tag')
        tag.save_revision().publish()
        tag2 = self.mk_tag(parent=self.tag_index2, slug='tag')
        tag2.save_revision().publish()
        ArticlePageTags.objects.create(page=article, tag=tag)
        article.refresh_from_db()

        self.assertEqual(article.status_string, 'scheduled')

        self.client.post(reverse('copy-to-all', args=(article.id,)))
        new_article = ArticlePage.objects.descendant_of(
            self.main2).get(slug=article.slug)
        self.assertEqual(new_article.status_string, 'scheduled')
Beispiel #20
0
    def mk_articles(self, parent, count=2, **kwargs):
        articles = []

        for i in range(count):
            data = {}
            data.update({
                'title': 'Test page %s' % (i, ),
                'subtitle': 'Sample page description for %s' % (i, ),
                'body': json.dumps([{
                    'type': 'paragraph',
                    'value': 'Sample page content for %s' % (i, )}]),
            })
            data.update(kwargs)
            data.update({
                'slug': generate_slug(data['title'])
            })
            article = ArticlePage(**data)
            if not article.first_published_at:
                article.first_published_at = timezone.now()
            parent.add_child(instance=article)
            article.save_revision().publish()
            articles.append(article)
        return articles
Beispiel #21
0
 def test_commenting_enabled(self):
     article_1 = ArticlePage(
         title="New article", commenting_state=constants.COMMENTING_OPEN)
     self.assertTrue(article_1.is_commenting_enabled())
     article_2 = ArticlePage(
         title="New article", commenting_state=constants.COMMENTING_CLOSED)
     self.assertTrue(article_2.is_commenting_enabled())
     article_3 = ArticlePage(
         title="New article",
         commenting_state=constants.COMMENTING_DISABLED)
     self.assertFalse(article_3.is_commenting_enabled())
Beispiel #22
0
    def test_article_body_not_importable(self):
        content = constants.ARTICLE_PAGE_RESPONSE_STREAM_FIELDS
        content_copy = dict(content)

        record_keeper = importers.RecordKeeper()

        class_ = ArticlePage

        page = ArticlePage.create_page(content_copy,
                                       class_,
                                       record_keeper=record_keeper)

        self.assertEqual(page.title, content["title"])
        self.assertFalse(page.body)

        self.assertTrue(content["id"] in record_keeper.article_bodies)
        self.assertEqual(record_keeper.article_bodies[content["id"]],
                         content["body"])
Beispiel #23
0
    def test_article_body_not_importable(self):
        content = constants.ARTICLE_PAGE_RESPONSE_STREAM_FIELDS
        content_copy = dict(content)

        record_keeper = importers.RecordKeeper()

        class_ = ArticlePage

        page = ArticlePage.create_page(
            content_copy, class_, record_keeper=record_keeper)

        self.assertEqual(page.title, content["title"])
        self.assertFalse(page.body)

        self.assertTrue(content["id"] in record_keeper.article_bodies)
        self.assertEqual(
            record_keeper.article_bodies[content["id"]],
            content["body"])
Beispiel #24
0
 def setUp(self):
     self.mk_main()
     self.main = Main.objects.all().first()
     self.language_setting = Languages.objects.create(
         site_id=self.main.get_site().pk)
     self.english = SiteLanguageRelation.objects.create(
         language_setting=Languages.for_site(self.main.get_site()),
         locale='en',
         is_active=True)
     self.spanish = SiteLanguageRelation.objects.create(
         language_setting=Languages.for_site(self.main.get_site()),
         locale='sp',
         is_active=True)
     self.french = SiteLanguageRelation.objects.create(
         language_setting=Languages.for_site(self.main.get_site()),
         locale='fr',
         is_active=True)
     self.yourmind = self.mk_section(
         self.section_index, title='Your mind')
     self.article = ArticlePage(title='Test Article', slug='test-article')
     self.yourmind.add_child(instance=self.article)
     self.article.save_revision().publish()
Beispiel #25
0
    def test_is_hero_article(self):
        promote_date = timezone.now() + timezone.timedelta(days=-1)
        demote_date = timezone.now() + timezone.timedelta(days=1)
        article_1 = ArticlePage(title="New article",
                                feature_as_hero_article=True,
                                promote_date=promote_date,
                                demote_date=demote_date)
        self.yourmind.add_child(instance=article_1)
        self.assertTrue(article_1.is_current_hero_article())

        promote_date = timezone.now() + timezone.timedelta(days=2)
        demote_date = timezone.now() + timezone.timedelta(days=4)
        article_2 = ArticlePage(title="New article",
                                promote_date=promote_date,
                                demote_date=demote_date)
        self.yourmind.add_child(instance=article_2)
        self.assertFalse(article_2.is_current_hero_article())
Beispiel #26
0
class ManagementCommandsTest(TestCase, MoloTestCaseMixin):
    def setUp(self):
        self.mk_main()
        self.main = Main.objects.all().first()
        self.language_setting = Languages.objects.create(
            site_id=self.main.get_site().pk)
        self.english = SiteLanguageRelation.objects.create(
            language_setting=Languages.for_site(self.main.get_site()),
            locale='en',
            is_active=True)
        self.spanish = SiteLanguageRelation.objects.create(
            language_setting=Languages.for_site(self.main.get_site()),
            locale='sp',
            is_active=True)
        self.french = SiteLanguageRelation.objects.create(
            language_setting=Languages.for_site(self.main.get_site()),
            locale='fr',
            is_active=True)
        self.yourmind = self.mk_section(
            self.section_index, title='Your mind')
        self.article = ArticlePage(title='Test Article', slug='test-article')
        self.yourmind.add_child(instance=self.article)
        self.article.save_revision().publish()

    def test_switch_main_language(self):
        out = StringIO()
        tag = Tag(title='love', slug='love')
        self.tag_index.add_child(instance=tag)
        tag.save_revision().publish()
        for relation in LanguageRelation.objects.filter(
                language__is_main_language=True):
            self.assertEqual(relation.language.locale, 'en')
        self.assertTrue(self.english.is_main_language)
        call_command('switch_main_language', 'id', std_out=out)
        self.assertTrue(SiteLanguage.objects.get(locale='id').is_main_language)
        self.assertFalse(
            LanguageRelation.objects.filter(language__locale='en').exists())
        for relation in LanguageRelation.objects.filter(
                language__is_main_language=True):
            self.assertEqual(relation.language.locale, 'id')

    def test_add_language_to_pages(self):
        call_command('add_language_to_pages')
        english = SiteLanguage.objects.first()
        article = ArticlePage.objects.get(pk=self.article.pk)
        yourmind = SectionPage.objects.get(pk=self.yourmind.pk)
        self.assertEqual(article.language, english)
        self.assertEqual(yourmind.language, english)

    def test_add_translated_pages_to_pages(self):
        self.mk_main2()
        self.main2 = Main.objects.all().last()
        self.language_setting2 = Languages.objects.create(
            site_id=self.main2.get_site().pk)
        self.english2 = SiteLanguageRelation.objects.create(
            language_setting=self.language_setting2,
            locale='en',
            is_active=True)

        self.spanish2 = SiteLanguageRelation.objects.create(
            language_setting=self.language_setting2,
            locale='es',
            is_active=True)
        self.yourmind2 = self.mk_section(
            self.section_index2, title='Your mind')
        # create article in english with translation in spanish and french
        english_article = self.article
        spanish_article = self.mk_article_translation(
            english_article, self.spanish)
        french_article = self.mk_article_translation(
            english_article, self.french)
        PageTranslation.objects.create(
            page=english_article, translated_page=english_article)

        # create section in english with translations
        english_section = self.yourmind
        english_section2 = self.yourmind2
        spanish_section = self.mk_section_translation(
            self.yourmind, self.spanish)
        spanish_section2 = self.mk_section_translation(
            self.yourmind2, self.spanish2)
        french_section = self.mk_section_translation(
            self.yourmind, self.french)

        # need to delete it here since it gets added in base
        for article in ArticlePage.objects.all():
            article.translated_pages.clear()
            article.save()
        for section in SectionPage.objects.all():
            section.translated_pages.clear()
            section.save()
        self.assertFalse(english_article.translated_pages.exists())
        self.assertFalse(spanish_article.translated_pages.exists())
        self.assertFalse(french_article.translated_pages.exists())
        self.assertFalse(english_section.translated_pages.exists())
        self.assertFalse(english_section2.translated_pages.exists())
        self.assertFalse(spanish_section.translated_pages.exists())
        self.assertFalse(spanish_section2.translated_pages.exists())
        self.assertFalse(french_section.translated_pages.exists())

        # run command to add languages to these pages
        call_command('add_language_to_pages')

        # run command to add list of translated_pages to these pages
        call_command('add_translated_pages_to_pages')

        # test translated pages for articles
        self.assertTrue(english_article.translated_pages.filter(
            pk=spanish_article.pk).exists())
        self.assertTrue(english_article.translated_pages.filter(
            pk=french_article.pk).exists())
        self.assertFalse(english_article.translated_pages.filter(
            pk=english_article.pk).exists())
        self.assertTrue(spanish_article.translated_pages.filter(
            pk=english_article.pk).exists())
        self.assertTrue(spanish_article.translated_pages.filter(
            pk=french_article.pk).exists())
        self.assertFalse(spanish_article.translated_pages.filter(
            pk=spanish_article.pk).exists())
        self.assertTrue(french_article.translated_pages.filter(
            pk=english_article.pk).exists())
        self.assertTrue(french_article.translated_pages.filter(
            pk=spanish_article.pk).exists())

        # test translated pages for sections
        self.assertTrue(english_section.translated_pages.filter(
            pk=spanish_section.pk).exists())
        self.assertTrue(english_section2.translated_pages.filter(
            pk=spanish_section2.pk).exists())
        self.assertTrue(english_section.translated_pages.filter(
            pk=french_section.pk).exists())
        self.assertTrue(spanish_section.translated_pages.filter(
            pk=english_section.pk).exists())
        self.assertTrue(spanish_section2.translated_pages.filter(
            pk=english_section2.pk).exists())
        self.assertTrue(spanish_section.translated_pages.filter(
            pk=french_section.pk).exists())
        self.assertTrue(french_section.translated_pages.filter(
            pk=english_section.pk).exists())
        self.assertTrue(french_section.translated_pages.filter(
            pk=spanish_section.pk).exists())

    def test_add_feature_in_latest_date_to_article(self):
        self.assertEqual(self.article.featured_in_latest_start_date, None)
        now = datetime.now()
        now = pytz.utc.localize(now)

        # create the csv file with the article slug and date
        data = {
            self.article.slug: now
        }
        fake_namefile = tempfile.NamedTemporaryFile()
        with open(fake_namefile.name, 'w') as fake_csv:
            writer = csv.writer(fake_csv)
            writer.writerow(['slug', 'date'])
            for key, value in data.items():
                writer.writerow([key, value])
        # call the command
        out = StringIO()
        call_command(
            'set_promotional_dates_from_csv', fake_namefile.name, std_out=out)
        self.assertEqual(
            ArticlePage.objects.last().featured_in_latest_start_date, now)
        fake_namefile.close()

    def test_add_tag_to_article(self):
        self.assertEqual(ArticlePageTags.objects.count(), 0)
        # create the tag data
        tag = Tag(title='over 18', slug='over-18')
        self.tag_index.add_child(instance=tag)
        tag.save_revision().publish()
        tag_data = {
            self.article.slug: tag.title
        }

        # create csv
        fake_namefile = tempfile.NamedTemporaryFile()
        with open(fake_namefile.name, 'w') as fake_csv:
            writer = csv.writer(fake_csv)
            writer.writerow(['slug', 'date'])
            for key, value in tag_data.items():
                writer.writerow([key, value])

        # call command to link tag to article
        out = StringIO()
        call_command(
            'add_tag_to_article', fake_csv.name, 'en',
            std_out=out)

        # it should create a Article Relationship with the Tag
        self.assertEqual(ArticlePageTags.objects.count(), 1)
        self.assertEqual(
            ArticlePageTags.objects.first().tag.title, tag.title)
        self.assertEqual(
            ArticlePageTags.objects.first().page, self.article)

        fake_namefile.close()
 def add_article(self, title):
     new_article = ArticlePage(title=title)
     self.section.add_child(instance=new_article)
     new_article.save_revision()
     return new_article
Beispiel #28
0
class ManagementCommandsTest(TestCase, MoloTestCaseMixin):
    def setUp(self):
        self.mk_main()
        self.main = Main.objects.all().first()
        self.language_setting = Languages.objects.create(
            site_id=self.main.get_site().pk)
        self.english = SiteLanguageRelation.objects.create(
            language_setting=Languages.for_site(self.main.get_site()),
            locale='en',
            is_active=True)
        self.spanish = SiteLanguageRelation.objects.create(
            language_setting=Languages.for_site(self.main.get_site()),
            locale='sp',
            is_active=True)
        self.french = SiteLanguageRelation.objects.create(
            language_setting=Languages.for_site(self.main.get_site()),
            locale='fr',
            is_active=True)
        self.yourmind = self.mk_section(self.section_index, title='Your mind')
        self.article = ArticlePage(title='Test Article', slug='test-article')
        self.yourmind.add_child(instance=self.article)
        self.article.save_revision().publish()

    def test_switch_main_language(self):
        tag = Tag(title='love', slug='love')
        self.tag_index.add_child(instance=tag)
        tag.save_revision().publish()
        kw = dict(language__is_main_language=True)
        for relation in LanguageRelation.objects.filter(**kw):
            self.assertEqual(relation.language.locale, 'en')
        self.assertTrue(self.english.is_main_language)
        call_command('switch_main_language', 'id')
        self.assertTrue(SiteLanguage.objects.get(locale='id').is_main_language)
        self.assertFalse(
            LanguageRelation.objects.filter(language__locale='en').exists())
        for relation in LanguageRelation.objects.filter(**kw):
            self.assertEqual(relation.language.locale, 'id')

    def test_add_language_to_pages(self):
        call_command('add_language_to_pages')
        english = SiteLanguage.objects.first()
        article = ArticlePage.objects.get(pk=self.article.pk)
        yourmind = SectionPage.objects.get(pk=self.yourmind.pk)
        self.assertEqual(article.language, english)
        self.assertEqual(yourmind.language, english)

    def test_add_translated_pages_to_pages(self):
        self.mk_main2()
        self.main2 = Main.objects.all().last()
        self.language_setting2 = Languages.objects.create(
            site_id=self.main2.get_site().pk)
        self.english2 = SiteLanguageRelation.objects.create(
            language_setting=self.language_setting2,
            locale='en',
            is_active=True)

        self.spanish2 = SiteLanguageRelation.objects.create(
            language_setting=self.language_setting2,
            locale='es',
            is_active=True)
        self.yourmind2 = self.mk_section(self.section_index2,
                                         title='Your mind')
        # create article in english with translation in spanish and french
        english_article = self.article
        spanish_article = self.mk_article_translation(english_article,
                                                      self.spanish)
        french_article = self.mk_article_translation(english_article,
                                                     self.french)
        PageTranslation.objects.create(page=english_article,
                                       translated_page=english_article)

        # create section in english with translations
        english_section = self.yourmind
        english_section2 = self.yourmind2
        spanish_section = self.mk_section_translation(self.yourmind,
                                                      self.spanish)
        spanish_section2 = self.mk_section_translation(self.yourmind2,
                                                       self.spanish2)
        french_section = self.mk_section_translation(self.yourmind,
                                                     self.french)

        # need to delete it here since it gets added in base
        for article in ArticlePage.objects.all():
            article.translated_pages.clear()
            article.save()
        for section in SectionPage.objects.all():
            section.translated_pages.clear()
            section.save()
        self.assertFalse(english_article.translated_pages.exists())
        self.assertFalse(spanish_article.translated_pages.exists())
        self.assertFalse(french_article.translated_pages.exists())
        self.assertFalse(english_section.translated_pages.exists())
        self.assertFalse(english_section2.translated_pages.exists())
        self.assertFalse(spanish_section.translated_pages.exists())
        self.assertFalse(spanish_section2.translated_pages.exists())
        self.assertFalse(french_section.translated_pages.exists())

        # run command to add languages to these pages
        call_command('add_language_to_pages')

        # run command to add list of translated_pages to these pages
        call_command('add_translated_pages_to_pages')

        # test translated pages for articles
        self.assertTrue(
            english_article.translated_pages.filter(
                pk=spanish_article.pk).exists())
        self.assertTrue(
            english_article.translated_pages.filter(
                pk=french_article.pk).exists())
        self.assertFalse(
            english_article.translated_pages.filter(
                pk=english_article.pk).exists())
        self.assertTrue(
            spanish_article.translated_pages.filter(
                pk=english_article.pk).exists())
        self.assertTrue(
            spanish_article.translated_pages.filter(
                pk=french_article.pk).exists())
        self.assertFalse(
            spanish_article.translated_pages.filter(
                pk=spanish_article.pk).exists())
        self.assertTrue(
            french_article.translated_pages.filter(
                pk=english_article.pk).exists())
        self.assertTrue(
            french_article.translated_pages.filter(
                pk=spanish_article.pk).exists())

        # test translated pages for sections
        self.assertTrue(
            english_section.translated_pages.filter(
                pk=spanish_section.pk).exists())
        self.assertTrue(
            english_section2.translated_pages.filter(
                pk=spanish_section2.pk).exists())
        self.assertTrue(
            english_section.translated_pages.filter(
                pk=french_section.pk).exists())
        self.assertTrue(
            spanish_section.translated_pages.filter(
                pk=english_section.pk).exists())
        self.assertTrue(
            spanish_section2.translated_pages.filter(
                pk=english_section2.pk).exists())
        self.assertTrue(
            spanish_section.translated_pages.filter(
                pk=french_section.pk).exists())
        self.assertTrue(
            french_section.translated_pages.filter(
                pk=english_section.pk).exists())
        self.assertTrue(
            french_section.translated_pages.filter(
                pk=spanish_section.pk).exists())

    def test_add_feature_in_latest_date_to_article(self):
        self.assertEqual(self.article.featured_in_latest_start_date, None)
        now = datetime.now()
        now = pytz.utc.localize(now)

        # create the csv file with the article slug and date
        data = {self.article.slug: now}
        fake_namefile = tempfile.NamedTemporaryFile()
        with open(fake_namefile.name, 'w') as fake_csv:
            writer = csv.writer(fake_csv)
            writer.writerow(['slug', 'date'])
            for key, value in data.items():
                writer.writerow([key, value])
        # call the command
        call_command('set_promotional_dates_from_csv', fake_namefile.name)
        self.assertEqual(
            ArticlePage.objects.last().featured_in_latest_start_date, now)
        fake_namefile.close()

    def test_add_tag_to_article(self):
        self.assertEqual(ArticlePageTags.objects.count(), 0)
        # create the tag data
        tag = Tag(title='over 18', slug='over-18')
        self.tag_index.add_child(instance=tag)
        tag.save_revision().publish()
        tag_data = {self.article.slug: tag.title}

        # create csv
        fake_namefile = tempfile.NamedTemporaryFile()
        with open(fake_namefile.name, 'w') as fake_csv:
            writer = csv.writer(fake_csv)
            writer.writerow(['slug', 'date'])
            for key, value in tag_data.items():
                writer.writerow([key, value])

        # call command to link tag to article
        call_command('add_tag_to_article', fake_csv.name, 'en')

        # it should create a Article Relationship with the Tag
        self.assertEqual(ArticlePageTags.objects.count(), 1)
        self.assertEqual(ArticlePageTags.objects.first().tag.title, tag.title)
        self.assertEqual(ArticlePageTags.objects.first().page, self.article)

        fake_namefile.close()
class TestPersistentFormsSegmentsAdapter(TestCase, MoloTestCaseMixin):
    def setUp(self):
        self.mk_main()
        self.request = RequestFactory().get('/')
        self.request.user = self.login()
        session_middleware = SessionMiddleware()
        session_middleware.process_request(self.request)
        self.request.session.save()

        self.section = SectionPage(title='test section')
        self.section_index.add_child(instance=self.section)

        self.important_tag = Tag(title='important tag')
        self.another_tag = Tag(title='other tag')
        self.tags = [self.important_tag, self.another_tag]
        for tag in self.tags:
            self.tag_index.add_child(instance=tag)
            tag.save_revision()

        self.page = ArticlePage(title='test article')
        self.section.add_child(instance=self.page)
        self.page.save_revision()

        for tag in self.tags:
            ArticlePageTags.objects.create(
                tag=tag,
                page=self.page,
            )

        self.adapter = PersistentFormsSegmentsAdapter(self.request)

    def test_no_exception_raised_if_user_not_set(self):
        del self.request.user
        try:
            self.adapter.add_page_visit(self.page)
        except AttributeError as e:
            self.fail('add_page_visit() raised AttributeError: {0}'.format(e))

    def test_no_pageview_stored_if_not_articlepage(self):
        self.adapter.add_page_visit(self.section)
        self.assertEqual(MoloFormPageView.objects.all().count(), 0)

    def test_no_pageview_stored_for_anonymous_user(self):
        self.request.user = AnonymousUser()
        self.adapter.add_page_visit(self.page)
        self.assertEqual(MoloFormPageView.objects.all().count(), 0)

    def test_pageview_stored(self):
        self.adapter.add_page_visit(self.page)

        pageviews = MoloFormPageView.objects.all()

        self.assertEqual(pageviews.count(), 1)

        self.assertEqual(pageviews[0].user, self.request.user)
        self.assertEqual(pageviews[0].page, self.page)

    def test_get_tag_count_zero_if_no_user(self):
        del self.request.user

        with self.assertNumQueries(0):
            count = self.adapter.get_tag_count(self.important_tag)

        self.assertEqual(count, 0)

    def test_get_tag_count_zero_if_anonymous_user(self):
        self.request.user = AnonymousUser()

        with self.assertNumQueries(0):
            count = self.adapter.get_tag_count(self.important_tag)

        self.assertEqual(count, 0)

    def test_get_tag_count_only_counts_current_user(self):
        another_user = get_user_model().objects.create_user(
            username='******',
            email='*****@*****.**',
            password='******',
        )
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        MoloFormPageView.objects.create(
            user=another_user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(self.important_tag), 1)

    def test_get_tag_count_only_counts_specified_tag(self):
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(self.important_tag), 1)

    def test_get_tag_count_uses_date_from_if_provided(self):
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(
            self.adapter.get_tag_count(
                self.important_tag,
                date_from=make_aware(datetime(2099, 12, 31)),
            ), 0)

    def test_get_tag_count_uses_date_to_if_provided(self):
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(
            self.adapter.get_tag_count(
                self.important_tag,
                date_to=make_aware(datetime(2000, 1, 1)),
            ), 0)

    def test_get_tag_count_groups_by_unique_article(self):
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(self.important_tag), 1)

    def test_get_visit_count_zero_no_request_user(self):
        del self.request.user
        self.assertEqual(self.adapter.get_visit_count(self.page), 0)

    def test_get_visit_count_zero_for_anonymous_user(self):
        self.request.user = AnonymousUser()
        self.assertEqual(self.adapter.get_visit_count(self.page), 0)

    def test_get_visit_count_zero_if_page_not_provided(self):
        self.assertEqual(self.adapter.get_visit_count(), 0)

    def test_get_visit_counts_pageviews_for_user_and_page(self):
        MoloFormPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_visit_count(self.page), 1)
Beispiel #30
0
class TestPersistentSurveysSegmentsAdapter(TestCase, MoloTestCaseMixin):
    def setUp(self):
        self.mk_main()
        self.request = RequestFactory().get('/')
        self.request.user = self.login()
        session_middleware = SessionMiddleware()
        session_middleware.process_request(self.request)
        self.request.session.save()

        self.section = SectionPage(title='test section')
        self.section_index.add_child(instance=self.section)

        self.important_tag = Tag(title='important tag')
        self.another_tag = Tag(title='other tag')
        self.tags = [self.important_tag, self.another_tag]
        for tag in self.tags:
            self.tag_index.add_child(instance=tag)
            tag.save_revision()

        self.page = ArticlePage(title='test article')
        self.section.add_child(instance=self.page)
        self.page.save_revision()

        for tag in self.tags:
            ArticlePageTags.objects.create(
                tag=tag,
                page=self.page,
            )

        self.adapter = PersistentSurveysSegmentsAdapter(self.request)

    def test_no_exception_raised_if_user_not_set(self):
        del self.request.user
        try:
            self.adapter.add_page_visit(self.page)
        except AttributeError as e:
            self.fail('add_page_visit() raised AttributeError: {0}'.format(e))

    def test_no_pageview_stored_if_not_articlepage(self):
        self.adapter.add_page_visit(self.section)
        self.assertEqual(MoloSurveyPageView.objects.all().count(), 0)

    def test_no_pageview_stored_for_anonymous_user(self):
        self.request.user = AnonymousUser()
        self.adapter.add_page_visit(self.page)
        self.assertEqual(MoloSurveyPageView.objects.all().count(), 0)

    def test_pageview_stored(self):
        self.adapter.add_page_visit(self.page)

        pageviews = MoloSurveyPageView.objects.all()

        self.assertEqual(pageviews.count(), 1)

        self.assertEqual(pageviews[0].user, self.request.user)
        self.assertEqual(pageviews[0].page, self.page)

    def test_get_tag_count_zero_if_no_user(self):
        del self.request.user

        with self.assertNumQueries(0):
            count = self.adapter.get_tag_count(self.important_tag)

        self.assertEqual(count, 0)

    def test_get_tag_count_zero_if_anonymous_user(self):
        self.request.user = AnonymousUser()

        with self.assertNumQueries(0):
            count = self.adapter.get_tag_count(self.important_tag)

        self.assertEqual(count, 0)

    def test_get_tag_count_only_counts_current_user(self):
        another_user = get_user_model().objects.create_user(
            username='******',
            email='*****@*****.**',
            password='******',
        )
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        MoloSurveyPageView.objects.create(
            user=another_user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(self.important_tag), 1)

    def test_get_tag_count_only_counts_specified_tag(self):
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(self.important_tag), 1)

    def test_get_tag_count_uses_date_from_if_provided(self):
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(
            self.important_tag,
            date_from=make_aware(datetime(2099, 12, 31)),
        ), 0)

    def test_get_tag_count_uses_date_to_if_provided(self):
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(
            self.important_tag,
            date_to=make_aware(datetime(2000, 1, 1)),
        ), 0)

    def test_get_tag_count_groups_by_unique_article(self):
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_tag_count(self.important_tag), 1)

    def test_get_visit_count_zero_no_request_user(self):
        del self.request.user
        self.assertEqual(self.adapter.get_visit_count(self.page), 0)

    def test_get_visit_count_zero_for_anonymous_user(self):
        self.request.user = AnonymousUser()
        self.assertEqual(self.adapter.get_visit_count(self.page), 0)

    def test_get_visit_count_zero_if_page_not_provided(self):
        self.assertEqual(self.adapter.get_visit_count(), 0)

    def test_get_visit_counts_pageviews_for_user_and_page(self):
        MoloSurveyPageView.objects.create(
            user=self.request.user,
            page=self.page,
        )
        self.assertEqual(self.adapter.get_visit_count(self.page), 1)