Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 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())
Ejemplo n.º 3
0
 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())
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)