def approve(self, refund): def _revoke_lines(r): for line in r.lines.all(): line.set_status(REFUND_LINE.COMPLETE) r.set_status(REFUND.COMPLETE) with mock.patch.object(Refund, '_revoke_lines', side_effect=_revoke_lines, autospec=True): with mock_signal_receiver(post_refund) as receiver: self.assertEqual(receiver.call_count, 0) self.assertTrue(refund.approve()) self.assertEqual(receiver.call_count, 1)
def test_adding_a_review_sends_a_signal(self): review_user = G(User) detail_page = self.app.get(self.product.get_absolute_url(), user=review_user) with mock_signal_receiver(review_added) as receiver: add_review_page = detail_page.click(linkid="write_review") form = add_review_page.forms['add_review_form'] form['title'] = 'This is great!' form['score'] = 5 form['body'] = 'Loving it, loving it, loving it' form.submit() self.assertEqual(receiver.call_count, 1) self.assertEqual(1, self.product.reviews.all().count())
def test_adding_a_review_sends_a_signal(self): review_user = UserFactory() detail_page = self.app.get(self.product.get_absolute_url(), user=review_user) with mock_signal_receiver(review_added) as receiver: add_review_page = detail_page.click(linkid="write_review") form = add_review_page.forms['add_review_form'] form['title'] = 'This is great!' form['score'] = 5 form['body'] = 'Loving it, loving it, loving it' form.submit() self.assertEqual(receiver.call_count, 1) self.assertEqual(1, self.product.reviews.all().count())
def test_accepted(self): """ When payment is accepted, the following should occur: 1. The response is recorded and PaymentEvent/Source objects created. 2. An order for the corresponding basket is created. 3. The order is fulfilled. """ # The basket should not have an associated order if no payment was made. self.assertFalse(Order.objects.filter(basket=self.basket).exists()) notification = self.generate_notification( self.processor.secret_key, self.basket, billing_address=self.billing_address, ) with mock_signal_receiver(post_checkout) as receiver: response = self.client.post(reverse('cybersource_notify'), notification) # Validate that a new order exists in the correct state order = Order.objects.get(basket=self.basket) self.assertIsNotNone( order, 'No order was created for the basket after payment.') self.assertEqual(order.status, ORDER.OPEN) # Validate the order's line items self.assertListEqual( list(order.lines.values_list('product__id', flat=True)), list(self.basket.lines.values_list('product__id', flat=True))) # Verify the post_checkout signal was emitted self.assertEqual(receiver.call_count, 1) __, kwargs = receiver.call_args self.assertEqual(kwargs['order'], order) # The view should always return 200 self.assertEqual(response.status_code, 200) # Validate the payment data was recorded for auditing self._assert_payment_data_recorded(notification) # The basket should be marked as submitted. Refresh with data from the database. basket = Basket.objects.get(id=self.basket.id) self.assertTrue(basket.is_submitted) self.assertIsNotNone(basket.date_submitted)
def test_accepted(self): """ When payment is accepted, the following should occur: 1. The response is recorded and PaymentEvent/Source objects created. 2. An order for the corresponding basket is created. 3. The order is fulfilled. """ # The basket should not have an associated order if no payment was made. self.assertFalse(Order.objects.filter(basket=self.basket).exists()) notification = self.generate_notification( self.processor.secret_key, self.basket, billing_address=self.billing_address, ) with mock_signal_receiver(post_checkout) as receiver: response = self.client.post(reverse('cybersource_notify'), notification) # Validate that a new order exists in the correct state order = Order.objects.get(basket=self.basket) self.assertIsNotNone(order, 'No order was created for the basket after payment.') self.assertEqual(order.status, ORDER.OPEN) # Validate the order's line items self.assertListEqual(list(order.lines.values_list('product__id', flat=True)), list(self.basket.lines.values_list('product__id', flat=True))) # Verify the post_checkout signal was emitted self.assertEqual(receiver.call_count, 1) __, kwargs = receiver.call_args self.assertEqual(kwargs['order'], order) # The view should always return 200 self.assertEqual(response.status_code, 200) # Validate the payment data was recorded for auditing self._assert_payment_data_recorded(notification) # The basket should be marked as submitted. Refresh with data from the database. basket = Basket.objects.get(id=self.basket.id) self.assertTrue(basket.is_submitted) self.assertIsNotNone(basket.date_submitted)
def test_set_status_sends_a_signal(self): self.order = create_order(status='PENDING') with mock_signal_receiver(order_status_changed) as receiver: self.order.set_status('SHIPPED') self.assertEqual(receiver.call_count, 1)
def test_set_status_sends_a_signal(self): with mock_signal_receiver(order_line_status_changed) as receiver: self.line.set_status('C') self.assertEqual(receiver.call_count, 1)