File: testCalendarView.py

package info (click to toggle)
zope-cmfplone 2.5.1-4etch3
  • links: PTS
  • area: main
  • in suites: etch
  • size: 7,752 kB
  • ctags: 5,237
  • sloc: python: 28,264; xml: 3,723; php: 129; makefile: 99; sh: 2
file content (183 lines) | stat: -rw-r--r-- 7,163 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# Tests the CalendarPortlet View
#

import os, sys
if __name__ == '__main__':
    execfile(os.path.join(sys.path[0], 'framework.py'))

from Products.CMFPlone.tests import PloneTestCase

from Products.CMFPlone.tests.PloneTestCase import FunctionalTestCase
from Products.CMFPlone.tests.PloneTestCase import default_user
from Products.CMFPlone.tests.PloneTestCase import default_password

try:
    from zope.app.testing.ztapi import provideUtility
    from zope.app.testing.ztapi import unprovideUtility
except ImportError:
    # BBB for Zope 2.8, can be removed in Plone 3.0
    from zope.app.tests.ztapi import provideUtility
    from zope.app.tests.ztapi import unprovideUtility

from zope.i18n.simpletranslationdomain import SimpleTranslationDomain
from zope.i18n.interfaces import ITranslationDomain

from DateTime import DateTime

from Products.ATContentTypes.tests.utils import FakeRequestSession
from Products.CMFPlone.browser.interfaces import ICalendarPortlet
from Products.CMFPlone.browser.portlets.calendar import CalendarPortlet


class TestCalendarPortletView(PloneTestCase.PloneTestCase):

    def afterSetUp(self):
        self.url = self.portal.portal_url
        self.calendar = self.portal.portal_calendar
        self.now = DateTime()

    def testImplementsICalendarPortlet(self):
        """CalendarPortlet must implement ICalendarPortlet"""
        self.failUnless(ICalendarPortlet.implementedBy(CalendarPortlet))

    def testGetYearAndMonthToDisplay(self):
        """CalendarPortlet.getYearAndMonthToDisplay() must return the current
           year and month.
        """
        view = CalendarPortlet(self.portal, self.app.REQUEST)
        result = view.getYearAndMonthToDisplay()
        self.failUnlessEqual(result, (self.now.year(), self.now.month()))
        
    def testGetYearAndMonthToDisplayRequest(self):
        """CalendarPortlet.getYearAndMonthToDisplay() must return the year and
           month found in REQUEST variables.
        """
        self.app.REQUEST['year'] = 2005
        self.app.REQUEST['month'] = 7
        view = CalendarPortlet(self.portal, self.app.REQUEST)
        result = view.getYearAndMonthToDisplay()
        self.failUnlessEqual(result, (2005, 7))

    def testGetYearAndMonthToDisplaySession(self):
        """CalendarPortlet.getYearAndMonthToDisplay() must return the year and
           month found in SESSION variables if this is enables in the calendar
           tool.
        """
        usesession = self.calendar.getUseSession()
        self.app.REQUEST['SESSION'] = FakeRequestSession()
        self.app.REQUEST['SESSION']['calendar_year'] = 2004
        self.app.REQUEST['SESSION']['calendar_month'] = 6
        
        # Ignore the session variables and use the current date
        self.calendar.use_session = False
        view = CalendarPortlet(self.portal, self.app.REQUEST)
        result = view.getYearAndMonthToDisplay()
        self.failUnlessEqual(result, (self.now.year(), self.now.month()))
        
        # Use the session variables
        self.calendar.use_session = True
        view = CalendarPortlet(self.portal, self.app.REQUEST)
        result = view.getYearAndMonthToDisplay()
        self.failUnlessEqual(result, (2004, 6))
        
        # Restore the orginal value
        self.calendar.use_session = usesession

    def testGetPreviousMonth(self):
        view = CalendarPortlet(self.portal, self.app.REQUEST)
        result = view.getPreviousMonth(12, 2006)
        self.failUnlessEqual(result, DateTime(2006, 11, 1))
        
        result = view.getPreviousMonth(1, 2006)
        self.failUnlessEqual(result, DateTime(2005, 12, 1))

    def testGetNextMonth(self):
        view = CalendarPortlet(self.portal, self.app.REQUEST)
        result = view.getNextMonth(12, 2006)
        self.failUnlessEqual(result, DateTime(2007, 1, 1))
        
        result = view.getNextMonth(1, 2006)
        self.failUnlessEqual(result, DateTime(2006, 2, 1))

    def testIsToday(self):
        view = CalendarPortlet(self.portal, self.app.REQUEST)
        self.failUnless(view.isToday(self.now.day()))


class TestCalendarPortlet(PloneTestCase.FunctionalTestCase):

    def afterSetUp(self):
        self.portal_path = self.portal.absolute_url(1)
        self.basic_auth = '%s:%s' % (default_user, default_password)
        self.workflow = self.portal.portal_workflow

    def addEvent(self, id):
        self.portal.invokeFactory('Event', id)
        obj = getattr(self.portal, id)
        obj.setStartDate(DateTime())
        obj.setEndDate(DateTime()+1)
        obj.setTitle(u'\xf6hm %s title' % id)
        obj.setDescription(u'\xf6hm %s description' % id)
        # publish event
        self.workflow.doActionFor(obj, 'publish')

    def populateSite(self):
        self.setRoles(['Manager'])
        self.addEvent('event1')
        self.addEvent('event2')
        self.addEvent('event3')
        self.setRoles(['Member'])

    def testEmptyCalendar(self):
        response = self.publish(self.portal_path, self.basic_auth)

        self.assertEquals(response.getStatus(), 200)
        self.failUnless('id="thePloneCalendar"' in response.getBody())

    def testCalendarWithEvents(self):
        self.populateSite()
        response = self.publish(self.portal_path, self.basic_auth)

        self.assertEquals(response.getStatus(), 200)
        self.failUnless('id="thePloneCalendar"' in response.getBody())
        self.failUnless('event1' in response.getBody())
        self.failUnless('event2' in response.getBody())
        self.failUnless('event3' in response.getBody())

    def testLocalizedCalendarWithEvents(self):
        self.populateSite()

        # set up some messages to test the calendar date/time formatting
        messages = {
            ('ja', 'date_format_long'): u'${Y}\u5e74${m}\u6708${d}\u65e5 ${H}\u6642${M}\u5206',
            ('ja', 'date_format_short'): u'${Y}\u5e74${m}\u6708${d}\u65e5'}
        dates = SimpleTranslationDomain('plone', messages)
        provideUtility(ITranslationDomain, dates, 'plone')

        response = self.publish(self.portal_path, self.basic_auth,
                                env={'HTTP_ACCEPT_LANGUAGE': 'ja'})
        self.assertEquals(response.getStatus(), 200)
        self.failUnless('id="thePloneCalendar"' in response.getBody())
        self.failUnless('event1' in response.getBody())
        self.failUnless('event2' in response.getBody())
        self.failUnless('event3' in response.getBody())
        # construct our date
        event1_date = self.portal.event1.start_date.strftime('%Y[s%m[s%d[s')
        event1_date = event1_date.replace('[s','%s')%(u'\u5e74', u'\u6708',
                                                      u'\u65e5')
        self.failUnless(event1_date.encode('utf-8')
                        in response.getBody())

        # Clean up after ourselves
        unprovideUtility(ITranslationDomain, name='plone')


def test_suite():
    from unittest import TestSuite, makeSuite
    suite = TestSuite()
    suite.addTest(makeSuite(TestCalendarPortletView))
    suite.addTest(makeSuite(TestCalendarPortlet))
    return suite

if __name__ == '__main__':
    framework()