def test_transaction_atomic_works(self): # create and connect a post fake receiver to the desired signal post_receiver = MagicMock() post_receiver.side_effect = AttributeError('boo' + unichr(5000)) post_event_signal.connect( post_receiver, dispatch_uid='blah post' ) self.assertIsNone(FakeModel.objects.first()) # call the transition that will trigger the signal response = self.client.post('/fakemodels/', {}) self.assertTrue(post_receiver.called) self.assertEquals(post_receiver.call_count, 1) self.assertEquals(response.status_code, 500) self.assertIsNone(FakeModel.objects.first()) # cleanup post_event_signal.disconnect(post_receiver)
def test_signals_sent(self): # create and connect a pre and post fake receiver to the desired signal pre_receiver = MagicMock(return_value=None) post_receiver = MagicMock(return_value=None) pre_event_signal.connect( pre_receiver, dispatch_uid='blah blah blah pre' ) post_event_signal.connect( post_receiver, dispatch_uid='blah blah blah post' ) # call the transition that will trigger the signal response = self.client.post('/fakemodels/', {}) self.assertEquals(response.status_code, 201) # ensure that the receiver was only called once self.assertTrue(post_receiver.called) self.assertEquals(post_receiver.call_count, 1) self.assertTrue(pre_receiver.called) self.assertEquals(pre_receiver.call_count, 1) # ensure the receiver was only called once with the correct args args = post_receiver.call_args[1] self.assertEquals(args.get('event_name'), 'create') self.assertEquals(args.get('sender'), FakeModelSerializer) self.assertIsInstance(args.get('instance'), FakeModelSerializer) self.assertIsInstance(args.get('event_output'), FakeModel) self.assertFalse(args.get('kwarg_data')) self.assertIsInstance(args.get('kwarg_data'), dict) self.assertTrue(args.get('arg_data')) self.assertTrue(len(args.get('arg_data')), 1) self.assertIsInstance(args.get('arg_data'), tuple) # cleanup pre_event_signal.disconnect(pre_receiver) post_event_signal.disconnect(post_receiver)