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)
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")
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")
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)
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" }, )
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
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
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)
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"}, )
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"}, )
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)
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)