def test_charge_should_call_facades_charge_customer_with_stripes_customer_and_memberships_plan_type_price_and_then_assign_stripes_customer_id_to_memberships_customer_id(
            self, stripe_facade_class):
        # setup
        adapter = MembershipStripeAdapter(self.membership)
        customer = mock.Mock()
        facade = stripe_facade_class.return_value

        # action
        adapter.charge(customer)

        # assert
        self.assertTupleEqual((customer, self.membership.plan_type.price,),
            facade.charge_customer.call_args[0])
    def test_charge_should_call_facades_charge_customer_with_stripes_customer_and_memberships_plan_type_price_and_then_assign_stripes_customer_id_to_memberships_customer_id(
            self, stripe_facade_class):
        # setup
        adapter = MembershipStripeAdapter(self.membership)
        customer = mock.Mock()
        facade = stripe_facade_class.return_value

        # action
        adapter.charge(customer)

        # assert
        self.assertTupleEqual((
            customer,
            self.membership.plan_type.price,
        ), facade.charge_customer.call_args[0])
    def test_charge_should_call_facades_charge_customer_with_stripes_customer_and_memberships_plant_type_price_with_applied_discount_and_then_assign_stripes_customer_id_to_memberships_customer_id(
            self, stripe_facade_class):
        # setup
        adapter = MembershipStripeAdapter(self.membership)
        coupon_code = mock.Mock()
        coupon_code.discount = decimal.Decimal(5.5)
        self.membership.coupon_code = coupon_code
        customer = mock.Mock()
        facade = stripe_facade_class.return_value

        # action
        adapter.charge(customer)

        # assert
        self.assertTupleEqual(
            (customer, self.membership.plan_type.price - coupon_code.discount,),
            facade.charge_customer.call_args[0])
    def test_charge_should_call_facades_charge_customer_with_stripes_customer_and_memberships_plant_type_price_with_applied_discount_and_then_assign_stripes_customer_id_to_memberships_customer_id(
            self, stripe_facade_class):
        # setup
        adapter = MembershipStripeAdapter(self.membership)
        coupon_code = mock.Mock()
        coupon_code.discount = decimal.Decimal(5.5)
        self.membership.coupon_code = coupon_code
        customer = mock.Mock()
        facade = stripe_facade_class.return_value

        # action
        adapter.charge(customer)

        # assert
        self.assertTupleEqual((
            customer,
            self.membership.plan_type.price - coupon_code.discount,
        ), facade.charge_customer.call_args[0])