def test_fires_edit_begun_event(self): # Context and request context_mock = self.create_dummy(portal_type=u'testtype') request_mock = TestRequest() # FTI fti_mock = DexterityFTI(u"testtype") fti_mock.lookupSchema = Mock(return_value=ISchema) self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype") self.mock_adapter( FieldWidgets, IWidgets, (Interface, Interface, Interface) ) self.mock_adapter(Actions, IActions, (Interface, Interface, Interface)) # mock notify from zope.event import notify notify_mock = self.patch_global(notify) # Form view = DefaultEditForm(context_mock, request_mock) view.update() self.assertTrue(notify_mock.called) self.assertTrue( IEditBegunEvent.providedBy(notify_mock.call_args[0][0]))
def test_fires_edit_begun_event(self): # Context and request context_mock = self.create_dummy(portal_type=u'testtype') request_mock = TestRequest() # FTI fti_mock = self.mocker.proxy(DexterityFTI(u"testtype")) self.expect(fti_mock.lookupSchema()).result(ISchema) self.mocker.count(0, 100) self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype") self.mock_adapter(FieldWidgets, IWidgets, (Interface, Interface, Interface)) self.mock_adapter(Actions, IActions, (Interface, Interface, Interface)) # mock notify notify_mock = self.mocker.replace('zope.event.notify') self.expect( notify_mock(mocker.MATCH(lambda x: IEditBegunEvent.providedBy(x)))) # Form view = DefaultEditForm(context_mock, request_mock) self.replay() view.update()
def test_fires_edit_begun_event(self): # Context and request context_mock = self.create_dummy(portal_type=u'testtype') request_mock = TestRequest() # FTI fti_mock = self.mocker.proxy(DexterityFTI(u"testtype")) self.expect(fti_mock.lookupSchema()).result(ISchema) self.mocker.count(0, 100) self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype") self.mock_adapter(FieldWidgets, IWidgets, (Interface, Interface, Interface)) self.mock_adapter(Actions, IActions, (Interface, Interface, Interface)) # mock notify notify_mock = self.mocker.replace('zope.event.notify') self.expect(notify_mock(mocker.MATCH( lambda x: IEditBegunEvent.providedBy(x) ))) # Form view = DefaultEditForm(context_mock, request_mock) self.replay() view.update()
def test_fires_edit_begun_event(self): # Context and request context_mock = self.create_dummy(portal_type=u'testtype') request_mock = TestRequest() # FTI fti_mock = DexterityFTI(u"testtype") fti_mock.lookupSchema = Mock(return_value=ISchema) self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype") self.mock_adapter(FieldWidgets, IWidgets, (Interface, Interface, Interface)) self.mock_adapter(Actions, IActions, (Interface, Interface, Interface)) # mock notify from zope.event import notify notify_mock = self.patch_global(notify) # Form view = DefaultEditForm(context_mock, request_mock) view.update() self.assertTrue(notify_mock.called) self.assertTrue(IEditBegunEvent.providedBy( notify_mock.call_args[0][0]))
def update(self): DefaultEditForm.update(self) timeoff = self.request.form.get('form.widgets.timeoff', u'') saved = self.request.form.get('form.buttons.save', u'') if timeoff and saved: user = api.user.get_current() if user.getProperty('id') in self.context.listCreators(): self.context.workflow_status = u'pending' self.context.reindexObject() run_mailing_process(self.context, self.context.absolute_url(), True)
def update(self): DefaultEditForm.update(self)
def test_widgets_render_missing_values(self): """Test that gets run for each of the portal type specific subclasses, and asserts that a rendered z3c.form widget correctly returns the missing value if that's what's currently persisted on the object. """ if self.portal_type is None: # Don't attempt to run this test for the abstract base class return self.login(self.manager) obj = self.get_obj_of_own_type() form = DefaultEditForm(obj, self.request) # Populate the form with fields according to the object's portal type with fake_interaction(): # We need a fake IInteraction context because otherwise # z3c.formwidget.query.widget fails with its checkPermission() form.update() for widget in self.iter_widgets(form): field = widget.field if field.required: # Required fields shouldn't have missing values return if field.readonly: return # Determine what this field's missing value would be missing_value = field.missing_value # Manipulate fixture obj to have missing value for this field field.set(field.interface(obj), missing_value) # Update the widget to reflect that changed value on the obj with fake_interaction(): widget.update() # Use the widget to retrieve the value - but turn it into a # field value using the field's DataConverter, in order to # compare it to missing value. dc = IDataConverter(widget) field_value_from_widget = dc.toFieldValue(widget.value) if isinstance(widget, SingleCheckBoxWidget): # Boolean fields handled by SingleCheckBoxWidgets are funny: # Their fields' missing value is None, which ends up # as a widget.value of empty list [], which # IDataConverter.toFieldValue() then turns into False. # # In other words, there isn't really a concept of missing # values for booleans - MV will always end up being # considered the same as False. if field_value_from_widget is False: field_value_from_widget = None if isinstance(field, List) and isinstance(widget, CheckBoxWidget): # zope.schema.List is weird too - it gets rendered using # a CheckBoxWidget. missing_value = [] self.assertEqual( missing_value, field_value_from_widget, 'Unexpectedly got %r instead of missing value %r ' 'from widget %r (for an %r object) ' % ( field_value_from_widget, missing_value, widget, obj.portal_type))