def test_pre_reserve_script_variables(self):

        class MockContext(object):
            def getPhysicalPath(self):
                return ['', 'foo', 'bar']

        start, end = datetime.now(), datetime.now()
        data = utils.mock_data_dictionary({
            'is_test': True,
            'description': 'This is the description'
        })

        settings.set('pre_reservation_script', u'exit()')

        locals_ = {}
        run_pre_reserve_script(MockContext(), start, end, data, locals_)

        self.assertEqual(locals_['path'], '/foo/bar')
        self.assertFalse(locals_['is_group_reservation'])
        self.assertEqual(locals_['start'], start)
        self.assertEqual(locals_['end'], end)
        self.assertEqual(locals_['date'], date)
        self.assertEqual(locals_['datetime'], datetime)
        self.assertEqual(locals_['timedelta'], timedelta)
        self.assertTrue(locals_['formset_available']('mock'))
Esempio n. 2
0
    def run_reserve(self,
                    data,
                    approve_manually,
                    start=None,
                    end=None,
                    group=None,
                    quota=1,
                    dates=None):

        assert (start and end) or group or dates
        assert not (start and end and group and dates)

        email = self.email(data)
        additional_data = self.additional_data(data, add_manager_defaults=True)
        session_id = self.session_id()

        # only store forms defined in the formsets list
        if not self.context.formsets:
            additional_data = {}
        else:
            additional_data = dict((form, additional_data[form])
                                   for form in self.context.formsets
                                   if form in additional_data)

        run_pre_reserve_script(self.context, start, end, additional_data)

        def run():
            if start and end:
                return self.scheduler.reserve(email, (start, end),
                                              data=additional_data,
                                              session_id=session_id,
                                              quota=quota)
            elif group:
                return self.scheduler.reserve(email,
                                              group=group,
                                              data=additional_data,
                                              session_id=session_id,
                                              quota=quota)
            else:
                return self.scheduler.reserve(email,
                                              dates,
                                              data=additional_data,
                                              session_id=session_id,
                                              quota=quota)

        token = throttled(run, 'reserve')()

        if not approve_manually:
            self.scheduler.approve_reservations(token)

        self.flash(
            _(u'Added reservation to your list. '
              u'You have 15 minutes to confirm your reservations.'))
Esempio n. 3
0
    def run_reserve(
            self, data, approve_manually, dates=None, group=None, quota=1,
            rrule=None, description=None
    ):

        assert dates or group
        assert not (dates and group)

        email = self.email(data)
        session_id = self.session_id()

        additional_data = self.additional_data(data, add_manager_defaults=True)

        # only store forms defined in the formsets list
        additional_data = dict(
            (
                form, additional_data[form]
            ) for form in self.context.formsets if form in additional_data
        )

        if dates:
            for start, end in utils.pairs(dates):
                run_pre_reserve_script(
                    self.context, start, end, additional_data
                )
        else:
            run_pre_reserve_script(self.context, None, None, additional_data)

        def run():
            if dates:
                return self.scheduler.reserve(
                    email, dates, data=additional_data,
                    session_id=session_id, quota=quota, rrule=rrule,
                    description=description
                )
            else:
                return self.scheduler.reserve(
                    email, group=group,
                    data=additional_data, session_id=session_id, quota=quota,
                    description=description
                )

        token = throttled(run, 'reserve')()

        if approve_manually:
            self.flash(_(u'Added to waitinglist'))
        else:
            self.scheduler.approve_reservation(token)
            self.flash(_(u'Reservation successful'))
Esempio n. 4
0
    def run_reserve(
        self, data, approve_manually, start=None, end=None, group=None, quota=1
    ):

        assert (start and end) or group
        assert not (start and end and group)

        email = self.email(data)
        additional_data = self.additional_data(data, add_manager_defaults=True)
        session_id = self.session_id()

        # only store forms defined in the formsets list
        additional_data = dict(
            (
                form, additional_data[form]
            ) for form in self.context.formsets if form in additional_data
        )

        run_pre_reserve_script(self.context, start, end, additional_data)

        def run():
            if start and end:
                return self.scheduler.reserve(
                    email, (start, end),
                    data=additional_data, session_id=session_id, quota=quota
                )
            else:
                return self.scheduler.reserve(
                    email, group=group,
                    data=additional_data, session_id=session_id, quota=quota
                )

        token = throttled(run, 'reserve')()

        if approve_manually:
            self.flash(_(u'Added to waitinglist'))
        else:
            self.scheduler.approve_reservation(token)
            self.flash(_(u'Reservation successful'))
Esempio n. 5
0
    def run_reserve(self, data, approve_manually, start=None, end=None, group=None, quota=1, dates=None):

        assert (start and end) or group or dates
        assert not (start and end and group and dates)

        email = self.email(data)
        additional_data = self.additional_data(data, add_manager_defaults=True)
        session_id = self.session_id()

        # only store forms defined in the formsets list
        if not self.context.formsets:
            additional_data = {}
        else:
            additional_data = dict(
                (form, additional_data[form]) for form in self.context.formsets if form in additional_data
            )

        run_pre_reserve_script(self.context, start, end, additional_data)

        def run():
            if start and end:
                return self.scheduler.reserve(
                    email, (start, end), data=additional_data, session_id=session_id, quota=quota
                )
            elif group:
                return self.scheduler.reserve(
                    email, group=group, data=additional_data, session_id=session_id, quota=quota
                )
            else:
                return self.scheduler.reserve(email, dates, data=additional_data, session_id=session_id, quota=quota)

        token = throttled(run, "reserve")()

        if not approve_manually:
            self.scheduler.approve_reservations(token)

        self.flash(_(u"Added reservation to your list. " u"You have 15 minutes to confirm your reservations."))
    def test_pre_reserve_script_example(self):

        class MockContext(object):
            def getPhysicalPath(self):
                return ['', 'foo', 'bar']

        script = u"""
        if is_group_reservation:
            exit()

        if not formset_available('personalien'):
            exit()

        if personalien.zipcode != '1337':
            error('People with uncool zipcodes are not welcome.')
        """

        settings.set('pre_reservation_script', dedent(script))

        start, end = None, None
        data = utils.mock_data_dictionary({})

        run = lambda: run_pre_reserve_script(MockContext(), start, end, data)

        run()  # exits early because it's a group reservation

        start, end = datetime.now(), datetime.now()

        run()  # exits early because the formset is not available

        data = utils.mock_data_dictionary({
            'zipcode': '1234'
        }, 'personalien')

        self.assertRaises(CustomReservationError, run)  # uncool zipcode

        data = utils.mock_data_dictionary({
            'zipcode': '1337'
        }, 'personalien')

        run()  # ok