Пример #1
0
    def test_create_trial_callback(self, customer_create_mock, callback_mock):
        user = get_user_model().objects.create_user(username="******",
                                                    email="*****@*****.**")
        Customer.create(user)

        customer_create_mock.assert_called_once_with(email=user.email)
        callback_mock.assert_called_once_with(user)
Пример #2
0
    def test_create_default_plan(self, customer_create_mock, callback_mock, default_plan_fake, subscribe_mock):
        user = get_user_model().objects.create_user(username="******", email="*****@*****.**")
        Customer.create(user)

        customer_create_mock.assert_called_once_with(email=user.email)
        callback_mock.assert_called_once_with(user)
        subscribe_mock.assert_called_once_with(plan=default_plan_fake, trial_days="donkey")
Пример #3
0
    def test_create_default_plan(self, customer_create_mock, callback_mock, default_plan_fake, subscribe_mock):
        user = get_user_model().objects.create_user(username="******", email="*****@*****.**")
        Customer.create(user)

        customer_create_mock.assert_called_once_with(email=user.email)
        callback_mock.assert_called_once_with(user)
        subscribe_mock.assert_called_once_with(plan=default_plan_fake, trial_days="donkey")
Пример #4
0
    def test_create_trial_callback_without_default_plan(self, create_mock, callback_mock):
        user = get_user_model().objects.create_user(username="******", email="*****@*****.**")
        Customer.create(user, idempotency_key="foo")

        create_mock.assert_called_once_with(
            api_key=settings.STRIPE_SECRET_KEY, email=user.email, idempotency_key="foo",
            metadata={"djstripe_subscriber": user.id}
        )
        callback_mock.assert_called_once_with(user)
Пример #5
0
    def test_customer_create_metadata_disabled(self, customer_mock):
        user = get_user_model().objects.create_user(
            username="******")

        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["id"] = "cus_test_create_metadata_disabled"
        customer_mock.return_value = fake_customer

        djstripe_settings.SUBSCRIBER_CUSTOMER_KEY = ""
        customer = Customer.create(user)
        djstripe_settings.SUBSCRIBER_CUSTOMER_KEY = "djstripe_subscriber"

        customer_mock.assert_called_once_with(api_key=STRIPE_SECRET_KEY,
                                              email="",
                                              idempotency_key=None,
                                              metadata={})

        self.assertEqual(customer.metadata, None)

        self.assert_fks(
            customer,
            expected_blank_fks={
                "djstripe.Customer.coupon", "djstripe.Customer.default_source"
            },
        )
Пример #6
0
 def get_context_data(self, **kwargs):
     context = super(SubscribeView, self).get_context_data(**kwargs)
     context['publishable_key'] = settings.STRIPE_PUBLIC_KEY
     profile = self.request.user.profile
     if profile.stripe_customer_id:
         customer = Customer.objects.get(stripe_id=profile.stripe_customer_id)
     else:
         customer = Customer.create(self.request.user)
         profile.stripe_customer_id = customer.stripe_id
         profile.save()
     context['customer'] = customer
     return context
Пример #7
0
 def get_context_data(self, **kwargs):
     context = super(SubscribeView, self).get_context_data(**kwargs)
     context['publishable_key'] = settings.STRIPE_PUBLIC_KEY
     profile = self.request.user.profile
     if profile.stripe_customer_id:
         customer = Customer.objects.get(
             stripe_id=profile.stripe_customer_id)
     else:
         customer = Customer.create(self.request.user)
         profile.stripe_customer_id = customer.stripe_id
         profile.save()
     context['customer'] = customer
     return context
Пример #8
0
    def test_customer_sync_no_sources(self, customer_mock):
        fake_customer = deepcopy(FAKE_CUSTOMER)
        fake_customer["id"] = "cus_test_sync_no_sources"
        fake_customer["default_source"] = None
        fake_customer["sources"] = None
        customer_mock.return_value = fake_customer

        user = get_user_model().objects.create_user(
            username="******")
        customer = Customer.create(user)
        self.assertEqual(customer_mock.call_args_list[0][1].get("metadata"),
                         {"djstripe_subscriber": user.pk})

        self.assertEqual(customer.sources.count(), 0)
        self.assertEqual(customer.legacy_cards.count(), 0)
        self.assertEqual(customer.default_source, None)
Пример #9
0
	def test_customer_sync_no_sources(self, customer_mock):
		fake_customer = deepcopy(FAKE_CUSTOMER)
		fake_customer["id"] = "cus_test_sync_no_sources"
		fake_customer["default_source"] = None
		fake_customer["sources"] = None
		customer_mock.return_value = fake_customer

		user = get_user_model().objects.create_user(username="******")
		customer = Customer.create(user)
		self.assertEqual(
			customer_mock.call_args_list[0][1].get("metadata"), {"djstripe_subscriber": user.pk}
		)

		self.assertEqual(customer.sources.count(), 0)
		self.assertEqual(customer.legacy_cards.count(), 0)
		self.assertEqual(customer.default_source, None)

		self.assert_fks(
			customer,
			expected_blank_fks={"djstripe.Customer.coupon", "djstripe.Customer.default_source"},
		)
Пример #10
0
	def test_customer_create_metadata_disabled(self, customer_mock):
		user = get_user_model().objects.create_user(
			username="******"
		)

		fake_customer = deepcopy(FAKE_CUSTOMER)
		fake_customer["id"] = "cus_test_create_metadata_disabled"
		customer_mock.return_value = fake_customer

		djstripe_settings.SUBSCRIBER_CUSTOMER_KEY = ""
		customer = Customer.create(user)
		djstripe_settings.SUBSCRIBER_CUSTOMER_KEY = "djstripe_subscriber"

		customer_mock.assert_called_once_with(
			api_key=STRIPE_SECRET_KEY, email="", idempotency_key=None, metadata={}
		)

		self.assertEqual(customer.metadata, None)

		self.assert_fks(
			customer,
			expected_blank_fks={"djstripe.Customer.coupon", "djstripe.Customer.default_source"},
		)
Пример #11
0
    def test_create_trial_callback(self, customer_create_mock, callback_mock):
        user = get_user_model().objects.create_user(username="******", email="*****@*****.**")
        Customer.create(user)

        customer_create_mock.assert_called_once_with(email=user.email)
        callback_mock.assert_called_once_with(user)
Пример #12
0
 def form_valid(self, form):
     stripe.api_key = settings.STRIPE_LIVE_PUBLIC_KEY
     ctx = self.get_context_data()
     form_billing = ctx['form_billing']
     form_business = ctx['form_business']
     form_stripe = ctx['form_stripe']
     plan_id = self.kwargs.get("plan_id")
     coupon_code = self.request.POST.get('coupon_code')
     if form_stripe.is_valid() and form_billing.is_valid() and form_business.is_valid() and form.is_valid():
         try:
             with transaction.atomic():
                 self.object = form.save()  # saves Father and Children
                 customer = Customer.create(
                     subscriber=self.object)
                 customer.add_card(form_stripe.cleaned_data.get(
                     'stripe_token', None))
                 customer.subscribe(plan_id, coupon=coupon_code)
                 self.object.profile.stripe_id = customer.stripe_id
                 self.object.profile.last_4_digits = form_stripe.cleaned_data['last_4_digits']
                 self.object.profile.subscribed = self.object.profile.has_active_subscription
                 self.object.profile.save()
                 customer._sync_invoices()
                 customer._sync_charges()
                 customer._sync_cards()
         except IntegrityError:
             # form.addError(form.cleaned_data['email'] + ' is already a member')
             messages.error(self.request, _(
                 form.cleaned_data['email'] + ' is already a member'))
             return self.render_to_response(
                 self.get_context_data(form=form))
         except stripe.error.CardError as err:
             card_msg = 'Invalid card entry:' + err._message
             messages.error(self.request, _(card_msg))
             return self.render_to_response(
                 self.get_context_data(form=form))
         except stripe.error.InvalidRequestError as err:
             card_msg = 'Invalid coupon entry:' + err._message
             messages.error(self.request, _(card_msg))
             return self.render_to_response(
                 self.get_context_data(form=form))
         else:
             business = form_business.save(commit=False)
             business.user = self.object
             business.save()
             UserRole.objects.create(
                 role='admin', user_profile=self.object.profile)
             superusers = User.objects.filter(is_superuser=True)
             if superusers:
                 Employee.objects.create(
                     employee=self.object.profile,
                     parent=superusers.first().profile)
             # return reverse('djstripe:subscribe')
             # Email activation feature
             # current_site = get_current_site(self.request)
             mail_subject = 'Activate your escaperoom account.'
             message = render_to_string('users/account_active_email.html', {
                 'user': self.object,
                 # 'domain': current_site.domain,
                 'domain': self.request.environ.get('HTTP_ORIGIN'),
                 'uid': urlsafe_base64_encode(force_bytes(self.object.pk)),
                 'token': account_activation_token.make_token(self.object),
             })
             to_email = form.cleaned_data.get('email')
             send_mail(
                 mail_subject,
                 message,
                 '*****@*****.**',
                 [to_email],
                 fail_silently=False,
             )
             messages.success(self.request, _(
                 'Thank You for subscribing! Please activate your account.')
             )
             return redirect(self.get_success_url())
     else:
         return super(UserSignupWithSubscription, self).form_valid(form)