def render(self): transition = self.request.form.get('transition', None) text = self.request.form.get('text', None) if transition is None or not text: msg = _(u'There were some errors. Required input is missing.') api.portal.show_message(message=msg, request=self.request, type='error') else: review_state = api.content.get_state(self.context) # we use the current state as a marker to indicate # no review state change if transition != review_state: # we need to make the transition first api.content.transition(self.context, transition) review_state = api.content.get_state(self.context) responses = IResponseContainer(self.context) responses.add(Response(review_state, text)) # notify the claim has a new response notify(ObjectModifiedEvent(self.context)) msg = _(u'Item created.') api.portal.show_message(message=msg, request=self.request) self.request.response.redirect(self.context.absolute_url())
def test_adding(self): adapter = IResponseContainer(self.claim) review_state = api.content.get_state(self.claim) adapter.add(Response(review_state, u'First response.')) with api.env.adopt_roles(['Manager']): api.content.transition(self.claim, 'accept') review_state = api.content.get_state(self.claim) adapter.add(Response(review_state, u'Second response.')) api.content.transition(self.claim, 'resolve') review_state = api.content.get_state(self.claim) adapter.add(Response(review_state, u'Third response.')) self.assertEqual(len(adapter), 3) # check the first response self.assertEqual(adapter[0].creator, 'test_user_1_') self.assertEqual(adapter[0].review_state, 'Pending') self.assertTrue(isinstance(adapter[0].date, datetime)) self.assertEqual(adapter[0].text, u'First response.') # same creator, we only adopted a rol to make the transition self.assertEqual(adapter[1].creator, 'test_user_1_') self.assertEqual(adapter[2].creator, 'test_user_1_') # dates are sequential self.assertTrue(adapter[0].date < adapter[1].date) self.assertTrue(adapter[1].date < adapter[2].date) # review states and text are ok self.assertEqual(adapter[1].review_state, 'Accepted') self.assertEqual(adapter[2].review_state, 'Resolved') self.assertEqual(adapter[1].text, u'Second response.') self.assertEqual(adapter[2].text, u'Third response.')