Beispiel #1
0
 def test_middle_ad_below_thisweeks_ad_raises(self):
     category = NewsletterCategory()
     category.ad_middle_groups_above = 3
     category.ad_thisweeks_groups_above = 2
     self.assertRaises(
         zope.schema.ValidationError,
         lambda: INewsletterCategory.validateInvariants(category))
Beispiel #2
0
 def test_middle_ad_above_thisweeks_ad_validates(self):
     category = NewsletterCategory()
     category.ad_middle_groups_above = 2
     category.ad_thisweeks_groups_above = 3
     try:
         INewsletterCategory.validateInvariants(category)
     except zope.schema.ValidationError as e:
         raise AssertionError(e)
Beispiel #3
0
 def setUp(self):
     super(AddTest, self).setUp()
     self.repository['newsletter'] = zeit.cms.repository.folder.Folder()
     category = NewsletterCategory()
     category.subject = 'nosubject'
     self.repository['newsletter']['taeglich'] = category
     transaction.commit()
     self.open('/')
Beispiel #4
0
 def setUp(self):
     super(RuleTest, self).setUp()
     from zeit.newsletter.newsletter import Newsletter
     from zeit.newsletter.category import NewsletterCategory
     category = NewsletterCategory()
     category.ad_middle_groups_above = 42
     category.ad_thisweeks_groups_above = 63
     self.repository['category'] = category
     self.category = self.repository['category']
     self.category['newsletter'] = Newsletter()
     self.newsletter = self.category['newsletter']
     factory = zope.component.getAdapter(
         self.newsletter.body,
         zeit.edit.interfaces.IElementFactory,
         name='group')
     group = factory()
     self.globs = IRuleGlobs(group)
Beispiel #5
0
 def test_finds_category_by_walking_up_parents(self):
     from zeit.newsletter.category import NewsletterCategory
     from zeit.newsletter.interfaces import INewsletterCategory
     from zeit.newsletter.newsletter import Newsletter
     nl = self.repository['foo'] = Newsletter()
     self.assertEqual(None, INewsletterCategory(nl, None))
     self.repository['newsletter'] = zeit.cms.repository.folder.Folder()
     self.repository['newsletter']['taeglich'] = NewsletterCategory()
     nl = self.repository['newsletter']['taeglich']['one'] = Newsletter()
     self.assertEqual(self.repository['newsletter']['taeglich'],
                      INewsletterCategory(nl))
Beispiel #6
0
    def setUp(self):
        from zeit.newsletter.category import NewsletterCategory
        from zeit.newsletter.newsletter import Newsletter
        import zeit.cms.repository.folder
        super(SendTest, self).setUp()
        category = NewsletterCategory()
        category.mandant = '12345'
        category.recipientlist = 'recipientlist'
        category.recipientlist_test = 'recipientlist_test'
        self.repository['mynl'] = category
        self.repository['mynl']['newsletter'] = Newsletter()
        self.newsletter = self.repository['mynl']['newsletter']
        self.newsletter.subject = 'thesubject'

        self.renderer = mock.Mock()
        zope.component.getGlobalSiteManager().registerUtility(
            self.renderer, zeit.newsletter.interfaces.IRenderer)
        self.renderer.return_value = dict(html=mock.sentinel.html,
                                          text=mock.sentinel.text)

        self.optivo = zope.component.getUtility(zeit.optivo.interfaces.IOptivo)
        self.optivo.reset()
Beispiel #7
0
 def setUp(self):
     super(BuilderTest, self).setUp()
     self.category = NewsletterCategory()
     self.category.ressorts = (u'Politik', u'Wirtschaft')
     self.category.subject = 'nosubject'
     self.category.ad_middle_groups_above = self.MIDDLE_AD_GROUPS_ABOVE
     self.category.ad_thisweeks_groups_above = \
         self.THISWEEKS_AD_GROUPS_ABOVE
     self.repository['mynl'] = self.category
     self.category = self.repository['mynl']
     self.newsletter = self.repository['mynl']['newsletter'] = Newsletter()
     self.builder = zeit.newsletter.category.Builder(
         self.repository['mynl'], self.newsletter)
Beispiel #8
0
 def setUp(self):
     from zeit.newsletter.newsletter import Newsletter
     from zeit.newsletter.category import NewsletterCategory
     super(AdvertisementTest, self).setUp()
     category = NewsletterCategory()
     category.ad_middle_title = u'Some ad'
     category.ad_middle_groups_above = 0
     category.ad_middle_image = zeit.cms.interfaces.ICMSContent(
         'http://xml.zeit.de/2006/DSC00109_2.JPG')
     category.ad_thisweeks_groups_above = 0
     self.repository['newsletter'] = category
     newsletter = Newsletter()
     ad_factory = zope.component.getAdapter(
         newsletter.body,
         zeit.edit.interfaces.IElementFactory,
         name='advertisement-middle')
     ad_factory()
     self.repository['newsletter']['one'] = newsletter
     transaction.commit()
     self.open('/repository/newsletter/one/@@checkout')
Beispiel #9
0
 def setUp(self):
     super(CreateNewsletterTest, self).setUp()
     self.category = NewsletterCategory()
     self.category.subject = 'nosubject'
     self.repository['mynl'] = self.category
Beispiel #10
0
class CreateNewsletterTest(zeit.newsletter.testing.TestCase):
    def setUp(self):
        super(CreateNewsletterTest, self).setUp()
        self.category = NewsletterCategory()
        self.category.subject = 'nosubject'
        self.repository['mynl'] = self.category

    def test_should_assemble_folder_name_from_year_and_month(self):
        folder = self.category._find_or_create_folder(
            datetime.date(2011, 6, 29))
        self.assertEqual('2011-06', folder.__name__)

    def test_should_reuse_existing_folder(self):
        self.category['2011-06'] = zeit.cms.repository.folder.Folder()
        folder = self.category['2011-06']
        created = self.category._find_or_create_folder(
            datetime.date(2011, 6, 29))
        self.assertIs(folder, created)

    def test_choose_name_should_use_day(self):
        self.category['2011-06'] = zeit.cms.repository.folder.Folder()
        folder = self.category['2011-06']
        name = self.category._choose_name(folder, datetime.date(2011, 6, 29))
        self.assertEqual('29-1', name)

    def test_choose_name_should_increment_suffix(self):
        self.category['2011-06'] = zeit.cms.repository.folder.Folder()
        folder = self.category['2011-06']
        folder['29-1'] = zeit.cms.repository.folder.Folder()
        name = self.category._choose_name(folder, datetime.date(2011, 6, 29))
        self.assertEqual('29-2', name)

    # XXX re VIV-510: In addition to the following test, we'd need one that
    # asserts that creation times do get stored when a newsletter was
    # successfully published. While this is true for trying it out in a
    # running instance, something in the test setup used to break the identity
    # of the category object between test code and Newsletter.send(). Left
    # this test as an exercise to be completed after an urgent feature release.

    def test_last_creation_time_is_not_remembered_while_unpublished(self):
        from datetime import datetime
        dt = mock.Mock()
        dt.side_effect = lambda *args, **kw: datetime(*args, **kw)
        timestamp1 = datetime(2011, 6, 29, 10, 0, tzinfo=pytz.UTC)
        timestamp2 = datetime(2011, 6, 29, 15, 0, tzinfo=pytz.UTC)

        with mock.patch('datetime.datetime', dt):
            self.category._get_content_newer_than = mock.Mock()
            self.category._get_content_newer_than.return_value = []

            dt.now.return_value = timestamp1
            self.category.create()
            self.category._get_content_newer_than.assert_called_with(None)

            dt.now.return_value = timestamp2
            self.category.create()
            self.category._get_content_newer_than.assert_called_with(None)

    def test_smoke_query_for_newer_content(self):
        # this is just a smoke test (against syntax errors and such),
        # since the mock connector doesn't implement search
        ANY = datetime.datetime(2001, 6, 29, 10, 0)
        self.assertEqual(3,
                         len(list(self.category._get_content_newer_than(ANY))))

    def test_query_with_none_returns_empty_list(self):
        # XXX is this what we want for the first-ever newsletter created?
        self.assertEqual([], list(self.category._get_content_newer_than(None)))

    def test_get_content_newer_than_should_return_objects(self):
        from zeit.cms.interfaces import ICMSContent
        ANY = datetime.datetime(2001, 6, 29, 10, 0)
        result = list(self.category._get_content_newer_than(ANY))
        for obj in result:
            self.assertTrue(ICMSContent.providedBy(obj), obj)

    def test_subject_interpolates_date(self):
        from zeit.cms.checkout.helper import checked_out
        with checked_out(self.repository['mynl']) as category:
            category.subject = 'foo {today}'

        timestamp = datetime.datetime(2001, 6, 29, 10, 0, tzinfo=pytz.UTC)
        with mock.patch('datetime.datetime') as dt:
            self.category._get_content_newer_than = mock.Mock()
            dt.now.return_value = timestamp
            newsletter = self.repository['mynl'].create()

        self.assertEqual('foo 29.06.2001', newsletter.subject)

    def test_smoke_test_for_populated_newletter_body(self):
        # this is just a smoke test to make sure things are wired up,
        # since the mock connector doesn't implement search
        with mock.patch('zeit.newsletter.category.Builder.__call__') as build:
            self.repository['mynl'].create()
            build.assert_called()
Beispiel #11
0
 def setUp(self):
     super(CategoryMetadata, self).setUp()
     self.repository['newsletter'] = zeit.cms.repository.folder.Folder()
     self.repository['newsletter']['taeglich'] = NewsletterCategory()
     transaction.commit()