Ejemplo n.º 1
0
 def test_total_price_to_pay_with_more_credit_than_order_price(self):
     user = VokoUserFactory()
     BalanceFactory(user=user, type="CR", amount=100)
     order = OrderFactory(user=user)
     OrderProductFactory(order=order, amount=1, product__base_price=10)
     self.assertEqual(
         order.total_price_to_pay_with_balances_taken_into_account(), 0)
Ejemplo n.º 2
0
 def test_total_price_to_pay_with_no_balance(self):
     order = OrderFactory()
     OrderProductFactory(order=order)
     OrderProductFactory(order=order)
     self.assertEqual(
         order.total_price_to_pay_with_balances_taken_into_account(),
         order.total_price)
Ejemplo n.º 3
0
 def test_total_price_to_pay_with_large_debit(self):
     user = VokoUserFactory()
     BalanceFactory(user=user, type="DR", amount=100)
     order = OrderFactory(user=user)
     odp1 = OrderProductFactory(order=order, amount=1, product__base_price=10)
     self.assertEqual(order.total_price_to_pay_with_balances_taken_into_account(),
                      order.total_price + Decimal("100"))
Ejemplo n.º 4
0
 def test_total_price_to_pay_with_more_credit_than_order_price(self):
     user = VokoUserFactory()
     BalanceFactory(user=user, type="CR", amount=100)
     order = OrderFactory(user=user)
     odp1 = OrderProductFactory(order=order, amount=1, product__base_price=10)
     self.assertEqual(order.total_price_to_pay_with_balances_taken_into_account(),
                      0)
Ejemplo n.º 5
0
 def test_total_price_to_pay_with_no_balance(self):
     order = OrderFactory()
     OrderProductFactory(order=order)
     OrderProductFactory(order=order)
     self.assertEqual(
         order.total_price_to_pay_with_balances_taken_into_account(),
         order.total_price)
Ejemplo n.º 6
0
 def test_total_price_to_pay_with_large_debit(self):
     user = VokoUserFactory()
     BalanceFactory(user=user, type="DR", amount=100)
     order = OrderFactory(user=user)
     OrderProductFactory(order=order, amount=1, product__base_price=10)
     self.assertEqual(
         order.total_price_to_pay_with_balances_taken_into_account(),
         order.total_price + Decimal("100"))
Ejemplo n.º 7
0
 def test_total_price_to_pay_with_credit(self):
     user = VokoUserFactory()
     BalanceFactory(user=user, type="CR", amount=0.10)
     order = OrderFactory(user=user)
     odp1 = OrderProductFactory(order=order)
     odp2 = OrderProductFactory(order=order)
     self.assertEqual(order.total_price_to_pay_with_balances_taken_into_account(),
                      order.total_price - Decimal("0.10"))
Ejemplo n.º 8
0
 def test_total_price_to_pay_with_credit(self):
     user = VokoUserFactory()
     BalanceFactory(user=user, type="CR", amount=0.10)
     order = OrderFactory(user=user)
     OrderProductFactory(order=order)
     OrderProductFactory(order=order)
     self.assertEqual(
         order.total_price_to_pay_with_balances_taken_into_account(),
         order.total_price - Decimal("0.10"))
Ejemplo n.º 9
0
class TestCreateTransaction(FinanceTestCase):
    def setUp(self):
        super(TestCreateTransaction, self).setUp()
        self.url = reverse("finance.createtransaction")

        self.order = OrderFactory(user=self.user, finalized=True, paid=False)

        s = self.client.session
        s["order_to_pay"] = self.order.id
        s.save()

    def test_that_transaction_is_created(self):
        self.client.post(self.url, {"bank": "EXAMPLE_BANK"})
        self.mollie_client.return_value.payments.create.assert_called_once_with(
            {
                "description": "VOKO Utrecht %d" % self.order.id,
                "webhookUrl": settings.BASE_URL + reverse("finance.callback"),
                "amount": float(self.order.total_price_to_pay_with_balances_taken_into_account()),
                "redirectUrl": settings.BASE_URL + "/finance/pay/transaction/confirm/?order=%d" % self.order.id,
                "metadata": {"order_id": self.order.id},
                "method": "ideal",
                "issuer": "EXAMPLE_BANK",
            }
        )

    def test_that_payment_object_is_created(self):
        assert Payment.objects.count() == 0

        self.client.post(self.url, {"bank": "EXAMPLE_BANK"})
        payment = Payment.objects.get()

        self.assertEqual(payment.amount, self.order.total_price_to_pay_with_balances_taken_into_account())
        self.assertEqual(payment.order, self.order)
        self.assertEqual(payment.mollie_id, "transaction_id")
        self.assertEqual(payment.balance, None)

    def test_that_user_is_redirected_to_bank_url(self):
        ret = self.client.post(self.url, {"bank": "EXAMPLE_BANK"})
        self.assertEqual(ret.status_code, 302)
        self.assertEqual(ret.url, "http://bank.url")

    def test_error_when_user_doesnt_own_order(self):
        s = self.client.session
        s["order_to_pay"] = OrderFactory().id
        s.save()

        with self.assertRaises(AssertionError):
            self.client.post(self.url, {"bank": "EXAMPLE_BANK"})

    def test_error_when_order_not_finalized(self):
        self.order.finalized = False
        self.order.save()

        with self.assertRaises(AssertionError):
            self.client.post(self.url, {"bank": "EXAMPLE_BANK"})

    def test_redirect_on_invalid_form(self):
        ret = self.client.post(self.url, {"bank": "foo"})
        self.assertRedirects(ret, reverse("finance.choosebank"))

    def test_redirect_when_order_round_is_closed(self):
        month_ago = datetime.now(tz=UTC) - timedelta(days=30)
        order_round = OrderRoundFactory(closed_for_orders=month_ago)
        assert order_round.is_open is False
        self.order.order_round = order_round
        self.order.save()

        ret = self.client.post(self.url, {"bank": "EXAMPLE_BANK"})
        self.assertRedirects(ret, reverse("finish_order", args=(self.order.id,)), fetch_redirect_response=False)
Ejemplo n.º 10
0
class TestCreateTransaction(FinanceTestCase):
    def setUp(self):
        super(TestCreateTransaction, self).setUp()
        self.url = reverse('finance.createtransaction')

        self.order = OrderFactory(user=self.user,
                                  finalized=True,
                                  paid=False)

    def test_that_transaction_is_created(self):
        self.client.post(self.url, {'bank': 'EXAMPLE_BANK'})
        self.mollie_client.return_value.payments.create.assert_called_once_with(  # noqa
            {'description': 'VOKO Utrecht %d' % self.order.id,
             'webhookUrl': settings.BASE_URL + reverse('finance.callback'),
             'amount': float(self.order.total_price_to_pay_with_balances_taken_into_account()),  # noqa
             'redirectUrl': (settings.BASE_URL +
                             '/finance/pay/transaction/confirm/?order=%d'
                             % self.order.id),
             'metadata': {'order_id': self.order.id},
             'method': 'ideal',
             'issuer': 'EXAMPLE_BANK'}
        )

    def test_that_payment_object_is_created(self):
        assert Payment.objects.count() == 0

        self.client.post(self.url, {'bank': "EXAMPLE_BANK"})
        payment = Payment.objects.get()

        self.assertEqual(
            payment.amount,
            self.order.total_price_to_pay_with_balances_taken_into_account()
        )
        self.assertEqual(payment.order, self.order)
        self.assertEqual(payment.mollie_id, "transaction_id")
        self.assertEqual(payment.balance, None)

    def test_that_user_is_redirected_to_bank_url(self):
        ret = self.client.post(self.url, {'bank': "EXAMPLE_BANK"})
        self.assertEqual(ret.status_code, 302)
        self.assertEqual(ret.url, "http://bank.url")

    def test_redirect_when_order_not_finalized(self):
        # No order matches, so not found
        self.order.finalized = False
        self.order.save()

        ret = self.client.post(self.url, {'bank': "EXAMPLE_BANK"})
        self.assertRedirects(ret, reverse('view_products'))

    def test_redirect_on_invalid_form(self):
        ret = self.client.post(self.url, {'bank': 'foo'})
        self.assertRedirects(ret, reverse('finance.choosebank'))

    def test_redirect_when_order_round_is_closed(self):
        # No order matches, so not found
        month_ago = datetime.now(tz=UTC) - timedelta(days=30)
        order_round = OrderRoundFactory(closed_for_orders=month_ago)
        assert order_round.is_open is False
        self.order.order_round = order_round
        self.order.save()

        ret = self.client.post(self.url, {'bank': "EXAMPLE_BANK"})
        self.assertRedirects(ret, reverse('view_products'))